فهرست منبع

Introduced named parameters (#1380)

* Introduced named parameters

* Removed parameter reference for ArgumentAnnotation, added basic tests

* remove AssignmentExpression in parameter call
Andreas Mülder 8 سال پیش
والد
کامیت
8b1f382ea9
58فایلهای تغییر یافته به همراه1218 افزوده شده و 378 حذف شده
  1. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgumentExpression_arguments_Argument.gif
  2. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_AssignmentExpression.gif
  3. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_BitwiseAndExpression.gif
  4. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_BitwiseOrExpression.gif
  5. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_BitwiseXorExpression.gif
  6. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_ConditionalExpression.gif
  7. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_ElementReferenceExpression.gif
  8. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_FeatureCall.gif
  9. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_LogicalAndExpression.gif
  10. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_LogicalNotExpression.gif
  11. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_LogicalOrExpression.gif
  12. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_LogicalRelationExpression.gif
  13. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_NumericalAddSubtractExpression.gif
  14. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_NumericalMultiplyDivideExpression.gif
  15. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_NumericalUnaryExpression.gif
  16. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_ParenthesizedExpression.gif
  17. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_PrimitiveValueExpression.gif
  18. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_ShiftExpression.gif
  19. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_TypeCastExpression.gif
  20. BIN
      plugins/org.yakindu.base.expressions.edit/icons/full/obj16/Argument.gif
  21. 4 0
      plugins/org.yakindu.base.expressions.edit/plugin.properties
  22. 4 89
      plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/ArgumentExpressionItemProvider.java
  23. 277 0
      plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/ArgumentItemProvider.java
  24. 0 23
      plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/ElementReferenceExpressionItemProvider.java
  25. 24 0
      plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/ExpressionsItemProviderAdapterFactory.java
  26. 0 1
      plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/FeatureCallItemProvider.java
  27. 78 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/Argument.java
  28. 26 6
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ArgumentExpression.java
  29. 9 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ExpressionsFactory.java
  30. 115 20
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ExpressionsPackage.java
  31. 37 20
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ArgumentExpressionImpl.java
  32. 234 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ArgumentImpl.java
  33. 12 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ElementReferenceExpressionImpl.java
  34. 12 2
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ExpressionsFactoryImpl.java
  35. 50 3
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ExpressionsPackageImpl.java
  36. 12 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/FeatureCallImpl.java
  37. 59 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/util/ArgumentSorter.java
  38. 22 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/util/ExpressionsAdapterFactory.java
  39. 25 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/util/ExpressionsSwitch.java
  40. 9 2
      plugins/org.yakindu.base.expressions/model/Expressions.ecore
  41. 8 2
      plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/Expressions.xtext
  42. 1 1
      plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/inferrer/ExpressionsTypeInferrer.java
  43. 46 7
      plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/scoping/ExpressionsScopeProvider.xtend
  44. 4 4
      plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/ExpressionCode.xtend
  45. 2 2
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/ExpressionCode.xtend
  46. 2 2
      plugins/org.yakindu.sct.generator.csharp/src/org/yakindu/sct/generator/csharp/ExpressionCode.xtend
  47. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/ExpressionCode.xtend
  48. 4 116
      plugins/org.yakindu.sct.model.stext.edit/src/org/yakindu/sct/model/stext/stext/provider/ArgumentedAnnotationItemProvider.java
  49. 2 2
      plugins/org.yakindu.sct.model.stext/emf-gen/org/yakindu/sct/model/stext/stext/StextPackage.java
  50. 44 21
      plugins/org.yakindu.sct.model.stext/emf-gen/org/yakindu/sct/model/stext/stext/impl/ArgumentedAnnotationImpl.java
  51. 8 3
      plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/SText.xtext
  52. 1 1
      plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/inferrer/STextTypeInferrer.java
  53. 2 2
      plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/scoping/STextScopeProvider.java
  54. 2 0
      plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/util/ImportResolver.java
  55. 5 3
      plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/validation/STextJavaValidator.java
  56. 1 1
      plugins/org.yakindu.sct.simulation.core.sexec/src/org/yakindu/sct/simulation/core/sexec/container/DefaultSimulationEngineFactory.java
  57. 2 2
      plugins/org.yakindu.sct.simulation.core.sexec/src/org/yakindu/sct/simulation/core/sexec/interpreter/StextStatementInterpreter.xtend
  58. 74 40
      test-plugins/org.yakindu.sct.model.stext.test/src/org/yakindu/sct/model/stext/test/validation/STextJavaValidatorTest.java

BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgumentExpression_arguments_Argument.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_AssignmentExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_BitwiseAndExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_BitwiseOrExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_BitwiseXorExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_ConditionalExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_ElementReferenceExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_FeatureCall.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_LogicalAndExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_LogicalNotExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_LogicalOrExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_LogicalRelationExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_NumericalAddSubtractExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_NumericalMultiplyDivideExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_NumericalUnaryExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_ParenthesizedExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_PrimitiveValueExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_ShiftExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/ctool16/CreateArgument_value_TypeCastExpression.gif


BIN
plugins/org.yakindu.base.expressions.edit/icons/full/obj16/Argument.gif


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

@@ -144,3 +144,7 @@ _UI_BitwiseOperator_or_literal = |
 _UI_UnaryExpression_type = Unary Expression
 _UI_UnaryExpression_operand_feature = Operand
 _UI_LogicalOperator_not_literal = !
+_UI_Argument_type = Argument
+_UI_ArgumentExpression_arguments_feature = Arguments
+_UI_Argument_parameter_feature = Parameter
+_UI_Argument_value_feature = Value

+ 4 - 89
plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/ArgumentExpressionItemProvider.java

@@ -62,7 +62,7 @@ public class ArgumentExpressionItemProvider extends ExpressionItemProvider {
 	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
 		if (childrenFeatures == null) {
 			super.getChildrenFeatures(object);
-			childrenFeatures.add(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS);
+			childrenFeatures.add(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGUMENTS);
 		}
 		return childrenFeatures;
 	}
@@ -104,7 +104,7 @@ public class ArgumentExpressionItemProvider extends ExpressionItemProvider {
 		updateChildren(notification);
 
 		switch (notification.getFeatureID(ArgumentExpression.class)) {
-			case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGS:
+			case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGUMENTS:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
 				return;
 		}
@@ -124,93 +124,8 @@ public class ArgumentExpressionItemProvider extends ExpressionItemProvider {
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createAssignmentExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createConditionalExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createLogicalOrExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createLogicalAndExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createLogicalNotExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createBitwiseXorExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createBitwiseOrExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createBitwiseAndExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createLogicalRelationExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createShiftExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createNumericalAddSubtractExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createNumericalMultiplyDivideExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createNumericalUnaryExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createPrimitiveValueExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createFeatureCall()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createElementReferenceExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createParenthesizedExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createTypeCastExpression()));
+				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGUMENTS,
+				 ExpressionsFactory.eINSTANCE.createArgument()));
 	}
 
 }

+ 277 - 0
plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/ArgumentItemProvider.java

@@ -0,0 +1,277 @@
+/**
+ */
+package org.yakindu.base.expressions.expressions.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.yakindu.base.expressions.expressions.Argument;
+import org.yakindu.base.expressions.expressions.ExpressionsFactory;
+import org.yakindu.base.expressions.expressions.ExpressionsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.yakindu.base.expressions.expressions.Argument} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ArgumentItemProvider 
+	extends ItemProviderAdapter
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArgumentItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addParameterPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Parameter feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addParameterPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Argument_parameter_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Argument_parameter_feature", "_UI_Argument_type"),
+				 ExpressionsPackage.Literals.ARGUMENT__PARAMETER,
+				 true,
+				 false,
+				 true,
+				 null,
+				 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
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(ExpressionsPackage.Literals.ARGUMENT__VALUE);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Argument.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Argument"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_Argument_type");
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Argument.class)) {
+			case ExpressionsPackage.ARGUMENT__VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createAssignmentExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createConditionalExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createLogicalOrExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createLogicalAndExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createLogicalNotExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createBitwiseXorExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createBitwiseOrExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createBitwiseAndExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createLogicalRelationExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createShiftExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createNumericalAddSubtractExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createNumericalMultiplyDivideExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createNumericalUnaryExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createPrimitiveValueExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createFeatureCall()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createElementReferenceExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createParenthesizedExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ExpressionsPackage.Literals.ARGUMENT__VALUE,
+				 ExpressionsFactory.eINSTANCE.createTypeCastExpression()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ExpressionsEditPlugin.INSTANCE;
+	}
+
+}

+ 0 - 23
plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/ElementReferenceExpressionItemProvider.java

@@ -305,27 +305,4 @@ public class ElementReferenceExpressionItemProvider
 				 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);
-	}
-
 }

+ 24 - 0
plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/ExpressionsItemProviderAdapterFactory.java

