瀏覽代碼

Major refactoring of Java Code generator

Includes a change in the EMF model Expressions.ecore and new test code.
Resolves #1021
Rene Beckmann 8 年之前
父節點
當前提交
fe005792ba
共有 18 個文件被更改,包括 371 次插入309 次删除
  1. 6 0
      plugins/org.yakindu.base.expressions.edit/plugin.properties
  2. 68 21
      plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/ElementReferenceExpressionItemProvider.java
  3. 47 22
      plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/FeatureCallItemProvider.java
  4. 1 18
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ElementReferenceExpression.java
  5. 93 64
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ExpressionsPackage.java
  6. 1 18
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/FeatureCall.java
  7. 1 37
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ElementReferenceExpressionImpl.java
  8. 1 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ExpressionsFactoryImpl.java
  9. 39 28
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ExpressionsPackageImpl.java
  10. 1 37
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/FeatureCallImpl.java
  11. 19 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/util/ExpressionsAdapterFactory.java
  12. 25 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/util/ExpressionsSwitch.java
  13. 7 6
      plugins/org.yakindu.base.expressions/model/Expressions.ecore
  14. 39 49
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/ExpressionCode.xtend
  15. 17 3
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/TimerService.java
  16. 3 3
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/constants/ConstantsStatemachine.java
  17. 2 2
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/constonlynamedscope/ConstOnlyNamedScopeStatemachine.java
  18. 1 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/typealias/TypeAliasStatemachine.java

+ 6 - 0
plugins/org.yakindu.base.expressions.edit/plugin.properties

@@ -122,3 +122,9 @@ _UI_DoubleLiteral_value_feature = Value
 _UI_FloatLiteral_value_feature = Value
 _UI_TypeCastExpression_operand_feature = Operand
 _UI_TypeCastExpression_type_feature = Type
+_UI_ArgumentExpression_type = Argument Expression
+_UI_FeatureCall_arraySelector_feature = Array Selector
+_UI_FeatureCall_arrayAccess_feature = Array Access
+_UI_ElementReferenceExpression_arraySelector_feature = Array Selector
+_UI_ElementReferenceExpression_arrayAccess_feature = Array Access
+_UI_ArgumentExpression_args_feature = Args

+ 68 - 21
plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/ElementReferenceExpressionItemProvider.java

@@ -32,7 +32,7 @@ import org.yakindu.base.expressions.expressions.ExpressionsPackage;
  * @generated
  */
 public class ElementReferenceExpressionItemProvider