@@ -652,6 +652,29 @@ public class ExpressionsItemProviderAdapterFactory extends ExpressionsAdapterFac
 		return typeCastExpressionItemProvider;
 	}
 
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.Argument} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArgumentItemProvider argumentItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.Argument}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createArgumentAdapter() {
+		if (argumentItemProvider == null) {
+			argumentItemProvider = new ArgumentItemProvider(this);
+		}
+
+		return argumentItemProvider;
+	}
+
 	/**
 	 * This returns the root adapter factory that contains this factory.
 	 * <!-- begin-user-doc -->
@@ -776,6 +799,7 @@ public class ExpressionsItemProviderAdapterFactory extends ExpressionsAdapterFac
 		if (elementReferenceExpressionItemProvider != null) elementReferenceExpressionItemProvider.dispose();
 		if (parenthesizedExpressionItemProvider != null) parenthesizedExpressionItemProvider.dispose();
 		if (typeCastExpressionItemProvider != null) typeCastExpressionItemProvider.dispose();
+		if (argumentItemProvider != null) argumentItemProvider.dispose();
 	}
 
 }

+ 0 - 1
plugins/org.yakindu.base.expressions.edit/src/org/yakindu/base/expressions/expressions/provider/FeatureCallItemProvider.java

@@ -409,7 +409,6 @@ 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__ARRAY_SELECTOR;
 

+ 78 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/Argument.java

@@ -0,0 +1,78 @@
+/**
+ */
+package org.yakindu.base.expressions.expressions;
+
+import org.eclipse.emf.ecore.EObject;
+import org.yakindu.base.types.Parameter;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Argument</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.yakindu.base.expressions.expressions.Argument#getParameter <em>Parameter</em>}</li>
+ *   <li>{@link org.yakindu.base.expressions.expressions.Argument#getValue <em>Value</em>}</li>
+ * </ul>
+ *
+ * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getArgument()
+ * @model
+ * @generated
+ */
+public interface Argument extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Parameter</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Parameter</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Parameter</em>' reference.
+	 * @see #setParameter(Parameter)
+	 * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getArgument_Parameter()
+	 * @model
+	 * @generated
+	 */
+	Parameter getParameter();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.base.expressions.expressions.Argument#getParameter <em>Parameter</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Parameter</em>' reference.
+	 * @see #getParameter()
+	 * @generated
+	 */
+	void setParameter(Parameter value);
+
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' containment reference.
+	 * @see #setValue(Expression)
+	 * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getArgument_Value()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Expression getValue();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.base.expressions.expressions.Argument#getValue <em>Value</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' containment reference.
+	 * @see #getValue()
+	 * @generated
+	 */
+	void setValue(Expression value);
+
+} // Argument

+ 26 - 6
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ArgumentExpression.java

@@ -13,7 +13,7 @@ import org.eclipse.emf.common.util.EList;
  * The following features are supported:
  * </p>
  * <ul>
- *   <li>{@link org.yakindu.base.expressions.expressions.ArgumentExpression#getArgs <em>Args</em>}</li>
+ *   <li>{@link org.yakindu.base.expressions.expressions.ArgumentExpression#getArguments <em>Arguments</em>}</li>
  * </ul>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getArgumentExpression()
@@ -22,19 +22,39 @@ import org.eclipse.emf.common.util.EList;
  */
 public interface ArgumentExpression extends Expression {
 	/**
-	 * 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}.
+	 * Returns the value of the '<em><b>Arguments</b></em>' containment reference list.
+	 * The list contents are of type {@link org.yakindu.base.expressions.expressions.Argument}.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Args</em>' containment reference list isn't clear,
+	 * If the meaning of the '<em>Arguments</em>' containment reference 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#getArgumentExpression_Args()
+	 * @return the value of the '<em>Arguments</em>' containment reference list.
+	 * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getArgumentExpression_Arguments()
 	 * @model containment="true"
 	 * @generated
 	 */
+	EList<Argument> getArguments();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * This method is deprecated. Use {@link ArgumentExpression#getExpressions()} instead.
+	 * 
+	 * <!-- end-user-doc -->
+	 * @model kind="operation"
+	 * @generated NOT
+	 */
+	@Deprecated
 	EList<Expression> getArgs();
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation"
+	 * @generated
+	 */
+	EList<Expression> getExpressions();
+
 } // ArgumentExpression

+ 9 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ExpressionsFactory.java

@@ -246,6 +246,15 @@ public interface ExpressionsFactory extends EFactory {
 	 */
 	TypeCastExpression createTypeCastExpression();
 
+	/**
+	 * Returns a new object of class '<em>Argument</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Argument</em>'.
+	 * @generated
+	 */
+	Argument createArgument();
+
 	/**
 	 * Returns the package supported by this factory.
 	 * <!-- begin-user-doc -->

+ 115 - 20
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ExpressionsPackage.java

@@ -371,13 +371,13 @@ public interface ExpressionsPackage extends EPackage {
 	int ARGUMENT_EXPRESSION = 3;
 
 	/**
-	 * The feature id for the '<em><b>Args</b></em>' containment reference list.
+	 * The feature id for the '<em><b>Arguments</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int ARGUMENT_EXPRESSION__ARGS = EXPRESSION_FEATURE_COUNT + 0;
+	int ARGUMENT_EXPRESSION__ARGUMENTS = EXPRESSION_FEATURE_COUNT + 0;
 
 	/**
 	 * The number of structural features of the '<em>Argument Expression</em>' class.
@@ -939,13 +939,13 @@ public interface ExpressionsPackage extends EPackage {
 	int FEATURE_CALL = 26;
 
 	/**
-	 * The feature id for the '<em><b>Args</b></em>' containment reference list.
+	 * The feature id for the '<em><b>Arguments</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int FEATURE_CALL__ARGS = ARGUMENT_EXPRESSION__ARGS;
+	int FEATURE_CALL__ARGUMENTS = ARGUMENT_EXPRESSION__ARGUMENTS;
 
 	/**
 	 * The feature id for the '<em><b>Owner</b></em>' containment reference.
@@ -1012,13 +1012,13 @@ public interface ExpressionsPackage extends EPackage {
 	int ELEMENT_REFERENCE_EXPRESSION = 27;
 
 	/**
-	 * The feature id for the '<em><b>Args</b></em>' containment reference list.
+	 * The feature id for the '<em><b>Arguments</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int ELEMENT_REFERENCE_EXPRESSION__ARGS = ARGUMENT_EXPRESSION__ARGS;
+	int ELEMENT_REFERENCE_EXPRESSION__ARGUMENTS = ARGUMENT_EXPRESSION__ARGUMENTS;
 
 	/**
 	 * The feature id for the '<em><b>Reference</b></em>' reference.
@@ -1130,6 +1130,43 @@ public interface ExpressionsPackage extends EPackage {
 	 */
 	int TYPE_CAST_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 2;
 
+	/**
+	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.impl.ArgumentImpl <em>Argument</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.base.expressions.expressions.impl.ArgumentImpl
+	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getArgument()
+	 * @generated
+	 */
+	int ARGUMENT = 30;
+
+	/**
+	 * The feature id for the '<em><b>Parameter</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARGUMENT__PARAMETER = 0;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARGUMENT__VALUE = 1;
+
+	/**
+	 * The number of structural features of the '<em>Argument</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARGUMENT_FEATURE_COUNT = 2;
+
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.AssignmentOperator <em>Assignment Operator</em>}' enum.
 	 * <!-- begin-user-doc -->
@@ -1138,7 +1175,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getAssignmentOperator()
 	 * @generated
 	 */
-	int ASSIGNMENT_OPERATOR = 30;
+	int ASSIGNMENT_OPERATOR = 31;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.ShiftOperator <em>Shift Operator</em>}' enum.
@@ -1148,7 +1185,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getShiftOperator()
 	 * @generated
 	 */
-	int SHIFT_OPERATOR = 31;
+	int SHIFT_OPERATOR = 32;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.AdditiveOperator <em>Additive Operator</em>}' enum.
@@ -1158,7 +1195,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getAdditiveOperator()
 	 * @generated
 	 */
-	int ADDITIVE_OPERATOR = 32;
+	int ADDITIVE_OPERATOR = 33;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.MultiplicativeOperator <em>Multiplicative Operator</em>}' enum.
@@ -1168,7 +1205,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getMultiplicativeOperator()
 	 * @generated
 	 */
-	int MULTIPLICATIVE_OPERATOR = 33;
+	int MULTIPLICATIVE_OPERATOR = 34;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.UnaryOperator <em>Unary Operator</em>}' enum.
@@ -1178,7 +1215,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getUnaryOperator()
 	 * @generated
 	 */
-	int UNARY_OPERATOR = 34;
+	int UNARY_OPERATOR = 35;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.RelationalOperator <em>Relational Operator</em>}' enum.
@@ -1188,7 +1225,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getRelationalOperator()
 	 * @generated
 	 */
-	int RELATIONAL_OPERATOR = 35;
+	int RELATIONAL_OPERATOR = 36;
 
 
 	/**
@@ -1199,7 +1236,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getLogicalOperator()
 	 * @generated
 	 */
-	int LOGICAL_OPERATOR = 36;
+	int LOGICAL_OPERATOR = 37;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.BitwiseOperator <em>Bitwise Operator</em>}' enum.
@@ -1209,7 +1246,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getBitwiseOperator()
 	 * @generated
 	 */
-	int BITWISE_OPERATOR = 37;
+	int BITWISE_OPERATOR = 38;
 
 
 	/**
@@ -1812,6 +1849,38 @@ public interface ExpressionsPackage extends EPackage {
 	 */
 	EReference getTypeCastExpression_Type();
 
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.base.expressions.expressions.Argument <em>Argument</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Argument</em>'.
+	 * @see org.yakindu.base.expressions.expressions.Argument
+	 * @generated
+	 */
+	EClass getArgument();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.yakindu.base.expressions.expressions.Argument#getParameter <em>Parameter</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Parameter</em>'.
+	 * @see org.yakindu.base.expressions.expressions.Argument#getParameter()
+	 * @see #getArgument()
+	 * @generated
+	 */
+	EReference getArgument_Parameter();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.yakindu.base.expressions.expressions.Argument#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Value</em>'.
+	 * @see org.yakindu.base.expressions.expressions.Argument#getValue()
+	 * @see #getArgument()
+	 * @generated
+	 */
+	EReference getArgument_Value();
+
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.base.expressions.expressions.ArgumentExpression <em>Argument Expression</em>}'.
 	 * <!-- begin-user-doc -->