-	extends ExpressionItemProvider {
+	extends ArgumentExpressionItemProvider {
 	/**
 	 * This constructs an instance from a factory and a notifier.
 	 * <!-- begin-user-doc -->
@@ -56,6 +56,7 @@ public class ElementReferenceExpressionItemProvider
 
 			addReferencePropertyDescriptor(object);
 			addOperationCallPropertyDescriptor(object);
+			addArrayAccessPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -104,6 +105,28 @@ public class ElementReferenceExpressionItemProvider
 				 null));
 	}
 
+	/**
+	 * This adds a property descriptor for the Array Access feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addArrayAccessPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ElementReferenceExpression_arrayAccess_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_ElementReferenceExpression_arrayAccess_feature", "_UI_ElementReferenceExpression_type"),
+				 ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
 	/**
 	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
 	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
@@ -116,7 +139,7 @@ public class ElementReferenceExpressionItemProvider
 	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
 		if (childrenFeatures == null) {
 			super.getChildrenFeatures(object);
-			childrenFeatures.add(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS);
+			childrenFeatures.add(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR);
 		}
 		return childrenFeatures;
 	}
@@ -170,9 +193,10 @@ public class ElementReferenceExpressionItemProvider
 
 		switch (notification.getFeatureID(ElementReferenceExpression.class)) {
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__OPERATION_CALL:
+			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
-			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARGS:
+			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
 				return;
 		}
@@ -192,93 +216,116 @@ public class ElementReferenceExpressionItemProvider
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createAssignmentExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createConditionalExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createLogicalOrExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createLogicalAndExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createLogicalNotExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createBitwiseXorExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createBitwiseOrExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createBitwiseAndExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createLogicalRelationExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createShiftExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createNumericalAddSubtractExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createNumericalMultiplyDivideExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createNumericalUnaryExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createPrimitiveValueExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createFeatureCall()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createElementReferenceExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createParenthesizedExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARGS,
+				(ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createTypeCastExpression()));
 	}
 
+	/**
+	 * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getCreateChildText(Object owner, Object feature, Object child, Collection<?> selection) {
+		Object childFeature = feature;
+		Object childObject = child;
+
+		boolean qualify =
+			childFeature == ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS ||
+			childFeature == ExpressionsPackage.Literals.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR;
+
+		if (qualify) {
+			return getString
+				("_UI_CreateChild_text2",
+				 new Object[] { getTypeText(childObject), getFeatureText(childFeature), getTypeText(owner) });
+		}
+		return super.getCreateChildText(owner, feature, child, selection);
+	}
+
 }

+ 47 - 22
plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/FeatureCallItemProvider.java

@@ -32,7 +32,7 @@ import org.yakindu.base.expressions.expressions.FeatureCall;
  * @generated
  */
 public class FeatureCallItemProvider
-	extends ExpressionItemProvider {
+	extends ArgumentExpressionItemProvider {
 	/**
 	 * This constructs an instance from a factory and a notifier.
 	 * <!-- begin-user-doc -->
@@ -56,6 +56,7 @@ public class FeatureCallItemProvider
 
 			addFeaturePropertyDescriptor(object);
 			addOperationCallPropertyDescriptor(object);
+			addArrayAccessPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -104,6 +105,28 @@ public class FeatureCallItemProvider
 				 null));
 	}
 
+	/**
+	 * This adds a property descriptor for the Array Access feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addArrayAccessPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_FeatureCall_arrayAccess_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_FeatureCall_arrayAccess_feature", "_UI_FeatureCall_type"),
+				 ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_ACCESS,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
 	/**
 	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
 	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
@@ -117,7 +140,7 @@ public class FeatureCallItemProvider
 		if (childrenFeatures == null) {
 			super.getChildrenFeatures(object);
 			childrenFeatures.add(ExpressionsPackage.Literals.FEATURE_CALL__OWNER);
-			childrenFeatures.add(ExpressionsPackage.Literals.FEATURE_CALL__ARGS);
+			childrenFeatures.add(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR);
 		}
 		return childrenFeatures;
 	}
@@ -171,10 +194,11 @@ public class FeatureCallItemProvider
 
 		switch (notification.getFeatureID(FeatureCall.class)) {
 			case ExpressionsPackage.FEATURE_CALL__OPERATION_CALL:
+			case ExpressionsPackage.FEATURE_CALL__ARRAY_ACCESS:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case ExpressionsPackage.FEATURE_CALL__OWNER:
-			case ExpressionsPackage.FEATURE_CALL__ARGS:
+			case ExpressionsPackage.FEATURE_CALL__ARRAY_SELECTOR:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
 				return;
 		}
@@ -284,92 +308,92 @@ public class FeatureCallItemProvider
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createAssignmentExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createConditionalExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createLogicalOrExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createLogicalAndExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createLogicalNotExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createBitwiseXorExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createBitwiseOrExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createBitwiseAndExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createLogicalRelationExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createShiftExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createNumericalAddSubtractExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createNumericalMultiplyDivideExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createNumericalUnaryExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createPrimitiveValueExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createFeatureCall()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createElementReferenceExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createParenthesizedExpression()));
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.FEATURE_CALL__ARGS,
+				(ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR,
 				 ExpressionsFactory.eINSTANCE.createTypeCastExpression()));
 	}
 
@@ -385,8 +409,9 @@ public class FeatureCallItemProvider
 		Object childObject = child;
 
 		boolean qualify =
+			childFeature == ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS ||
 			childFeature == ExpressionsPackage.Literals.FEATURE_CALL__OWNER ||
-			childFeature == ExpressionsPackage.Literals.FEATURE_CALL__ARGS;
+			childFeature == ExpressionsPackage.Literals.FEATURE_CALL__ARRAY_SELECTOR;
 
 		if (qualify) {
 			return getString

+ 1 - 18
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ElementReferenceExpression.java

@@ -16,7 +16,6 @@ import org.eclipse.emf.ecore.EObject;
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#getReference <em>Reference</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#isOperationCall <em>Operation Call</em>}</li>
- *   <li>{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#getArgs <em>Args</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#getArraySelector <em>Array Selector</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#isArrayAccess <em>Array Access</em>}</li>
  * </ul>
@@ -25,7 +24,7 @@ import org.eclipse.emf.ecore.EObject;
  * @model
  * @generated
  */
-public interface ElementReferenceExpression extends Expression {
+public interface ElementReferenceExpression extends ArgumentExpression {
 	/**
 	 * Returns the value of the '<em><b>Reference</b></em>' reference.
 	 * <!-- begin-user-doc -->
@@ -78,22 +77,6 @@ public interface ElementReferenceExpression extends Expression {
 	 */
 	void setOperationCall(boolean value);
 
-	/**
-	 * Returns the value of the '<em><b>Args</b></em>' containment reference list.
-	 * The list contents are of type {@link org.yakindu.base.expressions.expressions.Expression}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Args</em>' containment reference list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Args</em>' containment reference list.
-	 * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getElementReferenceExpression_Args()
-	 * @model containment="true"
-	 * @generated
-	 */
-	EList<Expression> getArgs();
-
 	/**
 	 * Returns the value of the '<em><b>Array Selector</b></em>' containment reference list.
 	 * The list contents are of type {@link org.yakindu.base.expressions.expressions.Expression}.

+ 93 - 64
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ExpressionsPackage.java

@@ -835,6 +835,34 @@ public interface ExpressionsPackage extends EPackage {
 	 */
 	int PRIMITIVE_VALUE_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
 
+	/**
+	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.impl.ArgumentExpressionImpl <em>Argument Expression</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.base.expressions.expressions.impl.ArgumentExpressionImpl
+	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getArgumentExpression()
+	 * @generated
+	 */
+	int ARGUMENT_EXPRESSION = 27;
+
+	/**
+	 * The feature id for the '<em><b>Args</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARGUMENT_EXPRESSION__ARGS = EXPRESSION_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Argument Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARGUMENT_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
+
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.impl.FeatureCallImpl <em>Feature Call</em>}' class.
 	 * <!-- begin-user-doc -->
@@ -846,40 +874,40 @@ public interface ExpressionsPackage extends EPackage {
 	int FEATURE_CALL = 23;
 
 	/**
-	 * The feature id for the '<em><b>Owner</b></em>' containment reference.
+	 * The feature id for the '<em><b>Args</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int FEATURE_CALL__OWNER = EXPRESSION_FEATURE_COUNT + 0;
+	int FEATURE_CALL__ARGS = ARGUMENT_EXPRESSION__ARGS;
 
 	/**
-	 * The feature id for the '<em><b>Feature</b></em>' reference.
+	 * The feature id for the '<em><b>Owner</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int FEATURE_CALL__FEATURE = EXPRESSION_FEATURE_COUNT + 1;
+	int FEATURE_CALL__OWNER = ARGUMENT_EXPRESSION_FEATURE_COUNT + 0;
 
 	/**
-	 * The feature id for the '<em><b>Operation Call</b></em>' attribute.
+	 * The feature id for the '<em><b>Feature</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int FEATURE_CALL__OPERATION_CALL = EXPRESSION_FEATURE_COUNT + 2;
+	int FEATURE_CALL__FEATURE = ARGUMENT_EXPRESSION_FEATURE_COUNT + 1;
 
 	/**
-	 * The feature id for the '<em><b>Args</b></em>' containment reference list.
+	 * The feature id for the '<em><b>Operation Call</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int FEATURE_CALL__ARGS = EXPRESSION_FEATURE_COUNT + 3;
+	int FEATURE_CALL__OPERATION_CALL = ARGUMENT_EXPRESSION_FEATURE_COUNT + 2;
 
 	/**
 	 * The feature id for the '<em><b>Array Selector</b></em>' containment reference list.
@@ -888,7 +916,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int FEATURE_CALL__ARRAY_SELECTOR = EXPRESSION_FEATURE_COUNT + 4;
+	int FEATURE_CALL__ARRAY_SELECTOR = ARGUMENT_EXPRESSION_FEATURE_COUNT + 3;
 
 	/**
 	 * The feature id for the '<em><b>Array Access</b></em>' attribute.
@@ -897,7 +925,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int FEATURE_CALL__ARRAY_ACCESS = EXPRESSION_FEATURE_COUNT + 5;
+	int FEATURE_CALL__ARRAY_ACCESS = ARGUMENT_EXPRESSION_FEATURE_COUNT + 4;
 
 	/**
 	 * The number of structural features of the '<em>Feature Call</em>' class.
@@ -906,7 +934,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int FEATURE_CALL_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 6;
+	int FEATURE_CALL_FEATURE_COUNT = ARGUMENT_EXPRESSION_FEATURE_COUNT + 5;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.impl.ElementReferenceExpressionImpl <em>Element Reference Expression</em>}' class.
@@ -919,31 +947,31 @@ public interface ExpressionsPackage extends EPackage {
 	int ELEMENT_REFERENCE_EXPRESSION = 24;
 
 	/**
-	 * The feature id for the '<em><b>Reference</b></em>' reference.
+	 * The feature id for the '<em><b>Args</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int ELEMENT_REFERENCE_EXPRESSION__REFERENCE = EXPRESSION_FEATURE_COUNT + 0;
+	int ELEMENT_REFERENCE_EXPRESSION__ARGS = ARGUMENT_EXPRESSION__ARGS;
 
 	/**
-	 * The feature id for the '<em><b>Operation Call</b></em>' attribute.
+	 * The feature id for the '<em><b>Reference</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int ELEMENT_REFERENCE_EXPRESSION__OPERATION_CALL = EXPRESSION_FEATURE_COUNT + 1;
+	int ELEMENT_REFERENCE_EXPRESSION__REFERENCE = ARGUMENT_EXPRESSION_FEATURE_COUNT + 0;
 
 	/**
-	 * The feature id for the '<em><b>Args</b></em>' containment reference list.
+	 * The feature id for the '<em><b>Operation Call</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int ELEMENT_REFERENCE_EXPRESSION__ARGS = EXPRESSION_FEATURE_COUNT + 2;
+	int ELEMENT_REFERENCE_EXPRESSION__OPERATION_CALL = ARGUMENT_EXPRESSION_FEATURE_COUNT + 1;
 
 	/**
 	 * The feature id for the '<em><b>Array Selector</b></em>' containment reference list.
@@ -952,7 +980,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR = EXPRESSION_FEATURE_COUNT + 3;
+	int ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR = ARGUMENT_EXPRESSION_FEATURE_COUNT + 2;
 
 	/**
 	 * The feature id for the '<em><b>Array Access</b></em>' attribute.
@@ -961,7 +989,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS = EXPRESSION_FEATURE_COUNT + 4;
+	int ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS = ARGUMENT_EXPRESSION_FEATURE_COUNT + 3;
 
 	/**
 	 * The number of structural features of the '<em>Element Reference Expression</em>' class.
@@ -970,7 +998,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int ELEMENT_REFERENCE_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 5;
+	int ELEMENT_REFERENCE_EXPRESSION_FEATURE_COUNT = ARGUMENT_EXPRESSION_FEATURE_COUNT + 4;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.impl.ParenthesizedExpressionImpl <em>Parenthesized Expression</em>}' class.
@@ -1045,7 +1073,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getAssignmentOperator()
 	 * @generated
 	 */
-	int ASSIGNMENT_OPERATOR = 27;
+	int ASSIGNMENT_OPERATOR = 28;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.ShiftOperator <em>Shift Operator</em>}' enum.
@@ -1055,7 +1083,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getShiftOperator()
 	 * @generated
 	 */
-	int SHIFT_OPERATOR = 28;
+	int SHIFT_OPERATOR = 29;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.AdditiveOperator <em>Additive Operator</em>}' enum.
@@ -1065,7 +1093,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getAdditiveOperator()
 	 * @generated
 	 */
-	int ADDITIVE_OPERATOR = 29;
+	int ADDITIVE_OPERATOR = 30;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.MultiplicativeOperator <em>Multiplicative Operator</em>}' enum.
@@ -1075,7 +1103,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getMultiplicativeOperator()
 	 * @generated
 	 */
-	int MULTIPLICATIVE_OPERATOR = 30;
+	int MULTIPLICATIVE_OPERATOR = 31;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.UnaryOperator <em>Unary Operator</em>}' enum.
@@ -1085,7 +1113,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getUnaryOperator()
 	 * @generated
 	 */
-	int UNARY_OPERATOR = 31;
+	int UNARY_OPERATOR = 32;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.RelationalOperator <em>Relational Operator</em>}' enum.
@@ -1095,7 +1123,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getRelationalOperator()
 	 * @generated
 	 */
-	int RELATIONAL_OPERATOR = 32;
+	int RELATIONAL_OPERATOR = 33;
 
 
 	/**
@@ -1789,17 +1817,6 @@ public interface ExpressionsPackage extends EPackage {
 	 */
 	EAttribute getFeatureCall_OperationCall();
 
-	/**
-	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.expressions.expressions.FeatureCall#getArgs <em>Args</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference list '<em>Args</em>'.
-	 * @see org.yakindu.base.expressions.expressions.FeatureCall#getArgs()
-	 * @see #getFeatureCall()
-	 * @generated
-	 */
-	EReference getFeatureCall_Args();
-
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.expressions.expressions.FeatureCall#getArraySelector <em>Array Selector</em>}'.
 	 * <!-- begin-user-doc -->
@@ -1854,17 +1871,6 @@ public interface ExpressionsPackage extends EPackage {
 	 */
 	EAttribute getElementReferenceExpression_OperationCall();
 
-	/**
-	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#getArgs <em>Args</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference list '<em>Args</em>'.
-	 * @see org.yakindu.base.expressions.expressions.ElementReferenceExpression#getArgs()
-	 * @see #getElementReferenceExpression()
-	 * @generated
-	 */
-	EReference getElementReferenceExpression_Args();
-
 	/**
 	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#getArraySelector <em>Array Selector</em>}'.
 	 * <!-- begin-user-doc -->
@@ -1940,6 +1946,27 @@ public interface ExpressionsPackage extends EPackage {
 	 */
 	EReference getTypeCastExpression_Type();
 
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.base.expressions.expressions.ArgumentExpression <em>Argument Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Argument Expression</em>'.
+	 * @see org.yakindu.base.expressions.expressions.ArgumentExpression
+	 * @generated
+	 */
+	EClass getArgumentExpression();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.expressions.expressions.ArgumentExpression#getArgs <em>Args</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Args</em>'.
+	 * @see org.yakindu.base.expressions.expressions.ArgumentExpression#getArgs()
+	 * @see #getArgumentExpression()
+	 * @generated
+	 */
+	EReference getArgumentExpression_Args();
+
 	/**
 	 * Returns the meta object for enum '{@link org.yakindu.base.expressions.expressions.AssignmentOperator <em>Assignment Operator</em>}'.
 	 * <!-- begin-user-doc -->
@@ -2590,14 +2617,6 @@ public interface ExpressionsPackage extends EPackage {
 		 */
 		EAttribute FEATURE_CALL__OPERATION_CALL = eINSTANCE.getFeatureCall_OperationCall();
 
-		/**
-		 * The meta object literal for the '<em><b>Args</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EReference FEATURE_CALL__ARGS = eINSTANCE.getFeatureCall_Args();
-
 		/**
 		 * The meta object literal for the '<em><b>Array Selector</b></em>' containment reference list feature.
 		 * <!-- begin-user-doc -->
@@ -2640,14 +2659,6 @@ public interface ExpressionsPackage extends EPackage {
 		 */
 		EAttribute ELEMENT_REFERENCE_EXPRESSION__OPERATION_CALL = eINSTANCE.getElementReferenceExpression_OperationCall();
 
-		/**
-		 * The meta object literal for the '<em><b>Args</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EReference ELEMENT_REFERENCE_EXPRESSION__ARGS = eINSTANCE.getElementReferenceExpression_Args();
-
 		/**
 		 * The meta object literal for the '<em><b>Array Selector</b></em>' containment reference list feature.
 		 * <!-- begin-user-doc -->
@@ -2708,6 +2719,24 @@ public interface ExpressionsPackage extends EPackage {
 		 */
 		EReference TYPE_CAST_EXPRESSION__TYPE = eINSTANCE.getTypeCastExpression_Type();
 
+		/**
+		 * The meta object literal for the '{@link org.yakindu.base.expressions.expressions.impl.ArgumentExpressionImpl <em>Argument Expression</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.base.expressions.expressions.impl.ArgumentExpressionImpl
+		 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getArgumentExpression()
+		 * @generated
+		 */
+		EClass ARGUMENT_EXPRESSION = eINSTANCE.getArgumentExpression();
+
+		/**
+		 * The meta object literal for the '<em><b>Args</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ARGUMENT_EXPRESSION__ARGS = eINSTANCE.getArgumentExpression_Args();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.base.expressions.expressions.AssignmentOperator <em>Assignment Operator</em>}' enum.
 		 * <!-- begin-user-doc -->

+ 1 - 18
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/FeatureCall.java

@@ -17,7 +17,6 @@ import org.eclipse.emf.ecore.EObject;
  *   <li>{@link org.yakindu.base.expressions.expressions.FeatureCall#getOwner <em>Owner</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.FeatureCall#getFeature <em>Feature</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.FeatureCall#isOperationCall <em>Operation Call</em>}</li>
- *   <li>{@link org.yakindu.base.expressions.expressions.FeatureCall#getArgs <em>Args</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.FeatureCall#getArraySelector <em>Array Selector</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.FeatureCall#isArrayAccess <em>Array Access</em>}</li>
  * </ul>
@@ -26,7 +25,7 @@ import org.eclipse.emf.ecore.EObject;
  * @model
  * @generated
  */
-public interface FeatureCall extends Expression {
+public interface FeatureCall extends ArgumentExpression {
 	/**
 	 * Returns the value of the '<em><b>Owner</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
@@ -105,22 +104,6 @@ public interface FeatureCall extends Expression {
 	 */
 	void setOperationCall(boolean value);
 
-	/**
-	 * Returns the value of the '<em><b>Args</b></em>' containment reference list.
-	 * The list contents are of type {@link org.yakindu.base.expressions.expressions.Expression}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Args</em>' containment reference list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Args</em>' containment reference list.
-	 * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getFeatureCall_Args()
-	 * @model containment="true"
-	 * @generated
-	 */
-	EList<Expression> getArgs();
-
 	/**
 	 * Returns the value of the '<em><b>Array Selector</b></em>' containment reference list.
 	 * The list contents are of type {@link org.yakindu.base.expressions.expressions.Expression}.

+ 1 - 37
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ElementReferenceExpressionImpl.java

@@ -27,14 +27,13 @@ import org.yakindu.base.expressions.expressions.ExpressionsPackage;
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ElementReferenceExpressionImpl#getReference <em>Reference</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ElementReferenceExpressionImpl#isOperationCall <em>Operation Call</em>}</li>
- *   <li>{@link org.yakindu.base.expressions.expressions.impl.ElementReferenceExpressionImpl#getArgs <em>Args</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ElementReferenceExpressionImpl#getArraySelector <em>Array Selector</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ElementReferenceExpressionImpl#isArrayAccess <em>Array Access</em>}</li>
  * </ul>
  *
  * @generated
  */
-public class ElementReferenceExpressionImpl extends ExpressionImpl implements ElementReferenceExpression {
+public class ElementReferenceExpressionImpl extends ArgumentExpressionImpl implements ElementReferenceExpression {
 	/**
 	 * The cached value of the '{@link #getReference() <em>Reference</em>}' reference.
 	 * <!-- begin-user-doc -->
@@ -65,16 +64,6 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 	 */
 	protected boolean operationCall = OPERATION_CALL_EDEFAULT;
 
-	/**
-	 * The cached value of the '{@link #getArgs() <em>Args</em>}' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getArgs()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<Expression> args;
-
 	/**
 	 * The cached value of the '{@link #getArraySelector() <em>Array Selector</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -183,18 +172,6 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 			eNotify(new ENotificationImpl(this, Notification.SET, ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__OPERATION_CALL, oldOperationCall, operationCall));
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EList<Expression> getArgs() {
-		if (args == null) {
-			args = new EObjectContainmentEList<Expression>(Expression.class, this, ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARGS);
-		}
-		return args;
-	}
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -236,8 +213,6 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARGS:
-				return ((InternalEList<?>)getArgs()).basicRemove(otherEnd, msgs);
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR:
 				return ((InternalEList<?>)getArraySelector()).basicRemove(otherEnd, msgs);
 		}
@@ -257,8 +232,6 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 				return basicGetReference();
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__OPERATION_CALL:
 				return isOperationCall();
-			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARGS:
-				return getArgs();
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR:
 				return getArraySelector();
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS:
@@ -282,10 +255,6 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__OPERATION_CALL:
 				setOperationCall((Boolean)newValue);
 				return;
-			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARGS:
-				getArgs().clear();
-				getArgs().addAll((Collection<? extends Expression>)newValue);
-				return;
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR:
 				getArraySelector().clear();
 				getArraySelector().addAll((Collection<? extends Expression>)newValue);
@@ -311,9 +280,6 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__OPERATION_CALL:
 				setOperationCall(OPERATION_CALL_EDEFAULT);
 				return;
-			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARGS:
-				getArgs().clear();
-				return;
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR:
 				getArraySelector().clear();
 				return;
@@ -336,8 +302,6 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 				return reference != null;
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__OPERATION_CALL:
 				return operationCall != OPERATION_CALL_EDEFAULT;
-			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARGS:
-				return args != null && !args.isEmpty();
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR:
 				return arraySelector != null && !arraySelector.isEmpty();
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS:

+ 1 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ExpressionsFactoryImpl.java

@@ -8,6 +8,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.yakindu.base.expressions.expressions.*;
 import org.yakindu.base.expressions.expressions.AdditiveOperator;
 import org.yakindu.base.expressions.expressions.AssignmentExpression;
 import org.yakindu.base.expressions.expressions.AssignmentOperator;

+ 39 - 28
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ExpressionsPackageImpl.java

@@ -9,6 +9,7 @@ import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.impl.EPackageImpl;
 import org.yakindu.base.expressions.expressions.AdditiveOperator;
+import org.yakindu.base.expressions.expressions.ArgumentExpression;
 import org.yakindu.base.expressions.expressions.AssignmentExpression;
 import org.yakindu.base.expressions.expressions.AssignmentOperator;
 import org.yakindu.base.expressions.expressions.BitwiseAndExpression;
@@ -241,6 +242,13 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 	 */
 	private EClass typeCastExpressionEClass = null;
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass argumentExpressionEClass = null;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -932,22 +940,13 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		return (EAttribute)featureCallEClass.getEStructuralFeatures().get(2);
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EReference getFeatureCall_Args() {
-		return (EReference)featureCallEClass.getEStructuralFeatures().get(3);
-	}
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getFeatureCall_ArraySelector() {
-		return (EReference)featureCallEClass.getEStructuralFeatures().get(4);
+		return (EReference)featureCallEClass.getEStructuralFeatures().get(3);
 	}
 
 	/**
@@ -956,7 +955,7 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 	 * @generated
 	 */
 	public EAttribute getFeatureCall_ArrayAccess() {
-		return (EAttribute)featureCallEClass.getEStructuralFeatures().get(5);
+		return (EAttribute)featureCallEClass.getEStructuralFeatures().get(4);
 	}
 
 	/**
@@ -986,22 +985,13 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		return (EAttribute)elementReferenceExpressionEClass.getEStructuralFeatures().get(1);
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EReference getElementReferenceExpression_Args() {
-		return (EReference)elementReferenceExpressionEClass.getEStructuralFeatures().get(2);
-	}
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EReference getElementReferenceExpression_ArraySelector() {
-		return (EReference)elementReferenceExpressionEClass.getEStructuralFeatures().get(3);
+		return (EReference)elementReferenceExpressionEClass.getEStructuralFeatures().get(2);
 	}
 
 	/**
@@ -1010,7 +1000,7 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 	 * @generated
 	 */
 	public EAttribute getElementReferenceExpression_ArrayAccess() {
-		return (EAttribute)elementReferenceExpressionEClass.getEStructuralFeatures().get(4);
+		return (EAttribute)elementReferenceExpressionEClass.getEStructuralFeatures().get(3);
 	}
 
 	/**
@@ -1058,6 +1048,24 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		return (EReference)typeCastExpressionEClass.getEStructuralFeatures().get(1);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getArgumentExpression() {
+		return argumentExpressionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getArgumentExpression_Args() {
+		return (EReference)argumentExpressionEClass.getEStructuralFeatures().get(0);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1228,14 +1236,12 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		createEReference(featureCallEClass, FEATURE_CALL__OWNER);
 		createEReference(featureCallEClass, FEATURE_CALL__FEATURE);
 		createEAttribute(featureCallEClass, FEATURE_CALL__OPERATION_CALL);
-		createEReference(featureCallEClass, FEATURE_CALL__ARGS);
 		createEReference(featureCallEClass, FEATURE_CALL__ARRAY_SELECTOR);
 		createEAttribute(featureCallEClass, FEATURE_CALL__ARRAY_ACCESS);
 
 		elementReferenceExpressionEClass = createEClass(ELEMENT_REFERENCE_EXPRESSION);
 		createEReference(elementReferenceExpressionEClass, ELEMENT_REFERENCE_EXPRESSION__REFERENCE);
 		createEAttribute(elementReferenceExpressionEClass, ELEMENT_REFERENCE_EXPRESSION__OPERATION_CALL);
-		createEReference(elementReferenceExpressionEClass, ELEMENT_REFERENCE_EXPRESSION__ARGS);
 		createEReference(elementReferenceExpressionEClass, ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR);
 		createEAttribute(elementReferenceExpressionEClass, ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS);
 
@@ -1246,6 +1252,9 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		createEReference(typeCastExpressionEClass, TYPE_CAST_EXPRESSION__OPERAND);
 		createEReference(typeCastExpressionEClass, TYPE_CAST_EXPRESSION__TYPE);
 
+		argumentExpressionEClass = createEClass(ARGUMENT_EXPRESSION);
+		createEReference(argumentExpressionEClass, ARGUMENT_EXPRESSION__ARGS);
+
 		// Create enums
 		assignmentOperatorEEnum = createEEnum(ASSIGNMENT_OPERATOR);
 		shiftOperatorEEnum = createEEnum(SHIFT_OPERATOR);
@@ -1307,10 +1316,11 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		numericalMultiplyDivideExpressionEClass.getESuperTypes().add(this.getExpression());
 		numericalUnaryExpressionEClass.getESuperTypes().add(this.getExpression());
 		primitiveValueExpressionEClass.getESuperTypes().add(this.getExpression());
-		featureCallEClass.getESuperTypes().add(this.getExpression());
-		elementReferenceExpressionEClass.getESuperTypes().add(this.getExpression());
+		featureCallEClass.getESuperTypes().add(this.getArgumentExpression());
+		elementReferenceExpressionEClass.getESuperTypes().add(this.getArgumentExpression());
 		parenthesizedExpressionEClass.getESuperTypes().add(this.getExpression());
 		typeCastExpressionEClass.getESuperTypes().add(this.getExpression());
+		argumentExpressionEClass.getESuperTypes().add(this.getExpression());
 
 		// Initialize classes and features; add operations and parameters
 		initEClass(expressionEClass, Expression.class, "Expression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -1401,14 +1411,12 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		initEReference(getFeatureCall_Owner(), this.getExpression(), null, "owner", null, 0, 1, FeatureCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getFeatureCall_Feature(), ecorePackage.getEObject(), null, "feature", null, 0, 1, FeatureCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getFeatureCall_OperationCall(), ecorePackage.getEBoolean(), "operationCall", null, 0, 1, FeatureCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getFeatureCall_Args(), this.getExpression(), null, "args", null, 0, -1, FeatureCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getFeatureCall_ArraySelector(), this.getExpression(), null, "arraySelector", null, 0, -1, FeatureCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getFeatureCall_ArrayAccess(), ecorePackage.getEBoolean(), "arrayAccess", null, 0, 1, FeatureCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(elementReferenceExpressionEClass, ElementReferenceExpression.class, "ElementReferenceExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getElementReferenceExpression_Reference(), ecorePackage.getEObject(), null, "reference", null, 0, 1, ElementReferenceExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getElementReferenceExpression_OperationCall(), ecorePackage.getEBoolean(), "operationCall", null, 0, 1, ElementReferenceExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getElementReferenceExpression_Args(), this.getExpression(), null, "args", null, 0, -1, ElementReferenceExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getElementReferenceExpression_ArraySelector(), this.getExpression(), null, "arraySelector", null, 0, -1, ElementReferenceExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getElementReferenceExpression_ArrayAccess(), ecorePackage.getEBoolean(), "arrayAccess", null, 0, 1, ElementReferenceExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
@@ -1419,6 +1427,9 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		initEReference(getTypeCastExpression_Operand(), this.getExpression(), null, "operand", null, 0, 1, TypeCastExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getTypeCastExpression_Type(), theTypesPackage.getType(), null, "type", null, 0, 1, TypeCastExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+		initEClass(argumentExpressionEClass, ArgumentExpression.class, "ArgumentExpression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getArgumentExpression_Args(), this.getExpression(), null, "args", null, 0, -1, ArgumentExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
 		// Initialize enums and add enum literals
 		initEEnum(assignmentOperatorEEnum, AssignmentOperator.class, "AssignmentOperator");
 		addEEnumLiteral(assignmentOperatorEEnum, AssignmentOperator.ASSIGN);

+ 1 - 37
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/FeatureCallImpl.java

@@ -28,14 +28,13 @@ import org.yakindu.base.expressions.expressions.FeatureCall;
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.FeatureCallImpl#getOwner <em>Owner</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.FeatureCallImpl#getFeature <em>Feature</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.FeatureCallImpl#isOperationCall <em>Operation Call</em>}</li>
- *   <li>{@link org.yakindu.base.expressions.expressions.impl.FeatureCallImpl#getArgs <em>Args</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.FeatureCallImpl#getArraySelector <em>Array Selector</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.FeatureCallImpl#isArrayAccess <em>Array Access</em>}</li>
  * </ul>
  *
  * @generated
  */
-public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
+public class FeatureCallImpl extends ArgumentExpressionImpl implements FeatureCall {
 	/**
 	 * The cached value of the '{@link #getOwner() <em>Owner</em>}' containment reference.
 	 * <!-- begin-user-doc -->
@@ -76,16 +75,6 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 	 */
 	protected boolean operationCall = OPERATION_CALL_EDEFAULT;
 
-	/**
-	 * The cached value of the '{@link #getArgs() <em>Args</em>}' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getArgs()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<Expression> args;
-
 	/**
 	 * The cached value of the '{@link #getArraySelector() <em>Array Selector</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -237,18 +226,6 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 			eNotify(new ENotificationImpl(this, Notification.SET, ExpressionsPackage.FEATURE_CALL__OPERATION_CALL, oldOperationCall, operationCall));
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EList<Expression> getArgs() {
-		if (args == null) {
-			args = new EObjectContainmentEList<Expression>(Expression.class, this, ExpressionsPackage.FEATURE_CALL__ARGS);
-		}
-		return args;
-	}
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -292,8 +269,6 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 		switch (featureID) {
 			case ExpressionsPackage.FEATURE_CALL__OWNER:
 				return basicSetOwner(null, msgs);
-			case ExpressionsPackage.FEATURE_CALL__ARGS:
-				return ((InternalEList<?>)getArgs()).basicRemove(otherEnd, msgs);
 			case ExpressionsPackage.FEATURE_CALL__ARRAY_SELECTOR:
 				return ((InternalEList<?>)getArraySelector()).basicRemove(otherEnd, msgs);
 		}
@@ -315,8 +290,6 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 				return basicGetFeature();
 			case ExpressionsPackage.FEATURE_CALL__OPERATION_CALL:
 				return isOperationCall();
-			case ExpressionsPackage.FEATURE_CALL__ARGS:
-				return getArgs();
 			case ExpressionsPackage.FEATURE_CALL__ARRAY_SELECTOR:
 				return getArraySelector();
 			case ExpressionsPackage.FEATURE_CALL__ARRAY_ACCESS:
@@ -343,10 +316,6 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 			case ExpressionsPackage.FEATURE_CALL__OPERATION_CALL:
 				setOperationCall((Boolean)newValue);
 				return;
-			case ExpressionsPackage.FEATURE_CALL__ARGS:
-				getArgs().clear();
-				getArgs().addAll((Collection<? extends Expression>)newValue);
-				return;
 			case ExpressionsPackage.FEATURE_CALL__ARRAY_SELECTOR:
 				getArraySelector().clear();
 				getArraySelector().addAll((Collection<? extends Expression>)newValue);
@@ -375,9 +344,6 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 			case ExpressionsPackage.FEATURE_CALL__OPERATION_CALL:
 				setOperationCall(OPERATION_CALL_EDEFAULT);
 				return;
-			case ExpressionsPackage.FEATURE_CALL__ARGS:
-				getArgs().clear();
-				return;
 			case ExpressionsPackage.FEATURE_CALL__ARRAY_SELECTOR:
 				getArraySelector().clear();
 				return;
@@ -402,8 +368,6 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 				return feature != null;
 			case ExpressionsPackage.FEATURE_CALL__OPERATION_CALL:
 				return operationCall != OPERATION_CALL_EDEFAULT;
-			case ExpressionsPackage.FEATURE_CALL__ARGS:
-				return args != null && !args.isEmpty();
 			case ExpressionsPackage.FEATURE_CALL__ARRAY_SELECTOR:
 				return arraySelector != null && !arraySelector.isEmpty();
 			case ExpressionsPackage.FEATURE_CALL__ARRAY_ACCESS:

+ 19 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/util/ExpressionsAdapterFactory.java

@@ -6,6 +6,7 @@ import org.eclipse.emf.common.notify.Adapter;
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
 import org.eclipse.emf.ecore.EObject;
+import org.yakindu.base.expressions.expressions.*;
 import org.yakindu.base.expressions.expressions.AssignmentExpression;
 import org.yakindu.base.expressions.expressions.BitwiseAndExpression;
 import org.yakindu.base.expressions.expressions.BitwiseOrExpression;
@@ -200,6 +201,10 @@ public class ExpressionsAdapterFactory extends AdapterFactoryImpl {
 				return createTypeCastExpressionAdapter();
 			}
 			@Override
+			public Adapter caseArgumentExpression(ArgumentExpression object) {
+				return createArgumentExpressionAdapter();
+			}
+			@Override
 			public Adapter defaultCase(EObject object) {
 				return createEObjectAdapter();
 			}
@@ -597,6 +602,20 @@ public class ExpressionsAdapterFactory extends AdapterFactoryImpl {
 		return null;
 	}
 
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.base.expressions.expressions.ArgumentExpression <em>Argument Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.yakindu.base.expressions.expressions.ArgumentExpression
+	 * @generated
+	 */
+	public Adapter createArgumentExpressionAdapter() {
+		return null;
+	}
+
 	/**
 	 * Creates a new adapter for the default case.
 	 * <!-- begin-user-doc -->

+ 25 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/util/ExpressionsSwitch.java

@@ -5,6 +5,7 @@ package org.yakindu.base.expressions.expressions.util;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.util.Switch;
+import org.yakindu.base.expressions.expressions.*;
 import org.yakindu.base.expressions.expressions.AssignmentExpression;
 import org.yakindu.base.expressions.expressions.BitwiseAndExpression;
 import org.yakindu.base.expressions.expressions.BitwiseOrExpression;
@@ -253,6 +254,7 @@ public class ExpressionsSwitch<T> extends Switch<T> {
 			case ExpressionsPackage.FEATURE_CALL: {
 				FeatureCall featureCall = (FeatureCall)theEObject;
 				T result = caseFeatureCall(featureCall);
+				if (result == null) result = caseArgumentExpression(featureCall);
 				if (result == null) result = caseExpression(featureCall);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
@@ -260,6 +262,7 @@ public class ExpressionsSwitch<T> extends Switch<T> {
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION: {
 				ElementReferenceExpression elementReferenceExpression = (ElementReferenceExpression)theEObject;
 				T result = caseElementReferenceExpression(elementReferenceExpression);
+				if (result == null) result = caseArgumentExpression(elementReferenceExpression);
 				if (result == null) result = caseExpression(elementReferenceExpression);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
@@ -278,6 +281,13 @@ public class ExpressionsSwitch<T> extends Switch<T> {
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case ExpressionsPackage.ARGUMENT_EXPRESSION: {
+				ArgumentExpression argumentExpression = (ArgumentExpression)theEObject;
+				T result = caseArgumentExpression(argumentExpression);
+				if (result == null) result = caseExpression(argumentExpression);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			default: return defaultCase(theEObject);
 		}
 	}
@@ -687,6 +697,21 @@ public class ExpressionsSwitch<T> extends Switch<T> {
 		return null;
 	}
 
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Argument Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Argument Expression</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseArgumentExpression(ArgumentExpression object) {
+		return null;
+	}
+
 	/**
 	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
 	 * <!-- begin-user-doc -->

+ 7 - 6
plugins/org.yakindu.base.expressions/model/Expressions.ecore

@@ -148,22 +148,18 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Literal"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureCall" eSuperTypes="#//Expression">
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureCall" eSuperTypes="#//ArgumentExpression">
     <eStructuralFeatures xsi:type="ecore:EReference" name="owner" eType="#//Expression"
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="operationCall" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="args" upperBound="-1" eType="#//Expression"
-        containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="arraySelector" upperBound="-1"
         eType="#//Expression" containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="arrayAccess" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ElementReferenceExpression" eSuperTypes="#//Expression">
+  <eClassifiers xsi:type="ecore:EClass" name="ElementReferenceExpression" eSuperTypes="#//ArgumentExpression">
     <eStructuralFeatures xsi:type="ecore:EReference" name="reference" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="operationCall" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="args" upperBound="-1" eType="#//Expression"
-        containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="arraySelector" upperBound="-1"
         eType="#//Expression" containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="arrayAccess" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
@@ -177,4 +173,9 @@
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="ecore:EClass ../../org.yakindu.base.types/model/types.ecore#//Type"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ArgumentExpression" abstract="true"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="args" upperBound="-1" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
 </ecore:EPackage>

+ 39 - 49
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/ExpressionCode.xtend

@@ -6,8 +6,8 @@
  * http://www.eclipse.org/legal/epl-v10.html 
  * Contributors:
  * committers of YAKINDU - initial API and implementation
- *
-*/
+ * 
+ */
 package org.yakindu.sct.generator.java
 
 import com.google.inject.Inject
@@ -58,6 +58,7 @@ import org.yakindu.sct.model.stext.stext.ActiveStateReferenceExpression
 import org.yakindu.sct.model.stext.stext.EventRaisingExpression
 import org.yakindu.sct.model.stext.stext.EventValueReferenceExpression
 import org.yakindu.sct.model.stext.stext.OperationDefinition
+import org.yakindu.base.expressions.expressions.ArgumentExpression
 
 class ExpressionCode {
 
@@ -259,31 +260,33 @@ class ExpressionCode {
 		value.definition.getContext + value.definition.event.getter
 	}
 
-	def dispatch String code(ElementReferenceExpression it) {
-		if (it.reference instanceof OperationDefinition)
-			'''«reference.code»(«FOR arg : args SEPARATOR ", "»«arg.code»«ENDFOR»)'''
-		else {
-			val myDef = definition
-			if (myDef instanceof Property && isAssignmentContained) {
-				'''«myDef.getContext + myDef.identifier»'''
-			} else if (myDef instanceof Property && isPropertyContained) {
-				'''«myDef.getStaticContext + myDef.identifier»'''
-			} else {
-				'''«definition.code»'''
-			}
-		}
-	} 
-		
-	def dispatch String code(FeatureCall it) {
-		if (feature instanceof Operation) {
-			return '''«feature.code»(«FOR arg : args SEPARATOR ", "»«arg.code»«ENDFOR»)'''
-		} else {
-			return '''«definition.getContext + definition.name.asEscapedIdentifier»''' 
+	def protected dispatch String code(ElementReferenceExpression it) {
+		(it.reference as Declaration).codeDeclaration(it)
+	}
+
+	def protected dispatch String code(FeatureCall it) {
+		(it.feature as Declaration).codeDeclaration(it)
+	}
+
+	def protected codeDeclaration(Declaration it, ArgumentExpression exp) {
+		switch it {
+			Operation:
+				return operationCall(it, exp.args)
+			Property case exp.isAssignmentContained:
+				return getStaticContext + identifier
+			Property case exp.isPropertyContained:
+				return getStaticContext + identifier
+			Declaration:
+				return exp.definition.code
 		}
-	} 
+	}
+
+	def protected String operationCall(Operation it, List<Expression> args) {
+		'''«code»(«FOR arg : args SEPARATOR ", "»«arg.code»«ENDFOR»)'''
+	}
 
 	def dispatch String code(Declaration it) {
-		getContext+ identifier
+		getContext + identifier
 	}
 
 	def dispatch String code(Property it) {
@@ -305,14 +308,20 @@ class ExpressionCode {
 		return ""
 	}
 	
-	def dispatch String getContext(Event it) {
-		if (scope != null) {
-			return scope.interfaceName.asEscapedIdentifier + "."
+	def dispatch String getStaticContext(Property it) {
+		if (it.const) {
+			if (scope != null) {
+				var result = scope.interfaceName + "."
+				return result
+			} else {
+				var result = it.flow.statemachineInterfaceName + "."
+				return result
+			}
 		}
-		return ""
+		return getContext()
 	}
 
-	def dispatch String getContext(OperationDefinition it) {
+	def dispatch String getContext(Declaration it) {
 		if (scope != null) {
 			return scope.interfaceName.asEscapedIdentifier + "."
 		}
@@ -322,30 +331,11 @@ class ExpressionCode {
 	def dispatch String getContext(EObject it) {
 		return "//ERROR: No context for " + it
 	}
-	
-	def dispatch String getStaticContext(Property it) {
-		if (it.const) {
-			return getConstContext(it)
-		}
-		if (scope != null) {
-			return scope.interfaceName.asEscapedIdentifier + "."
-		}
-		return ""
-	}
-	
+
 	def dispatch String getStaticContext(EObject it) {
 		return "//ERROR: No context for " + it
 	}
 
-	def getConstContext(Property it) {
-		if (scope != null) {
-			return scope.interfaceName + "."
-		} else {
-			return it.flow.statemachineInterfaceName + "."
-		}
-	}
-
-
 	def boolean isAssignmentContained(Expression it) {
 		if (it instanceof AssignmentExpression) {
 			return true

+ 17 - 3
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/TimerService.java

@@ -34,8 +34,8 @@ public class TimerService implements ITimer {
 		 * Constructor for a time event.
 		 *
 		 * @param callback
-		 *            : Set to {@code true} if event should be repeated
-		 *            periodically.
+		 *            : Object that implements ITimerCallback, is called
+		 *            when the timer expires.
 		 *
 		 * @param eventID
 		 *            : Index position within the state machine's timeEvent
@@ -49,7 +49,8 @@ public class TimerService implements ITimer {
 		public void run() {
 			callback.timeElapsed(eventID);
 		}
-	
+		
+		@Override
 		public boolean equals(Object obj) {
 			if (obj instanceof TimeEventTask) {
 				return ((TimeEventTask) obj).callback.equals(callback)
@@ -57,6 +58,19 @@ public class TimerService implements ITimer {
 			}
 			return super.equals(obj);
 		}
+		
+		@Override
+		public int hashCode() {
+			int prime = 37;
+			int result = 1;
+			
+			int c = (int) this.eventID;
+			result = prime * result + c;
+			c = this.callback.hashCode();
+			result = prime * result + c;
+			return result;
+		}
+		
 	}
 	
 	public void setTimer(final ITimerCallback callback, final int eventID,

+ 3 - 3
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/constants/ConstantsStatemachine.java

@@ -210,19 +210,19 @@ public class ConstantsStatemachine implements IConstantsStatemachine {
 	
 	private void effect_main_region_C_tr0() {
 		exitSequence_main_region_C();
-		sCInterface.setResult(sCInterface.getE2Value()*sCInterface.x*sCINamed.two*internalConstant);
+		sCInterface.setResult(sCInterface.getE2Value()*SCInterface.x*SCINamed.two*IConstantsStatemachine.internalConstant);
 		
 		enterSequence_main_region_A_default();
 	}
 	
 	/* Entry action for state 'B'. */
 	private void entryAction_main_region_B() {
-		sCInterface.setResult(sCINamed.two*sCInterface.x);
+		sCInterface.setResult(SCINamed.two*SCInterface.x);
 	}
 	
 	/* Entry action for state 'C'. */
 	private void entryAction_main_region_C() {
-		sCInterface.setResult(sCInterface.result*internalConstant);
+		sCInterface.setResult(sCInterface.result*IConstantsStatemachine.internalConstant);
 	}
 	
 	/* 'default' enter sequence for state A */

+ 2 - 2
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/constonlynamedscope/ConstOnlyNamedScopeStatemachine.java

@@ -137,11 +137,11 @@ public class ConstOnlyNamedScopeStatemachine implements IConstOnlyNamedScopeStat
 	}
 	
 	private boolean check_ConstOnlyNamedScope_main_region_A_tr0_tr0() {
-		return (sCInterface.e) && (sCInterface.getEValue()==sCIA.b);
+		return (sCInterface.e) && (sCInterface.getEValue()==sCIA.getB());
 	}
 	
 	private boolean check_ConstOnlyNamedScope_main_region_A_tr1_tr1() {
-		return (sCInterface.e) && (sCInterface.getEValue()==sCIA.c);
+		return (sCInterface.e) && (sCInterface.getEValue()==sCIA.getC());
 	}
 	
 	private void effect_ConstOnlyNamedScope_main_region_A_tr0() {

+ 1 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/typealias/TypeAliasStatemachine.java

@@ -155,7 +155,7 @@ public class TypeAliasStatemachine implements ITypeAliasStatemachine {
 	}
 	
 	private boolean check_main_region_Mid_tr0_tr0() {
-		return sCInterface.getMyString()=="TypeSystem";
+		return (sCInterface.getMyString()== null?"TypeSystem" ==null :sCInterface.getMyString().equals("TypeSystem"));
 	}
 	
 	private boolean check_main_region_Mid2_tr0_tr0() {