@@ -1823,15 +1892,15 @@ public interface ExpressionsPackage extends EPackage {
 	EClass getArgumentExpression();
 
 	/**
-	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.expressions.expressions.ArgumentExpression#getArgs <em>Args</em>}'.
+	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.expressions.expressions.ArgumentExpression#getArguments <em>Arguments</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()
+	 * @return the meta object for the containment reference list '<em>Arguments</em>'.
+	 * @see org.yakindu.base.expressions.expressions.ArgumentExpression#getArguments()
 	 * @see #getArgumentExpression()
 	 * @generated
 	 */
-	EReference getArgumentExpression_Args();
+	EReference getArgumentExpression_Arguments();
 
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.base.expressions.expressions.BinaryExpression <em>Binary Expression</em>}'.
@@ -2498,6 +2567,32 @@ 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.ArgumentImpl <em>Argument</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.base.expressions.expressions.impl.ArgumentImpl
+		 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getArgument()
+		 * @generated
+		 */
+		EClass ARGUMENT = eINSTANCE.getArgument();
+
+		/**
+		 * The meta object literal for the '<em><b>Parameter</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ARGUMENT__PARAMETER = eINSTANCE.getArgument_Parameter();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ARGUMENT__VALUE = eINSTANCE.getArgument_Value();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.base.expressions.expressions.impl.ArgumentExpressionImpl <em>Argument Expression</em>}' class.
 		 * <!-- begin-user-doc -->
@@ -2509,12 +2604,12 @@ public interface ExpressionsPackage extends EPackage {
 		EClass ARGUMENT_EXPRESSION = eINSTANCE.getArgumentExpression();
 
 		/**
-		 * The meta object literal for the '<em><b>Args</b></em>' containment reference list feature.
+		 * The meta object literal for the '<em><b>Arguments</b></em>' containment reference list feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EReference ARGUMENT_EXPRESSION__ARGS = eINSTANCE.getArgumentExpression_Args();
+		EReference ARGUMENT_EXPRESSION__ARGUMENTS = eINSTANCE.getArgumentExpression_Arguments();
 
 		/**
 		 * The meta object literal for the '{@link org.yakindu.base.expressions.expressions.impl.BinaryExpressionImpl <em>Binary Expression</em>}' class.

+ 37 - 20
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ArgumentExpressionImpl.java

@@ -10,6 +10,7 @@ import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
+import org.yakindu.base.expressions.expressions.Argument;
 import org.yakindu.base.expressions.expressions.ArgumentExpression;
 import org.yakindu.base.expressions.expressions.Expression;
 import org.yakindu.base.expressions.expressions.ExpressionsPackage;
@@ -22,22 +23,21 @@ import org.yakindu.base.expressions.expressions.ExpressionsPackage;
  * The following features are implemented:
  * </p>
  * <ul>
- *   <li>{@link org.yakindu.base.expressions.expressions.impl.ArgumentExpressionImpl#getArgs <em>Args</em>}</li>
+ *   <li>{@link org.yakindu.base.expressions.expressions.impl.ArgumentExpressionImpl#getArguments <em>Arguments</em>}</li>
  * </ul>
  *
  * @generated
  */
 public abstract class ArgumentExpressionImpl extends ExpressionImpl implements ArgumentExpression {
 	/**
-	 * The cached value of the '{@link #getArgs() <em>Args</em>}' containment reference list.
+	 * The cached value of the '{@link #getArguments() <em>Arguments</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getArgs()
+	 * @see #getArguments()
 	 * @generated
 	 * @ordered
 	 */
-	protected EList<Expression> args;
-
+	protected EList<Argument> arguments;
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -62,13 +62,30 @@ public abstract class ArgumentExpressionImpl extends ExpressionImpl implements A
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EList<Expression> getArgs() {
-		if (args == null) {
-			args = new EObjectContainmentEList<Expression>(Expression.class, this, ExpressionsPackage.ARGUMENT_EXPRESSION__ARGS);
+	public EList<Argument> getArguments() {
+		if (arguments == null) {
+			arguments = new EObjectContainmentEList<Argument>(Argument.class, this, ExpressionsPackage.ARGUMENT_EXPRESSION__ARGUMENTS);
 		}
-		return args;
+		return arguments;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Deprecated
+	public EList<Expression> getArgs() {
+		return getExpressions();
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public abstract EList<Expression> getExpressions();
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -77,8 +94,8 @@ public abstract class ArgumentExpressionImpl extends ExpressionImpl implements A
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-			case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGS:
-				return ((InternalEList<?>)getArgs()).basicRemove(otherEnd, msgs);
+			case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGUMENTS:
+				return ((InternalEList<?>)getArguments()).basicRemove(otherEnd, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -91,8 +108,8 @@ public abstract class ArgumentExpressionImpl extends ExpressionImpl implements A
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-			case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGS:
-				return getArgs();
+			case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGUMENTS:
+				return getArguments();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -106,9 +123,9 @@ public abstract class ArgumentExpressionImpl extends ExpressionImpl implements A
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGS:
-				getArgs().clear();
-				getArgs().addAll((Collection<? extends Expression>)newValue);
+			case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGUMENTS:
+				getArguments().clear();
+				getArguments().addAll((Collection<? extends Argument>)newValue);
 				return;
 		}
 		super.eSet(featureID, newValue);
@@ -122,8 +139,8 @@ public abstract class ArgumentExpressionImpl extends ExpressionImpl implements A
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGS:
-				getArgs().clear();
+			case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGUMENTS:
+				getArguments().clear();
 				return;
 		}
 		super.eUnset(featureID);
@@ -137,8 +154,8 @@ public abstract class ArgumentExpressionImpl extends ExpressionImpl implements A
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-			case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGS:
-				return args != null && !args.isEmpty();
+			case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGUMENTS:
+				return arguments != null && !arguments.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}

+ 234 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ArgumentImpl.java

@@ -0,0 +1,234 @@
+/**
+ */
+package org.yakindu.base.expressions.expressions.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.yakindu.base.expressions.expressions.Argument;
+import org.yakindu.base.expressions.expressions.Expression;
+import org.yakindu.base.expressions.expressions.ExpressionsPackage;
+import org.yakindu.base.types.Parameter;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Argument</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.yakindu.base.expressions.expressions.impl.ArgumentImpl#getParameter <em>Parameter</em>}</li>
+ *   <li>{@link org.yakindu.base.expressions.expressions.impl.ArgumentImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ArgumentImpl extends MinimalEObjectImpl.Container implements Argument {
+	/**
+	 * The cached value of the '{@link #getParameter() <em>Parameter</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParameter()
+	 * @generated
+	 * @ordered
+	 */
+	protected Parameter parameter;
+
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected Expression value;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArgumentImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ExpressionsPackage.Literals.ARGUMENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Parameter getParameter() {
+		if (parameter != null && parameter.eIsProxy()) {
+			InternalEObject oldParameter = (InternalEObject)parameter;
+			parameter = (Parameter)eResolveProxy(oldParameter);
+			if (parameter != oldParameter) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ExpressionsPackage.ARGUMENT__PARAMETER, oldParameter, parameter));
+			}
+		}
+		return parameter;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Parameter basicGetParameter() {
+		return parameter;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParameter(Parameter newParameter) {
+		Parameter oldParameter = parameter;
+		parameter = newParameter;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ExpressionsPackage.ARGUMENT__PARAMETER, oldParameter, parameter));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Expression getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetValue(Expression newValue, NotificationChain msgs) {
+		Expression oldValue = value;
+		value = newValue;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ExpressionsPackage.ARGUMENT__VALUE, oldValue, newValue);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValue(Expression newValue) {
+		if (newValue != value) {
+			NotificationChain msgs = null;
+			if (value != null)
+				msgs = ((InternalEObject)value).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ExpressionsPackage.ARGUMENT__VALUE, null, msgs);
+			if (newValue != null)
+				msgs = ((InternalEObject)newValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ExpressionsPackage.ARGUMENT__VALUE, null, msgs);
+			msgs = basicSetValue(newValue, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ExpressionsPackage.ARGUMENT__VALUE, newValue, newValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ExpressionsPackage.ARGUMENT__VALUE:
+				return basicSetValue(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ExpressionsPackage.ARGUMENT__PARAMETER:
+				if (resolve) return getParameter();
+				return basicGetParameter();
+			case ExpressionsPackage.ARGUMENT__VALUE:
+				return getValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ExpressionsPackage.ARGUMENT__PARAMETER:
+				setParameter((Parameter)newValue);
+				return;
+			case ExpressionsPackage.ARGUMENT__VALUE:
+				setValue((Expression)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ExpressionsPackage.ARGUMENT__PARAMETER:
+				setParameter((Parameter)null);
+				return;
+			case ExpressionsPackage.ARGUMENT__VALUE:
+				setValue((Expression)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ExpressionsPackage.ARGUMENT__PARAMETER:
+				return parameter != null;
+			case ExpressionsPackage.ARGUMENT__VALUE:
+				return value != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ArgumentImpl

+ 12 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ElementReferenceExpressionImpl.java

@@ -6,6 +6,7 @@ import java.util.Collection;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.BasicEList;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
@@ -16,6 +17,8 @@ import org.eclipse.emf.ecore.util.InternalEList;
 import org.yakindu.base.expressions.expressions.ElementReferenceExpression;
 import org.yakindu.base.expressions.expressions.Expression;
 import org.yakindu.base.expressions.expressions.ExpressionsPackage;
+import org.yakindu.base.expressions.expressions.util.ArgumentSorter;
+import org.yakindu.base.types.Operation;
 
 /**
  * <!-- begin-user-doc -->
@@ -328,4 +331,13 @@ public class ElementReferenceExpressionImpl extends ArgumentExpressionImpl imple
 		return result.toString();
 	}
 
+	@Override
+	public EList<Expression> getExpressions() {
+		if (getReference() instanceof Operation) {
+			return ArgumentSorter.getOrderedExpressions(getArguments(), (Operation) getReference());
+		} else {
+			return new BasicEList<Expression>();
+		}
+	}
+
 } //ElementReferenceExpressionImpl

+ 12 - 2
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ExpressionsFactoryImpl.java

@@ -8,8 +8,8 @@ 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.Argument;
 import org.yakindu.base.expressions.expressions.AssignmentExpression;
 import org.yakindu.base.expressions.expressions.AssignmentOperator;
 import org.yakindu.base.expressions.expressions.BitwiseAndExpression;
@@ -43,7 +43,6 @@ import org.yakindu.base.expressions.expressions.ShiftExpression;
 import org.yakindu.base.expressions.expressions.ShiftOperator;
 import org.yakindu.base.expressions.expressions.StringLiteral;
 import org.yakindu.base.expressions.expressions.TypeCastExpression;
-import org.yakindu.base.expressions.expressions.UnaryExpression;
 import org.yakindu.base.expressions.expressions.UnaryOperator;
 
 /**
@@ -115,6 +114,7 @@ public class ExpressionsFactoryImpl extends EFactoryImpl implements ExpressionsF
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION: return createElementReferenceExpression();
 			case ExpressionsPackage.PARENTHESIZED_EXPRESSION: return createParenthesizedExpression();
 			case ExpressionsPackage.TYPE_CAST_EXPRESSION: return createTypeCastExpression();
+			case ExpressionsPackage.ARGUMENT: return createArgument();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
@@ -428,6 +428,16 @@ public class ExpressionsFactoryImpl extends EFactoryImpl implements ExpressionsF
 		return typeCastExpression;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Argument createArgument() {
+		ArgumentImpl argument = new ArgumentImpl();
+		return argument;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->

+ 50 - 3
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.Argument;
 import org.yakindu.base.expressions.expressions.ArgumentExpression;
 import org.yakindu.base.expressions.expressions.AssignmentExpression;
 import org.yakindu.base.expressions.expressions.AssignmentOperator;
@@ -246,6 +247,13 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 	 */
 	private EClass typeCastExpressionEClass = null;
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass argumentEClass = null;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -900,6 +908,33 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		return (EReference)typeCastExpressionEClass.getEStructuralFeatures().get(1);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getArgument() {
+		return argumentEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getArgument_Parameter() {
+		return (EReference)argumentEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getArgument_Value() {
+		return (EReference)argumentEClass.getEStructuralFeatures().get(1);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -914,7 +949,7 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getArgumentExpression_Args() {
+	public EReference getArgumentExpression_Arguments() {
 		return (EReference)argumentExpressionEClass.getEStructuralFeatures().get(0);
 	}
 
@@ -1073,7 +1108,7 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		createEReference(unaryExpressionEClass, UNARY_EXPRESSION__OPERAND);
 
 		argumentExpressionEClass = createEClass(ARGUMENT_EXPRESSION);
-		createEReference(argumentExpressionEClass, ARGUMENT_EXPRESSION__ARGS);
+		createEReference(argumentExpressionEClass, ARGUMENT_EXPRESSION__ARGUMENTS);
 
 		literalEClass = createEClass(LITERAL);
 
@@ -1157,6 +1192,10 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		createEReference(typeCastExpressionEClass, TYPE_CAST_EXPRESSION__OPERAND);
 		createEReference(typeCastExpressionEClass, TYPE_CAST_EXPRESSION__TYPE);
 
+		argumentEClass = createEClass(ARGUMENT);
+		createEReference(argumentEClass, ARGUMENT__PARAMETER);
+		createEReference(argumentEClass, ARGUMENT__VALUE);
+
 		// Create enums
 		assignmentOperatorEEnum = createEEnum(ASSIGNMENT_OPERATOR);
 		shiftOperatorEEnum = createEEnum(SHIFT_OPERATOR);
@@ -1243,7 +1282,11 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		addEOperation(unaryExpressionEClass, ecorePackage.getEEnumerator(), "getOperator", 0, 1, IS_UNIQUE, 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);
+		initEReference(getArgumentExpression_Arguments(), this.getArgument(), null, "arguments", null, 0, -1, ArgumentExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		addEOperation(argumentExpressionEClass, this.getExpression(), "getArgs", 0, -1, IS_UNIQUE, IS_ORDERED);
+
+		addEOperation(argumentExpressionEClass, this.getExpression(), "getExpressions", 0, -1, IS_UNIQUE, IS_ORDERED);
 
 		initEClass(literalEClass, Literal.class, "Literal", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
@@ -1327,6 +1370,10 @@ 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(argumentEClass, Argument.class, "Argument", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getArgument_Parameter(), theTypesPackage.getParameter(), null, "parameter", null, 0, 1, Argument.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getArgument_Value(), this.getExpression(), null, "value", null, 0, 1, Argument.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);

+ 12 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/FeatureCallImpl.java

@@ -6,6 +6,7 @@ import java.util.Collection;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.BasicEList;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
@@ -16,6 +17,8 @@ import org.eclipse.emf.ecore.util.InternalEList;
 import org.yakindu.base.expressions.expressions.Expression;
 import org.yakindu.base.expressions.expressions.ExpressionsPackage;
 import org.yakindu.base.expressions.expressions.FeatureCall;
+import org.yakindu.base.expressions.expressions.util.ArgumentSorter;
+import org.yakindu.base.types.Operation;
 
 /**
  * <!-- begin-user-doc -->
@@ -393,5 +396,14 @@ public class FeatureCallImpl extends ArgumentExpressionImpl implements FeatureCa
 		result.append(')');
 		return result.toString();
 	}
+	
+	@Override
+	public EList<Expression> getExpressions() {
+		if (getFeature() instanceof Operation) {
+			return ArgumentSorter.getOrderedExpressions(getArguments(), (Operation) getFeature());
+		} else {
+			return new BasicEList<Expression>();
+		}
+	}
 
 } //FeatureCallImpl

+ 59 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/util/ArgumentSorter.java

@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2017 itemis AG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * 	itemis AG - initial API and implementation
+ * 
+ */
+package org.yakindu.base.expressions.expressions.util;
+
+import java.util.List;
+
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.yakindu.base.expressions.expressions.Argument;
+import org.yakindu.base.expressions.expressions.Expression;
+import org.yakindu.base.types.Operation;
+import org.yakindu.base.types.Parameter;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public class ArgumentSorter {
+
+	public static EList<Expression> getOrderedExpressions(List<Argument> arguments, Operation operation) {
+		Expression[] result = new Expression[arguments.size()];
+		for (int index = 0; index < arguments.size(); index++) {
+			Argument argument = arguments.get(index);
+			if (argument.getParameter() == null)
+				result[index] = argument.getValue();
+			else {
+				// operation.getParameters().indexOf(argument.getParameter() can
+				// not be used here since it uses object.equals instead of
+				// EcoreUtil.equals.)
+				for (Parameter param : operation.getParameters()) {
+					if (param.getName().equals(argument.getParameter().getName())) {
+						int parameterIndex = operation.getParameters().indexOf(param);
+						if (parameterIndex < result.length)
+							result[parameterIndex] = argument.getValue();
+						break;
+					}
+				}
+			}
+		}
+
+		EList<Expression> resultAsList = new BasicEList<Expression>();
+		for (int i = 0; i < result.length; i++) {
+			Expression expression = result[i];
+			if (expression != null)
+				resultAsList.add(expression);
+		}
+		return resultAsList;
+	}
+}

+ 22 - 1
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/util/ExpressionsAdapterFactory.java

@@ -6,8 +6,10 @@ 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.Argument;
+import org.yakindu.base.expressions.expressions.ArgumentExpression;
 import org.yakindu.base.expressions.expressions.AssignmentExpression;
+import org.yakindu.base.expressions.expressions.BinaryExpression;
 import org.yakindu.base.expressions.expressions.BitwiseAndExpression;
 import org.yakindu.base.expressions.expressions.BitwiseOrExpression;
 import org.yakindu.base.expressions.expressions.BitwiseXorExpression;
@@ -35,6 +37,7 @@ import org.yakindu.base.expressions.expressions.PrimitiveValueExpression;
 import org.yakindu.base.expressions.expressions.ShiftExpression;
 import org.yakindu.base.expressions.expressions.StringLiteral;
 import org.yakindu.base.expressions.expressions.TypeCastExpression;
+import org.yakindu.base.expressions.expressions.UnaryExpression;
 
 /**
  * <!-- begin-user-doc -->
@@ -213,6 +216,10 @@ public class ExpressionsAdapterFactory extends AdapterFactoryImpl {
 				return createTypeCastExpressionAdapter();
 			}
 			@Override
+			public Adapter caseArgument(Argument object) {
+				return createArgumentAdapter();
+			}
+			@Override
 			public Adapter defaultCase(EObject object) {
 				return createEObjectAdapter();
 			}
@@ -610,6 +617,20 @@ public class ExpressionsAdapterFactory extends AdapterFactoryImpl {
 		return null;
 	}
 
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.base.expressions.expressions.Argument <em>Argument</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.Argument
+	 * @generated
+	 */
+	public Adapter createArgumentAdapter() {
+		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 -->

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

@@ -5,8 +5,10 @@ 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.Argument;
+import org.yakindu.base.expressions.expressions.ArgumentExpression;
 import org.yakindu.base.expressions.expressions.AssignmentExpression;
+import org.yakindu.base.expressions.expressions.BinaryExpression;
 import org.yakindu.base.expressions.expressions.BitwiseAndExpression;
 import org.yakindu.base.expressions.expressions.BitwiseOrExpression;
 import org.yakindu.base.expressions.expressions.BitwiseXorExpression;
@@ -34,6 +36,7 @@ import org.yakindu.base.expressions.expressions.PrimitiveValueExpression;
 import org.yakindu.base.expressions.expressions.ShiftExpression;
 import org.yakindu.base.expressions.expressions.StringLiteral;
 import org.yakindu.base.expressions.expressions.TypeCastExpression;
+import org.yakindu.base.expressions.expressions.UnaryExpression;
 
 /**
  * <!-- begin-user-doc -->
@@ -313,6 +316,12 @@ public class ExpressionsSwitch<T> extends Switch<T> {
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case ExpressionsPackage.ARGUMENT: {
+				Argument argument = (Argument)theEObject;
+				T result = caseArgument(argument);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			default: return defaultCase(theEObject);
 		}
 	}
@@ -722,6 +731,21 @@ public class ExpressionsSwitch<T> extends Switch<T> {
 		return null;
 	}
 
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Argument</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</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseArgument(Argument object) {
+		return null;
+	}
+
 	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Argument Expression</em>'.
 	 * <!-- begin-user-doc -->

+ 9 - 2
plugins/org.yakindu.base.expressions/model/Expressions.ecore

@@ -17,8 +17,10 @@
   </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"/>
+    <eOperations name="getArgs" upperBound="-1" eType="#//Expression"/>
+    <eOperations name="getExpressions" upperBound="-1" eType="#//Expression"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="arguments" upperBound="-1"
+        eType="#//Argument" containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Literal" abstract="true"/>
   <eClassifiers xsi:type="ecore:EClass" name="BoolLiteral" eSuperTypes="#//Literal">
@@ -154,4 +156,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="Argument">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" eType="ecore:EClass ../../org.yakindu.base.types/model/types.ecore#//Parameter"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
 </ecore:EPackage>

+ 8 - 2
plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/Expressions.xtext

@@ -85,20 +85,26 @@ PrimaryExpression returns Expression:
 PrimitiveValueExpression returns Expression:
 	{PrimitiveValueExpression} value=Literal;
 
+
+
 FeatureCall returns Expression:
 	ElementReferenceExpression ({FeatureCall.owner=current} '.' feature=[ecore::EObject]
-	(=> operationCall?= '('(args+=Expression (',' args+=Expression)*)?')'
+	(=> operationCall?= '('(arguments+=Argument (',' arguments+=Argument)*)?')'
 		|
 	=> (arrayAccess ?= '[' arraySelector+=Expression ']') => ('[' arraySelector+=Expression ']')* 
 	)?)*;
 
 ElementReferenceExpression returns Expression:
 	{ElementReferenceExpression} reference=[ecore::EObject|ID]
-	(=> operationCall?='('	(args+=Expression (',' args+=Expression)*)?	')' 
+	(=> operationCall?='('	(arguments+=Argument (',' arguments+=Argument)*)?	')' 
 		|
 	=> (arrayAccess ?= '[' arraySelector+=Expression ']') => ('[' arraySelector+=Expression ']')*
 	)?;
 
+Argument:
+	(parameter=[types::Parameter] '=')?  value=ConditionalExpression
+;
+
 ParenthesizedExpression returns Expression:
 	{ParenthesizedExpression} '(' expression=Expression ')';
 

+ 1 - 1
plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/inferrer/ExpressionsTypeInferrer.java

@@ -260,7 +260,7 @@ public class ExpressionsTypeInferrer extends AbstractTypeSystemInferrer implemen
 	 * extension methods
 	 */
 	protected List<Expression> getOperationArguments(ArgumentExpression e) {
-		return e.getArgs();
+		return e.getExpressions();
 	}
 
 	protected List<InferenceResult> getArgumentTypes(List<Expression> args) {

+ 46 - 7
plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/scoping/ExpressionsScopeProvider.xtend

@@ -6,18 +6,57 @@
  * http://www.eclipse.org/legal/epl-v10.html 
  * Contributors:
  * committers of YAKINDU - initial API and implementation
- *
-*/
+ * 
+ */
 package org.yakindu.base.expressions.scoping
 
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.emf.ecore.EReference
+import org.eclipse.xtext.scoping.Scopes
+import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider
+import org.yakindu.base.expressions.expressions.ElementReferenceExpression
+import org.yakindu.base.expressions.expressions.FeatureCall
+import org.yakindu.base.types.Operation
+import org.yakindu.base.expressions.expressions.Argument
+import org.eclipse.xtext.scoping.IScope
+
 /**
- * This class contains custom scoping description.
  * 
- * see : http://www.eclipse.org/Xtext/documentation.html#scoping
- * on how and when to use it 
- *
+ * @author andreas muelder - Initial contribution and API
+ * 
  */
-class ExpressionsScopeProvider extends org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider {
+class ExpressionsScopeProvider extends AbstractDeclarativeScopeProvider {
+
+	def scope_Argument_parameter(Argument object, EReference ref) {
+		var parameters = object?.eContainer?.operation?.parameters
+		return if(parameters != null) Scopes.scopeFor(parameters) else IScope.NULLSCOPE;
+	}
+
+	def scope_Argument_parameter(ElementReferenceExpression exp, EReference ref) {
+		var parameters = exp?.operation?.parameters
+		return if(parameters != null) Scopes.scopeFor(parameters) else IScope.NULLSCOPE;
+	}
+
+	def scope_Argument_parameter(FeatureCall fc, EReference ref) {
+		var parameters = fc?.operation?.parameters
+		return if(parameters != null) Scopes.scopeFor(parameters) else IScope.NULLSCOPE;
+	}
+
+	def dispatch getOperation(ElementReferenceExpression it) {
+		return if (reference instanceof Operation)
+			reference as Operation
+		else
+			null
+	}
+
+	def dispatch getOperation(FeatureCall it) {
+		return if (feature instanceof Operation)
+			feature as Operation
+		else
+			null
+	}
 
+	def dispatch getOperation(EObject object) {
+	}
 
 }

+ 4 - 4
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/ExpressionCode.xtend

@@ -73,18 +73,18 @@ class ExpressionCode extends Expressions {
 
 	def dispatch CharSequence code(FeatureCall it, VariableDefinition target) '''«target.access»'''
 	
-	def dispatch CharSequence code(ElementReferenceExpression it, OperationDefinition target) '''«target.access»(«scHandle»«FOR arg : args BEFORE ', ' SEPARATOR ', '»«arg.
+	def dispatch CharSequence code(ElementReferenceExpression it, OperationDefinition target) '''«target.access»(«scHandle»«FOR arg : expressions BEFORE ', ' SEPARATOR ', '»«arg.
 		code»«ENDFOR»)'''
 
-	def dispatch CharSequence code(ElementReferenceExpression it, Operation target) '''«target.access»(«FOR arg : args SEPARATOR ', '»«arg.
+	def dispatch CharSequence code(ElementReferenceExpression it, Operation target) '''«target.access»(«FOR arg : expressions SEPARATOR ', '»«arg.
 		code»«ENDFOR»)'''
 	
 	def dispatch CharSequence code(ElementReferenceExpression it, Property target) '''«target.access»'''
 	
-	def dispatch CharSequence code(FeatureCall it, OperationDefinition target) '''«target.access»(«scHandle»«FOR arg : args BEFORE ', ' SEPARATOR ', '»«arg.
+	def dispatch CharSequence code(FeatureCall it, OperationDefinition target) '''«target.access»(«scHandle»«FOR arg : expressions BEFORE ', ' SEPARATOR ', '»«arg.
 		code»«ENDFOR»)'''
 
-	def dispatch CharSequence code(FeatureCall it, Operation target) '''«it.owner.code».«target.access»(«FOR arg : args SEPARATOR ', '»«arg.
+	def dispatch CharSequence code(FeatureCall it, Operation target) '''«it.owner.code».«target.access»(«FOR arg : expressions SEPARATOR ', '»«arg.
 		code»«ENDFOR»)'''
 		
 	def dispatch CharSequence code(FeatureCall it, Property target) '''«it.owner.code».«target.access»'''

+ 2 - 2
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/ExpressionCode.xtend

@@ -63,10 +63,10 @@ class ExpressionCode extends Expressions {
 
 	def dispatch CharSequence code(Expression it, VariableDefinition target) '''«target.access»'''
 
-	def dispatch CharSequence code(ElementReferenceExpression it, OperationDefinition target) '''«target.access»(«FOR arg : args SEPARATOR ', '»«arg.
+	def dispatch CharSequence code(ElementReferenceExpression it, OperationDefinition target) '''«target.access»(«FOR arg : expressions SEPARATOR ', '»«arg.
 		code»«ENDFOR»)'''
 		
-	def dispatch CharSequence code(FeatureCall it, OperationDefinition target) '''«target.access»(«FOR arg : args SEPARATOR ', '»«arg.
+	def dispatch CharSequence code(FeatureCall it, OperationDefinition target) '''«target.access»(«FOR arg : expressions SEPARATOR ', '»«arg.
 		code»«ENDFOR»)'''
 
 	def dispatch CharSequence code(ConditionalExpression it) '''«condition.code» ? «trueCase.code» : «falseCase.code»'''

+ 2 - 2
plugins/org.yakindu.sct.generator.csharp/src/org/yakindu/sct/generator/csharp/ExpressionCode.xtend

@@ -140,14 +140,14 @@ class ExpressionCode extends Expressions {
 
 	def dispatch CharSequence code(ElementReferenceExpression it) '''
 		«IF it.reference instanceof OperationDefinition»
-			«reference.code»(«FOR arg : args SEPARATOR ", "»«arg.code»«ENDFOR»)
+			«reference.code»(«FOR arg : expressions SEPARATOR ", "»«arg.code»«ENDFOR»)
 		«ELSE»
 			«definition.code»«ENDIF»
 	'''
 
 	def dispatch CharSequence code(FeatureCall it) '''
 		«IF feature instanceof Operation»
-			«feature.code»(«FOR arg : args SEPARATOR ", "»«arg.code»«ENDFOR»)
+			«feature.code»(«FOR arg : expressions SEPARATOR ", "»«arg.code»«ENDFOR»)
 		«ELSE»
 			«definition.context + definition.name.asEscapedIdentifier»
 		«ENDIF»

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

@@ -188,7 +188,7 @@ class ExpressionCode extends Expressions {
 	def protected codeDeclaration(Declaration it, ArgumentExpression exp) {
 		switch it {
 			Operation:
-				return operationCall(it, exp.args)
+				return operationCall(it, exp.expressions)
 			Property case exp.isAssignmentContained:
 				return getStaticContext + identifier
 			Property case exp.isPropertyContained:

+ 4 - 116
plugins/org.yakindu.sct.model.stext.edit/src/org/yakindu/sct/model/stext/stext/provider/ArgumentedAnnotationItemProvider.java

@@ -8,21 +8,14 @@ import java.util.List;
 
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
-
 import org.eclipse.emf.common.util.ResourceLocator;
-
 import org.eclipse.emf.ecore.EStructuralFeature;
-
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ViewerNotification;
-
 import org.yakindu.base.expressions.expressions.ExpressionsFactory;
 import org.yakindu.base.expressions.expressions.ExpressionsPackage;
-
 import org.yakindu.base.types.provider.AnnotationItemProvider;
-
 import org.yakindu.sct.model.stext.stext.ArgumentedAnnotation;
-import org.yakindu.sct.model.stext.stext.StextFactory;
 import org.yakindu.sct.model.stext.stext.StextPackage;
 
 /**
@@ -69,7 +62,7 @@ public class ArgumentedAnnotationItemProvider extends AnnotationItemProvider {
 	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
 		if (childrenFeatures == null) {
 			super.getChildrenFeatures(object);
-			childrenFeatures.add(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS);
+			childrenFeatures.add(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGUMENTS);
 		}
 		return childrenFeatures;
 	}
@@ -122,7 +115,7 @@ public class ArgumentedAnnotationItemProvider extends AnnotationItemProvider {
 		updateChildren(notification);
 
 		switch (notification.getFeatureID(ArgumentedAnnotation.class)) {
-			case StextPackage.ARGUMENTED_ANNOTATION__ARGS:
+			case StextPackage.ARGUMENTED_ANNOTATION__ARGUMENTS:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
 				return;
 		}
@@ -142,113 +135,8 @@ public class ArgumentedAnnotationItemProvider extends AnnotationItemProvider {
 
 		newChildDescriptors.add
 			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 StextFactory.eINSTANCE.createEventRaisingExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 StextFactory.eINSTANCE.createEventValueReferenceExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 StextFactory.eINSTANCE.createActiveStateReferenceExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 StextFactory.eINSTANCE.createArgumentedAnnotation()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createAssignmentExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createConditionalExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createLogicalOrExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createLogicalAndExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createLogicalNotExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createBitwiseXorExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createBitwiseOrExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createBitwiseAndExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createLogicalRelationExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createShiftExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createNumericalAddSubtractExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createNumericalMultiplyDivideExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createNumericalUnaryExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createPrimitiveValueExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createFeatureCall()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createElementReferenceExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createParenthesizedExpression()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGS,
-				 ExpressionsFactory.eINSTANCE.createTypeCastExpression()));
+				(ExpressionsPackage.Literals.ARGUMENT_EXPRESSION__ARGUMENTS,
+				 ExpressionsFactory.eINSTANCE.createArgument()));
 	}
 
 	/**

+ 2 - 2
plugins/org.yakindu.sct.model.stext/emf-gen/org/yakindu/sct/model/stext/stext/StextPackage.java

@@ -1482,13 +1482,13 @@ public interface StextPackage extends EPackage {
 	int ARGUMENTED_ANNOTATION__TYPE = TypesPackage.ANNOTATION__TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Args</b></em>' containment reference list.
+	 * The feature id for the '<em><b>Arguments</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int ARGUMENTED_ANNOTATION__ARGS = TypesPackage.ANNOTATION_FEATURE_COUNT + 0;
+	int ARGUMENTED_ANNOTATION__ARGUMENTS = TypesPackage.ANNOTATION_FEATURE_COUNT + 0;
 
 	/**
 	 * The number of structural features of the '<em>Argumented Annotation</em>' class.

+ 44 - 21
plugins/org.yakindu.sct.model.stext/emf-gen/org/yakindu/sct/model/stext/stext/impl/ArgumentedAnnotationImpl.java

@@ -5,11 +5,13 @@ package org.yakindu.sct.model.stext.stext.impl;
 import java.util.Collection;
 
 import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.BasicEList;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
+import org.yakindu.base.expressions.expressions.Argument;
 import org.yakindu.base.expressions.expressions.ArgumentExpression;
 import org.yakindu.base.expressions.expressions.Expression;
 import org.yakindu.base.expressions.expressions.ExpressionsPackage;
@@ -25,22 +27,21 @@ import org.yakindu.sct.model.stext.stext.StextPackage;
  * The following features are implemented:
  * </p>
  * <ul>
- *   <li>{@link org.yakindu.sct.model.stext.stext.impl.ArgumentedAnnotationImpl#getArgs <em>Args</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.stext.stext.impl.ArgumentedAnnotationImpl#getArguments <em>Arguments</em>}</li>
  * </ul>
  *
  * @generated
  */
 public class ArgumentedAnnotationImpl extends AnnotationImpl implements ArgumentedAnnotation {
 	/**
-	 * The cached value of the '{@link #getArgs() <em>Args</em>}' containment reference list.
+	 * The cached value of the '{@link #getArguments() <em>Arguments</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getArgs()
+	 * @see #getArguments()
 	 * @generated
 	 * @ordered
 	 */
-	protected EList<Expression> args;
-
+	protected EList<Argument> arguments;
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -65,11 +66,33 @@ public class ArgumentedAnnotationImpl extends AnnotationImpl implements Argument
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EList<Argument> getArguments() {
+		if (arguments == null) {
+			arguments = new EObjectContainmentEList<Argument>(Argument.class, this, StextPackage.ARGUMENTED_ANNOTATION__ARGUMENTS);
+		}
+		return arguments;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
 	public EList<Expression> getArgs() {
-		if (args == null) {
-			args = new EObjectContainmentEList<Expression>(Expression.class, this, StextPackage.ARGUMENTED_ANNOTATION__ARGS);
+		return getExpressions();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public EList<Expression> getExpressions() {
+		EList<Expression> result = new BasicEList<Expression>();
+		for (Argument argument : getArguments()) {
+			result.add(argument.getValue());
 		}
-		return args;
+		return result;
 	}
 
 	/**
@@ -80,8 +103,8 @@ public class ArgumentedAnnotationImpl extends AnnotationImpl implements Argument
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-			case StextPackage.ARGUMENTED_ANNOTATION__ARGS:
-				return ((InternalEList<?>)getArgs()).basicRemove(otherEnd, msgs);
+			case StextPackage.ARGUMENTED_ANNOTATION__ARGUMENTS:
+				return ((InternalEList<?>)getArguments()).basicRemove(otherEnd, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -94,8 +117,8 @@ public class ArgumentedAnnotationImpl extends AnnotationImpl implements Argument
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-			case StextPackage.ARGUMENTED_ANNOTATION__ARGS:
-				return getArgs();
+			case StextPackage.ARGUMENTED_ANNOTATION__ARGUMENTS:
+				return getArguments();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -109,9 +132,9 @@ public class ArgumentedAnnotationImpl extends AnnotationImpl implements Argument
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case StextPackage.ARGUMENTED_ANNOTATION__ARGS:
-				getArgs().clear();
-				getArgs().addAll((Collection<? extends Expression>)newValue);
+			case StextPackage.ARGUMENTED_ANNOTATION__ARGUMENTS:
+				getArguments().clear();
+				getArguments().addAll((Collection<? extends Argument>)newValue);
 				return;
 		}
 		super.eSet(featureID, newValue);
@@ -125,8 +148,8 @@ public class ArgumentedAnnotationImpl extends AnnotationImpl implements Argument
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case StextPackage.ARGUMENTED_ANNOTATION__ARGS:
-				getArgs().clear();
+			case StextPackage.ARGUMENTED_ANNOTATION__ARGUMENTS:
+				getArguments().clear();
 				return;
 		}
 		super.eUnset(featureID);
@@ -140,8 +163,8 @@ public class ArgumentedAnnotationImpl extends AnnotationImpl implements Argument
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-			case StextPackage.ARGUMENTED_ANNOTATION__ARGS:
-				return args != null && !args.isEmpty();
+			case StextPackage.ARGUMENTED_ANNOTATION__ARGUMENTS:
+				return arguments != null && !arguments.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
@@ -160,7 +183,7 @@ public class ArgumentedAnnotationImpl extends AnnotationImpl implements Argument
 		}
 		if (baseClass == ArgumentExpression.class) {
 			switch (derivedFeatureID) {
-				case StextPackage.ARGUMENTED_ANNOTATION__ARGS: return ExpressionsPackage.ARGUMENT_EXPRESSION__ARGS;
+				case StextPackage.ARGUMENTED_ANNOTATION__ARGUMENTS: return ExpressionsPackage.ARGUMENT_EXPRESSION__ARGUMENTS;
 				default: return -1;
 			}
 		}
@@ -181,7 +204,7 @@ public class ArgumentedAnnotationImpl extends AnnotationImpl implements Argument
 		}
 		if (baseClass == ArgumentExpression.class) {
 			switch (baseFeatureID) {
-				case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGS: return StextPackage.ARGUMENTED_ANNOTATION__ARGS;
+				case ExpressionsPackage.ARGUMENT_EXPRESSION__ARGUMENTS: return StextPackage.ARGUMENTED_ANNOTATION__ARGUMENTS;
 				default: return -1;
 			}
 		}

+ 8 - 3
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/SText.xtext

@@ -82,8 +82,13 @@ OperationDefinition:
 	typeSpecifier=TypeSpecifier)?;
 	
 ArgumentedAnnotation:
-	'@' type=[types::AnnotationType|QID] ('('(args+=Expression (',' args+=Expression)*)? ')')?
+	'@' type=[types::AnnotationType|QID] ('('(arguments+=SimpleArgument (',' arguments+=SimpleArgument)*)? ')')?
 ;
+
+SimpleArgument returns exp::Argument:
+	{exp::Argument} value=ConditionalExpression
+;
+
 TypeSpecifier returns types::TypeSpecifier:
 	type=[types::Type|FQN] ('<' (typeArguments+=TypeSpecifier (',' typeArguments+=TypeSpecifier)*'>'))?;
 
@@ -132,13 +137,13 @@ RegularEventSpec:
 SimpleFeatureCall returns exp::Expression:
 	SimpleElementReferenceExpression ({exp::FeatureCall.owner=current} '.' feature=[ecore::EObject]
 	(=> operationCall?='('
-	(args+=Expression (',' args+=Expression)*)?
+	(arguments+=Argument(',' arguments+=Argument)*)?
 	')')?)*;
 
 SimpleElementReferenceExpression returns exp::ElementReferenceExpression:
 	reference=[ecore::EObject|ID]
 	(=> operationCall?='('
-	(args+=Expression (',' args+=Expression)*)?
+	(arguments+=Argument (',' arguments+=Argument)*)?
 	')')?;
 
 TimeEventSpec:

+ 1 - 1
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/inferrer/STextTypeInferrer.java

@@ -123,7 +123,7 @@ public class STextTypeInferrer extends ExpressionsTypeInferrer {
 	}
 
 	public InferenceResult doInfer(ArgumentedAnnotation ad) {
-		EList<Expression> arguments = ad.getArgs();
+		EList<Expression> arguments = ad.getExpressions();
 		inferAnnotationProperty(ad.getType(), arguments);
 		return getResultFor(VOID);
 	}

+ 2 - 2
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/scoping/STextScopeProvider.java

@@ -23,13 +23,13 @@ import org.eclipse.xtext.EcoreUtil2;
 import org.eclipse.xtext.resource.IEObjectDescription;
 import org.eclipse.xtext.scoping.IScope;
 import org.eclipse.xtext.scoping.Scopes;
-import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider;
 import org.eclipse.xtext.scoping.impl.FilteringScope;
 import org.eclipse.xtext.scoping.impl.SimpleScope;
 import org.eclipse.xtext.util.PolymorphicDispatcher.ErrorHandler;
 import org.yakindu.base.expressions.expressions.ElementReferenceExpression;
 import org.yakindu.base.expressions.expressions.Expression;
 import org.yakindu.base.expressions.expressions.FeatureCall;
+import org.yakindu.base.expressions.scoping.ExpressionsScopeProvider;
 import org.yakindu.base.types.ComplexType;
 import org.yakindu.base.types.EnumerationType;
 import org.yakindu.base.types.Type;
@@ -55,7 +55,7 @@ import com.google.inject.Inject;
  * @author alexander nyssen Added support for scoping of enumeration literals
  * 
  */
-public class STextScopeProvider extends AbstractDeclarativeScopeProvider {
+public class STextScopeProvider extends ExpressionsScopeProvider {
 
 	@Inject
 	private ITypeSystemInferrer typeInferrer;

+ 2 - 0
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/util/ImportResolver.java

@@ -19,6 +19,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.mwe2.language.mwe2.Import;
 import org.eclipse.xtext.resource.IContainer;
 import org.eclipse.xtext.resource.IEObjectDescription;
 import org.eclipse.xtext.resource.IResourceDescription;
@@ -26,6 +27,7 @@ import org.eclipse.xtext.resource.IResourceDescriptions;
 import org.eclipse.xtext.resource.impl.ResourceSetBasedResourceDescriptions;
 import org.yakindu.base.types.Package;
 import org.yakindu.base.types.TypesPackage;
+
 import com.google.common.collect.Lists;
 import com.google.inject.Inject;
 

+ 5 - 3
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/validation/STextJavaValidator.java

@@ -551,13 +551,13 @@ public class STextJavaValidator extends AbstractSTextJavaValidator implements ST
 	public void checkOperationArguments_FeatureCall(final FeatureCall call) {
 		if (call.getFeature() instanceof Operation) {
 			Operation operation = (Operation) call.getFeature();
-			assertOperationArguments(operation, call.getArgs());
+			assertOperationArguments(operation, call.getExpressions());
 		}
 	}
 
 	@Check(CheckType.FAST)
 	public void checkAnnotationArguments(ArgumentedAnnotation annotation) {
-		if (annotation.getArgs().size() != annotation.getType().getProperties().size()) {
+		if (annotation.getExpressions().size() != annotation.getType().getProperties().size()) {
 			error(String.format(WRONG_NUMBER_OF_ARGUMENTS_MSG, annotation.getType().getProperties()), null,
 					WRONG_NUMBER_OF_ARGUMENTS_CODE);
 		}
@@ -567,7 +567,7 @@ public class STextJavaValidator extends AbstractSTextJavaValidator implements ST
 	public void checkOperationArguments_TypedElementReferenceExpression(final ElementReferenceExpression call) {
 		if (call.getReference() instanceof Operation) {
 			Operation operation = (Operation) call.getReference();
-			assertOperationArguments(operation, call.getArgs());
+			assertOperationArguments(operation, call.getExpressions());
 		}
 	}
 
@@ -774,6 +774,8 @@ public class STextJavaValidator extends AbstractSTextJavaValidator implements ST
 		EList<Annotation> annotations = element.getAnnotations();
 		for (Annotation annotation : annotations) {
 			EList<EObject> targets = annotation.getType().getTargets();
+			if(targets.isEmpty())
+				continue;
 			boolean found = Iterables.any(targets, new Predicate<EObject>() {
 				@Override
 				public boolean apply(EObject input) {

+ 1 - 1
plugins/org.yakindu.sct.simulation.core.sexec/src/org/yakindu/sct/simulation/core/sexec/container/DefaultSimulationEngineFactory.java

@@ -69,7 +69,7 @@ public class DefaultSimulationEngineFactory implements ISimulationEngineFactory
 		ArgumentedAnnotation eventDriven = (ArgumentedAnnotation) statechart
 				.getAnnotationOfType(EVENT_DRIVEN_ANNOTATION);
 		if (cycleBased != null) {
-			Long result = (Long) interpreter.evaluateStatement(cycleBased.getArgs().get(0),
+			Long result = (Long) interpreter.evaluateStatement(cycleBased.getExpressions().get(0),
 					SRuntimeFactory.eINSTANCE.createExecutionContext());
 			return new CycleBasedSimulationEngine(statechart, result);
 		}

+ 2 - 2
plugins/org.yakindu.sct.simulation.core.sexec/src/org/yakindu/sct/simulation/core/sexec/interpreter/StextStatementInterpreter.xtend

@@ -174,7 +174,7 @@ class StextStatementInterpreter extends AbstractStatementInterpreter {
 	}
 
 	def dispatch Object execute(ElementReferenceExpression expression) {
-		var parameter = expression.args.map(it|execute)
+		var parameter = expression.expressions.map(it|execute)
 		if (expression.operationCall || expression.reference instanceof OperationDefinition) {
 			if (operationDelegate != null &&
 				operationDelegate.canExecute(expression.reference as Operation, parameter.toArray)) {
@@ -299,7 +299,7 @@ class StextStatementInterpreter extends AbstractStatementInterpreter {
 
 	def executeFeatureCall(FeatureCall call) {
 		if (call.operationCall || call.feature instanceof OperationDefinition) {
-			var parameter = call.args.map(it|execute)
+			var parameter = call.expressions.map(it|execute)
 			if (call.feature instanceof Operation) {
 				var Operation operation = call.feature as Operation
 				if (operationDelegate != null && operationDelegate.canExecute(operation, parameter)) {

+ 74 - 40
test-plugins/org.yakindu.sct.model.stext.test/src/org/yakindu/sct/model/stext/test/validation/STextJavaValidatorTest.java

@@ -71,13 +71,13 @@ public class STextJavaValidatorTest extends AbstractSTextValidationTest implemen
 	 */
 	@Test
 	public void checkVariableDefinition() {
-		Scope context = (Scope) parseExpression("interface if : var i : void",
-				InterfaceScope.class.getSimpleName());
+		Scope context = (Scope) parseExpression("interface if : var i : void", InterfaceScope.class.getSimpleName());
 		AssertableDiagnostics validationResult = tester.validate(context);
 		validationResult.assertErrorContains(STextTypeInferrer.VARIABLE_VOID_TYPE);
 	}
 
-	/**b
+	/**
+	 *  
 	 * @see STextJavaValidator#checkAssignmentExpression(org.yakindu.sct.model.stext.stext.AssignmentExpression)
 	 */
 	@Test
@@ -109,8 +109,7 @@ public class STextJavaValidatorTest extends AbstractSTextValidationTest implemen
 	@Test
 	public void checkLeftHandAssignment() {
 
-		String scope =
-				"interface if : operation myOperation() : boolean event Event1 : boolean var myVar : boolean";
+		String scope = "interface if : operation myOperation() : boolean event Event1 : boolean var myVar : boolean";
 
 		EObject model = super.parseExpression("3 = 3", Expression.class.getSimpleName(), scope);
 		AssertableDiagnostics validationResult = tester.validate(model);
@@ -167,17 +166,18 @@ public class STextJavaValidatorTest extends AbstractSTextValidationTest implemen
 		AssertableDiagnostics validationResult = tester.validate(model);
 		validationResult.assertOK();
 	}
+
 	/**
 	 * @see STextJavaValidator#checkVarArgParameterIsLast(Operation)
 	 */
 	@Test
-	public void checkVarArgParameterIsLast(){
+	public void checkVarArgParameterIsLast() {
 		String scope = "internal: operation myOperation(param1... : integer)"
-					+ "operation myOperation2(param0 : string, param1 ... : integer)";
+				+ "operation myOperation2(param0 : string, param1 ... : integer)";
 		EObject model = super.parseExpression(scope, InternalScope.class.getSimpleName());
 		AssertableDiagnostics validationResult = tester.validate(model);
 		validationResult.assertOK();
-		
+
 		model = super.parseExpression("myOperation()", Expression.class.getSimpleName(), scope);
 		validationResult = tester.validate(model);
 		validationResult.assertOK();
@@ -196,16 +196,16 @@ public class STextJavaValidatorTest extends AbstractSTextValidationTest implemen
 		model = super.parseExpression("myOperation2('',5,5,5)", Expression.class.getSimpleName(), scope);
 		validationResult = tester.validate(model);
 		validationResult.assertOK();
-		
+
 		model = super.parseExpression("myOperation2('','')", Expression.class.getSimpleName(), scope);
 		validationResult = tester.validate(model);
 		validationResult.assertErrorContains("Incompatible types string and integer.");
-		
+
 		scope = "internal: operation myOperation(param1... : integer, param2...: integer)";
 		model = super.parseExpression(scope, InternalScope.class.getSimpleName());
 		validationResult = tester.validate(model);
 		validationResult.assertError(STextJavaValidator.VAR_ARGS_LAST_CODE);
-		
+
 		scope = "internal: operation myOperation2(param1 ... : integer, param0 : string)";
 		model = super.parseExpression(scope, InternalScope.class.getSimpleName());
 		validationResult = tester.validate(model);
@@ -213,6 +213,40 @@ public class STextJavaValidatorTest extends AbstractSTextValidationTest implemen
 
 	}
 	
+	@Test
+	public void checkOperationNamedParameters() {
+		String scope = "internal: operation myOperation(param1 : integer, param2 : boolean)";
+		EObject model = super.parseExpression(scope, InternalScope.class.getSimpleName());
+		AssertableDiagnostics validationResult = tester.validate(model);
+		validationResult.assertOK();
+
+		model = super.parseExpression("myOperation(5, true)", Expression.class.getSimpleName(), scope);
+		validationResult = tester.validate(model);
+		validationResult.assertOK();
+		model = super.parseExpression("myOperation(5, param2 = true)", Expression.class.getSimpleName(), scope);
+		validationResult = tester.validate(model);
+		validationResult.assertOK();
+		model = super.parseExpression("myOperation(param1 = 5, true)", Expression.class.getSimpleName(), scope);
+		validationResult = tester.validate(model);
+		validationResult.assertOK();
+		model = super.parseExpression("myOperation(param1 = 5, param2 = true)", Expression.class.getSimpleName(), scope);
+		validationResult = tester.validate(model);
+		validationResult.assertOK();
+		model = super.parseExpression("myOperation(param2 = true, param1 = 5)", Expression.class.getSimpleName(), scope);
+		validationResult = tester.validate(model);
+		validationResult.assertOK();
+
+
+		model = super.parseExpression("myOperation(param2 = true)", Expression.class.getSimpleName(), scope);
+		validationResult = tester.validate(model);
+		validationResult.assertError(WRONG_NUMBER_OF_ARGUMENTS_CODE);
+		
+		model = super.parseExpression("myOperation(param1 = 5)", Expression.class.getSimpleName(), scope);
+		validationResult = tester.validate(model);
+		validationResult.assertError(WRONG_NUMBER_OF_ARGUMENTS_CODE);
+
+	}
+
 	/**
 	 * @see STextJavaValidator#checkAnnotationArguments(org.yakindu.sct.model.stext.stext.AnnotationDefinition)
 	 */
@@ -222,19 +256,21 @@ public class STextJavaValidatorTest extends AbstractSTextValidationTest implemen
 		String scope = "@Execution()";
 		EObject model = super.parseExpression(scope, StatechartSpecification.class.getSimpleName());
 		AssertableDiagnostics validationResult = tester.validate(model);
-		validationResult.assertError(STextJavaValidator.WRONG_NUMBER_OF_ARGUMENTS_CODE);;
-		
+		validationResult.assertError(STextJavaValidator.WRONG_NUMBER_OF_ARGUMENTS_CODE);
+		;
+
 		scope = "@Execution(EVENT_DRIVEN)";
 		model = super.parseExpression(scope, StatechartSpecification.class.getSimpleName());
-		 validationResult = tester.validate(model);
+		validationResult = tester.validate(model);
 		validationResult.assertOK();
 	}
+
 	/**
 	 * @see STextJavaValidator#checkAnnotationTarget(org.yakindu.base.types.AnnotatableElement)
 	 */
 	@Test
-	public void checkAnnotationTarget(){
-		//TODO: Implement me when default annotation for target is available
+	public void checkAnnotationTarget() {
+		// TODO: Implement me when default annotation for target is available
 	}
 
 	/**
@@ -280,8 +316,8 @@ public class STextJavaValidatorTest extends AbstractSTextValidationTest implemen
 	@Test
 	public void checkFeatureCall() {
 		String scope = "interface if : in event a : integer";
-		EObject model = super.parseExpression("if.a / raise if.a:1",
-				TransitionSpecification.class.getSimpleName(), scope);
+		EObject model = super.parseExpression("if.a / raise if.a:1", TransitionSpecification.class.getSimpleName(),
+				scope);
 		AssertableDiagnostics validationResult = tester.validate(model);
 		validationResult.assertOK();
 	}
@@ -294,7 +330,8 @@ public class STextJavaValidatorTest extends AbstractSTextValidationTest implemen
 	public void checkReactionTrigger() {
 		// ENTRY, EXIT not allowed in transitions
 		String scope = "internal : event a : integer var myVar : integer";
-		EObject model = super.parseExpression("entry / myVar = 5", TransitionSpecification.class.getSimpleName(), scope);
+		EObject model = super.parseExpression("entry / myVar = 5", TransitionSpecification.class.getSimpleName(),
+				scope);
 		AssertableDiagnostics validationResult = tester.validate(model);
 		validationResult.assertError(ENTRY_EXIT_TRIGGER_NOT_ALLOWED);
 
@@ -310,16 +347,16 @@ public class STextJavaValidatorTest extends AbstractSTextValidationTest implemen
 		validationResult = tester.validate(model);
 		validationResult.assertOK();
 	}
-	
+
 	@Test
-	public void checkReactionTriggerRegularEvent(){
-		
+	public void checkReactionTriggerRegularEvent() {
+
 		String scope = "interface : in event e  var x : integer  var y : integer  operation op():integer";
 
 		EObject model = super.parseExpression("e", TransitionSpecification.class.getSimpleName(), scope);
 		AssertableDiagnostics validationResult = tester.validate(model);
 		validationResult.assertOK();
-		
+
 		model = super.parseExpression("x", TransitionSpecification.class.getSimpleName(), scope);
 		validationResult = tester.validate(model);
 		validationResult.assertError(TRIGGER_IS_NO_EVENT);
@@ -331,11 +368,11 @@ public class STextJavaValidatorTest extends AbstractSTextValidationTest implemen
 		model = super.parseExpression("op()", TransitionSpecification.class.getSimpleName(), scope);
 		validationResult = tester.validate(model);
 		validationResult.assertError(TRIGGER_IS_NO_EVENT);
-		
+
 		model = super.parseExpression("x, y", TransitionSpecification.class.getSimpleName(), scope);
 		validationResult = tester.validate(model);
 		validationResult.assertAll(errorMsg("Trigger 'x' is no event."), errorMsg("Trigger 'y' is no event."));
-		
+
 	}
 
 	/**
@@ -376,15 +413,13 @@ public class STextJavaValidatorTest extends AbstractSTextValidationTest implemen
 
 	}
 
-	
-	
 	/**
 	 * @see STextJavaValidator#checkEventDefinition(org.yakindu.sct.model.stext.stext.EventDefinition)
 	 */
 	@Test
 	public void checkEventDefinition() {
 		// No local declarations in interface scope
-		EObject model = super.parseExpression("interface MyInterface: event Event1", 
+		EObject model = super.parseExpression("interface MyInterface: event Event1",
 				InterfaceScope.class.getSimpleName());
 		AssertableDiagnostics result = tester.validate(model);
 		result.assertErrorContains(LOCAL_DECLARATIONS);
@@ -405,7 +440,7 @@ public class STextJavaValidatorTest extends AbstractSTextValidationTest implemen
 	 */
 	@Test
 	public void checkInterfaceScope() {
-		EObject model = super.parseExpression("interface: in event event1 interface: in event event2", 
+		EObject model = super.parseExpression("interface: in event event1 interface: in event event2",
 				StatechartSpecification.class.getSimpleName());
 		AssertableDiagnostics result = tester.validate(model);
 		result.assertDiagnosticsCount(2);
@@ -440,39 +475,38 @@ public class STextJavaValidatorTest extends AbstractSTextValidationTest implemen
 	public void checkExpression() {
 		// Nothing to do
 	}
-	
+
 	@Test
-	public void checkContextElement(){
-		//Nothing to do -> this is covered by ContextPredicateProviderTest
+	public void checkContextElement() {
+		// Nothing to do -> this is covered by ContextPredicateProviderTest
 	}
 
 	@Test
-	public void checkValueOfNoEvent(){
+	public void checkValueOfNoEvent() {
 		String decl = "interface: in event e1:integer var x:integer operation op():integer interface i: in event e2:integer var y:integer";
 
 		EObject model = super.parseExpression("valueof(e1)", Expression.class.getSimpleName(), decl);
 		AssertableDiagnostics result = tester.validate(model);
 		result.assertOK();
-	
+
 		model = super.parseExpression("valueof(i.e2)", Expression.class.getSimpleName(), decl);
 		result = tester.validate(model);
 		result.assertOK();
-	
+
 		model = super.parseExpression("valueof(x)", Expression.class.getSimpleName(), decl);
 		result = tester.validate(model);
 		result.assertError(VALUE_OF_REQUIRES_EVENT);
-		
+
 		model = super.parseExpression("valueof(i.y)", Expression.class.getSimpleName(), decl);
 		result = tester.validate(model);
 		result.assertError(VALUE_OF_REQUIRES_EVENT);
-		
+
 		model = super.parseExpression("valueof(op())", Expression.class.getSimpleName(), decl);
 		result = tester.validate(model);
 		result.assertError(VALUE_OF_REQUIRES_EVENT);
-		
+
 	}
-	
-	
+
 	/**
 	 * checks tht each @Check method of {@link STextJavaValidator} has a @Test
 	 * method in this class with the same name