Просмотр исходного кода

Preparations for array types (TypeSpecifier, ArrayTypeSpecifier, extended grammar, refactorings)

* Added TypeSpecifier as indirection of TypedElement to Type
* Generated languages with Xtext 2.9.1
* Added array selector brackets in expression language.
* Simplified scope provider by using type inferrer.
* Added cases for enum and complex types in value provider.
* GenericTypeSystem is now a singleton.
* Initial C code generator adjustments for array types.
* Refactored IExpressionParser to support complex type feature calls
* Added ArrayTypeSpecifier that holds the array size.
* Added grammar rules to avoid ambiguity of guards and arrays.
Thomas Kutz 9 лет назад
Родитель
Сommit
5dd0d397cf
100 измененных файлов с 2292 добавлено и 390 удалено
  1. 6 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/AdditiveOperator.java
  2. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/AssignmentExpression.java
  3. 6 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/AssignmentOperator.java
  4. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/BitwiseAndExpression.java
  5. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/BitwiseOrExpression.java
  6. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/BitwiseXorExpression.java
  7. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/BoolLiteral.java
  8. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ConditionalExpression.java
  9. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/DoubleLiteral.java
  10. 45 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ElementReferenceExpression.java
  11. 114 2
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ExpressionsPackage.java
  12. 45 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/FeatureCall.java
  13. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/FloatLiteral.java
  14. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/HexLiteral.java
  15. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/IntLiteral.java
  16. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/LogicalAndExpression.java
  17. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/LogicalNotExpression.java
  18. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/LogicalOrExpression.java
  19. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/LogicalRelationExpression.java
  20. 6 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/MultiplicativeOperator.java
  21. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/NumericalAddSubtractExpression.java
  22. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/NumericalMultiplyDivideExpression.java
  23. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/NumericalUnaryExpression.java
  24. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ParenthesizedExpression.java
  25. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/PrimitiveValueExpression.java
  26. 6 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/RelationalOperator.java
  27. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ShiftExpression.java
  28. 6 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ShiftOperator.java
  29. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/StringLiteral.java
  30. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/TypeCastExpression.java
  31. 6 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/UnaryOperator.java
  32. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/AssignmentExpressionImpl.java
  33. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/BitwiseAndExpressionImpl.java
  34. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/BitwiseOrExpressionImpl.java
  35. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/BitwiseXorExpressionImpl.java
  36. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/BoolLiteralImpl.java
  37. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ConditionalExpressionImpl.java
  38. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/DoubleLiteralImpl.java
  39. 91 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ElementReferenceExpressionImpl.java
  40. 0 2
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ExpressionImpl.java
  41. 44 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ExpressionsPackageImpl.java
  42. 91 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/FeatureCallImpl.java
  43. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/FloatLiteralImpl.java
  44. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/HexLiteralImpl.java
  45. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/IntLiteralImpl.java
  46. 0 2
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/LiteralImpl.java
  47. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/LogicalAndExpressionImpl.java
  48. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/LogicalNotExpressionImpl.java
  49. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/LogicalOrExpressionImpl.java
  50. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/LogicalRelationExpressionImpl.java
  51. 0 2
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/NullLiteralImpl.java
  52. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/NumericalAddSubtractExpressionImpl.java
  53. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/NumericalMultiplyDivideExpressionImpl.java
  54. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/NumericalUnaryExpressionImpl.java
  55. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ParenthesizedExpressionImpl.java
  56. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/PrimitiveValueExpressionImpl.java
  57. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ShiftExpressionImpl.java
  58. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/StringLiteralImpl.java
  59. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/TypeCastExpressionImpl.java
  60. 1 1
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/util/ExpressionsSwitch.java
  61. 6 0
      plugins/org.yakindu.base.expressions/model/Expressions.ecore
  62. 8 6
      plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/Expressions.xtext
  63. 3 4
      plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/inferrer/ExpressionsTypeInferrer.java
  64. 10 10
      plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/validation/ExpressionsJavaValidator.java
  65. 4 2
      plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/validation/GenericsPrettyPrinter.xtend
  66. BIN
      plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateTypeSpecifier_typeArguments_ArrayTypeSpecifier.gif
  67. BIN
      plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateTypeSpecifier_typeArguments_TypeSpecifier.gif
  68. BIN
      plugins/org.yakindu.base.types.edit/icons/full/obj16/ArrayTypeSpecifier.gif
  69. BIN
      plugins/org.yakindu.base.types.edit/icons/full/obj16/TypeSpecifier.gif
  70. 14 0
      plugins/org.yakindu.base.types.edit/plugin.properties
  71. 24 0
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/AnnotationItemProvider.java
  72. 130 0
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/ArrayTypeSpecifierItemProvider.java
  73. 45 23
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/DeclarationItemProvider.java
  74. 45 23
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/ParameterItemProvider.java
  75. 12 23
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/TypeAliasItemProvider.java
  76. 197 0
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/TypeSpecifierItemProvider.java
  77. 48 0
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/TypesItemProviderAdapterFactory.java
  78. 1 0
      plugins/org.yakindu.base.types/META-INF/MANIFEST.MF
  79. 10 1
      plugins/org.yakindu.base.types/model/types.ecore
  80. 49 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/ArrayTypeSpecifier.java
  81. 69 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypeSpecifier.java
  82. 16 18
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypedElement.java
  83. 18 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypesFactory.java
  84. 217 37
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypesPackage.java
  85. 162 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/ArrayTypeSpecifierImpl.java
  86. 63 50
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/DeclarationImpl.java
  87. 50 54
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/ParameterImpl.java
  88. 57 53
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypeAliasImpl.java
  89. 25 24
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypeParameterImpl.java
  90. 209 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypeSpecifierImpl.java
  91. 24 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypesFactoryImpl.java
  92. 80 4
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypesPackageImpl.java
  93. 38 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/util/TypesAdapterFactory.java
  94. 45 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/util/TypesSwitch.java
  95. 39 0
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/TypeParameterBinding.java
  96. 44 0
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/annotations/TypeAnnotations.java
  97. 4 0
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/inferrer/AbstractTypeSystemInferrer.java
  98. 5 0
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/typesystem/AbstractTypeSystem.java
  99. 10 1
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/typesystem/GenericTypeSystem.java
  100. 0 0
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/typesystem/GenericTypeValueProvider.java

+ 6 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/AdditiveOperator.java

@@ -92,6 +92,8 @@ public enum AdditiveOperator implements Enumerator {
 	 * Returns the '<em><b>Additive Operator</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static AdditiveOperator get(String literal) {
@@ -108,6 +110,8 @@ public enum AdditiveOperator implements Enumerator {
 	 * Returns the '<em><b>Additive Operator</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static AdditiveOperator getByName(String name) {
@@ -124,6 +128,8 @@ public enum AdditiveOperator implements Enumerator {
 	 * Returns the '<em><b>Additive Operator</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static AdditiveOperator get(int value) {

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

@@ -10,12 +10,12 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.AssignmentExpression#getVarRef <em>Var Ref</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.AssignmentExpression#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.AssignmentExpression#getExpression <em>Expression</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getAssignmentExpression()
  * @model

+ 6 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/AssignmentOperator.java

@@ -326,6 +326,8 @@ public enum AssignmentOperator implements Enumerator {
 	 * Returns the '<em><b>Assignment Operator</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static AssignmentOperator get(String literal) {
@@ -342,6 +344,8 @@ public enum AssignmentOperator implements Enumerator {
 	 * Returns the '<em><b>Assignment Operator</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static AssignmentOperator getByName(String name) {
@@ -358,6 +362,8 @@ public enum AssignmentOperator implements Enumerator {
 	 * Returns the '<em><b>Assignment Operator</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static AssignmentOperator get(int value) {

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

@@ -10,11 +10,11 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.BitwiseAndExpression#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.BitwiseAndExpression#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getBitwiseAndExpression()
  * @model

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

@@ -10,11 +10,11 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.BitwiseOrExpression#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.BitwiseOrExpression#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getBitwiseOrExpression()
  * @model

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

@@ -10,11 +10,11 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.BitwiseXorExpression#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.BitwiseXorExpression#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getBitwiseXorExpression()
  * @model

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

@@ -10,10 +10,10 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.BoolLiteral#isValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getBoolLiteral()
  * @model

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

@@ -10,12 +10,12 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.ConditionalExpression#getCondition <em>Condition</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.ConditionalExpression#getTrueCase <em>True Case</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.ConditionalExpression#getFalseCase <em>False Case</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getConditionalExpression()
  * @model

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

@@ -10,10 +10,10 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.DoubleLiteral#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getDoubleLiteral()
  * @model

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

@@ -12,12 +12,14 @@ import org.eclipse.emf.ecore.EObject;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#getReference <em>Reference</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#isOperationCall <em>Operation Call</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#getArgs <em>Args</em>}</li>
+ *   <li>{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#getArraySelector <em>Array Selector</em>}</li>
+ *   <li>{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#isArrayAccess <em>Array Access</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getElementReferenceExpression()
  * @model
@@ -92,4 +94,46 @@ public interface ElementReferenceExpression extends Expression {
 	 */
 	EList<Expression> getArgs();
 
+	/**
+	 * Returns the value of the '<em><b>Array Selector</b></em>' containment reference list.
+	 * The list contents are of type {@link org.yakindu.base.expressions.expressions.Expression}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Array Selector</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Array Selector</em>' containment reference list.
+	 * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getElementReferenceExpression_ArraySelector()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<Expression> getArraySelector();
+
+	/**
+	 * Returns the value of the '<em><b>Array Access</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Array Access</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Array Access</em>' attribute.
+	 * @see #setArrayAccess(boolean)
+	 * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getElementReferenceExpression_ArrayAccess()
+	 * @model
+	 * @generated
+	 */
+	boolean isArrayAccess();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#isArrayAccess <em>Array Access</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Array Access</em>' attribute.
+	 * @see #isArrayAccess()
+	 * @generated
+	 */
+	void setArrayAccess(boolean value);
+
 } // ElementReferenceExpression

+ 114 - 2
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ExpressionsPackage.java

@@ -881,6 +881,24 @@ public interface ExpressionsPackage extends EPackage {
 	 */
 	int FEATURE_CALL__ARGS = EXPRESSION_FEATURE_COUNT + 3;
 
+	/**
+	 * The feature id for the '<em><b>Array Selector</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_CALL__ARRAY_SELECTOR = EXPRESSION_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Array Access</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_CALL__ARRAY_ACCESS = EXPRESSION_FEATURE_COUNT + 5;
+
 	/**
 	 * The number of structural features of the '<em>Feature Call</em>' class.
 	 * <!-- begin-user-doc -->
@@ -888,7 +906,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int FEATURE_CALL_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 4;
+	int FEATURE_CALL_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 6;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.impl.ElementReferenceExpressionImpl <em>Element Reference Expression</em>}' class.
@@ -927,6 +945,24 @@ public interface ExpressionsPackage extends EPackage {
 	 */
 	int ELEMENT_REFERENCE_EXPRESSION__ARGS = EXPRESSION_FEATURE_COUNT + 2;
 
+	/**
+	 * The feature id for the '<em><b>Array Selector</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR = EXPRESSION_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Array Access</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS = EXPRESSION_FEATURE_COUNT + 4;
+
 	/**
 	 * The number of structural features of the '<em>Element Reference Expression</em>' class.
 	 * <!-- begin-user-doc -->
@@ -934,7 +970,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int ELEMENT_REFERENCE_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 3;
+	int ELEMENT_REFERENCE_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 5;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.impl.ParenthesizedExpressionImpl <em>Parenthesized Expression</em>}' class.
@@ -1764,6 +1800,28 @@ public interface ExpressionsPackage extends EPackage {
 	 */
 	EReference getFeatureCall_Args();
 
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.expressions.expressions.FeatureCall#getArraySelector <em>Array Selector</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Array Selector</em>'.
+	 * @see org.yakindu.base.expressions.expressions.FeatureCall#getArraySelector()
+	 * @see #getFeatureCall()
+	 * @generated
+	 */
+	EReference getFeatureCall_ArraySelector();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.yakindu.base.expressions.expressions.FeatureCall#isArrayAccess <em>Array Access</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Array Access</em>'.
+	 * @see org.yakindu.base.expressions.expressions.FeatureCall#isArrayAccess()
+	 * @see #getFeatureCall()
+	 * @generated
+	 */
+	EAttribute getFeatureCall_ArrayAccess();
+
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression <em>Element Reference Expression</em>}'.
 	 * <!-- begin-user-doc -->
@@ -1807,6 +1865,28 @@ public interface ExpressionsPackage extends EPackage {
 	 */
 	EReference getElementReferenceExpression_Args();
 
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#getArraySelector <em>Array Selector</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Array Selector</em>'.
+	 * @see org.yakindu.base.expressions.expressions.ElementReferenceExpression#getArraySelector()
+	 * @see #getElementReferenceExpression()
+	 * @generated
+	 */
+	EReference getElementReferenceExpression_ArraySelector();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.yakindu.base.expressions.expressions.ElementReferenceExpression#isArrayAccess <em>Array Access</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Array Access</em>'.
+	 * @see org.yakindu.base.expressions.expressions.ElementReferenceExpression#isArrayAccess()
+	 * @see #getElementReferenceExpression()
+	 * @generated
+	 */
+	EAttribute getElementReferenceExpression_ArrayAccess();
+
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.base.expressions.expressions.ParenthesizedExpression <em>Parenthesized Expression</em>}'.
 	 * <!-- begin-user-doc -->
@@ -2518,6 +2598,22 @@ public interface ExpressionsPackage extends EPackage {
 		 */
 		EReference FEATURE_CALL__ARGS = eINSTANCE.getFeatureCall_Args();
 
+		/**
+		 * The meta object literal for the '<em><b>Array Selector</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference FEATURE_CALL__ARRAY_SELECTOR = eINSTANCE.getFeatureCall_ArraySelector();
+
+		/**
+		 * The meta object literal for the '<em><b>Array Access</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEATURE_CALL__ARRAY_ACCESS = eINSTANCE.getFeatureCall_ArrayAccess();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.base.expressions.expressions.impl.ElementReferenceExpressionImpl <em>Element Reference Expression</em>}' class.
 		 * <!-- begin-user-doc -->
@@ -2552,6 +2648,22 @@ public interface ExpressionsPackage extends EPackage {
 		 */
 		EReference ELEMENT_REFERENCE_EXPRESSION__ARGS = eINSTANCE.getElementReferenceExpression_Args();
 
+		/**
+		 * The meta object literal for the '<em><b>Array Selector</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR = eINSTANCE.getElementReferenceExpression_ArraySelector();
+
+		/**
+		 * The meta object literal for the '<em><b>Array Access</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS = eINSTANCE.getElementReferenceExpression_ArrayAccess();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.base.expressions.expressions.impl.ParenthesizedExpressionImpl <em>Parenthesized Expression</em>}' class.
 		 * <!-- begin-user-doc -->

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

@@ -12,13 +12,15 @@ import org.eclipse.emf.ecore.EObject;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.FeatureCall#getOwner <em>Owner</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.FeatureCall#getFeature <em>Feature</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.FeatureCall#isOperationCall <em>Operation Call</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.FeatureCall#getArgs <em>Args</em>}</li>
+ *   <li>{@link org.yakindu.base.expressions.expressions.FeatureCall#getArraySelector <em>Array Selector</em>}</li>
+ *   <li>{@link org.yakindu.base.expressions.expressions.FeatureCall#isArrayAccess <em>Array Access</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getFeatureCall()
  * @model
@@ -119,4 +121,46 @@ public interface FeatureCall extends Expression {
 	 */
 	EList<Expression> getArgs();
 
+	/**
+	 * Returns the value of the '<em><b>Array Selector</b></em>' containment reference list.
+	 * The list contents are of type {@link org.yakindu.base.expressions.expressions.Expression}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Array Selector</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Array Selector</em>' containment reference list.
+	 * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getFeatureCall_ArraySelector()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<Expression> getArraySelector();
+
+	/**
+	 * Returns the value of the '<em><b>Array Access</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Array Access</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Array Access</em>' attribute.
+	 * @see #setArrayAccess(boolean)
+	 * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getFeatureCall_ArrayAccess()
+	 * @model
+	 * @generated
+	 */
+	boolean isArrayAccess();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.base.expressions.expressions.FeatureCall#isArrayAccess <em>Array Access</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Array Access</em>' attribute.
+	 * @see #isArrayAccess()
+	 * @generated
+	 */
+	void setArrayAccess(boolean value);
+
 } // FeatureCall

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

@@ -10,10 +10,10 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.FloatLiteral#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getFloatLiteral()
  * @model

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

@@ -10,10 +10,10 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.HexLiteral#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getHexLiteral()
  * @model

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

@@ -10,10 +10,10 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.IntLiteral#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getIntLiteral()
  * @model

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

@@ -10,11 +10,11 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.LogicalAndExpression#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.LogicalAndExpression#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getLogicalAndExpression()
  * @model

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

@@ -10,10 +10,10 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.LogicalNotExpression#getOperand <em>Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getLogicalNotExpression()
  * @model

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

@@ -10,11 +10,11 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.LogicalOrExpression#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.LogicalOrExpression#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getLogicalOrExpression()
  * @model

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

@@ -10,12 +10,12 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.LogicalRelationExpression#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.LogicalRelationExpression#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.LogicalRelationExpression#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getLogicalRelationExpression()
  * @model

+ 6 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/MultiplicativeOperator.java

@@ -118,6 +118,8 @@ public enum MultiplicativeOperator implements Enumerator {
 	 * Returns the '<em><b>Multiplicative Operator</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static MultiplicativeOperator get(String literal) {
@@ -134,6 +136,8 @@ public enum MultiplicativeOperator implements Enumerator {
 	 * Returns the '<em><b>Multiplicative Operator</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static MultiplicativeOperator getByName(String name) {
@@ -150,6 +154,8 @@ public enum MultiplicativeOperator implements Enumerator {
 	 * Returns the '<em><b>Multiplicative Operator</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static MultiplicativeOperator get(int value) {

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

@@ -10,12 +10,12 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.NumericalAddSubtractExpression#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.NumericalAddSubtractExpression#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.NumericalAddSubtractExpression#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getNumericalAddSubtractExpression()
  * @model

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

@@ -10,12 +10,12 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.NumericalMultiplyDivideExpression#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.NumericalMultiplyDivideExpression#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.NumericalMultiplyDivideExpression#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getNumericalMultiplyDivideExpression()
  * @model

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

@@ -10,11 +10,11 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.NumericalUnaryExpression#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.NumericalUnaryExpression#getOperand <em>Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getNumericalUnaryExpression()
  * @model

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

@@ -10,10 +10,10 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.ParenthesizedExpression#getExpression <em>Expression</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getParenthesizedExpression()
  * @model

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

@@ -10,10 +10,10 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.PrimitiveValueExpression#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getPrimitiveValueExpression()
  * @model

+ 6 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/RelationalOperator.java

@@ -196,6 +196,8 @@ public enum RelationalOperator implements Enumerator {
 	 * Returns the '<em><b>Relational Operator</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static RelationalOperator get(String literal) {
@@ -212,6 +214,8 @@ public enum RelationalOperator implements Enumerator {
 	 * Returns the '<em><b>Relational Operator</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static RelationalOperator getByName(String name) {
@@ -228,6 +232,8 @@ public enum RelationalOperator implements Enumerator {
 	 * Returns the '<em><b>Relational Operator</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static RelationalOperator get(int value) {

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

@@ -10,12 +10,12 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.ShiftExpression#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.ShiftExpression#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.ShiftExpression#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getShiftExpression()
  * @model

+ 6 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ShiftOperator.java

@@ -92,6 +92,8 @@ public enum ShiftOperator implements Enumerator {
 	 * Returns the '<em><b>Shift Operator</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ShiftOperator get(String literal) {
@@ -108,6 +110,8 @@ public enum ShiftOperator implements Enumerator {
 	 * Returns the '<em><b>Shift Operator</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ShiftOperator getByName(String name) {
@@ -124,6 +128,8 @@ public enum ShiftOperator implements Enumerator {
 	 * Returns the '<em><b>Shift Operator</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static ShiftOperator get(int value) {

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

@@ -10,10 +10,10 @@ package org.yakindu.base.expressions.expressions;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.StringLiteral#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getStringLiteral()
  * @model

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

@@ -11,11 +11,11 @@ import org.yakindu.base.types.Type;
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.TypeCastExpression#getOperand <em>Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.TypeCastExpression#getType <em>Type</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getTypeCastExpression()
  * @model

+ 6 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/UnaryOperator.java

@@ -118,6 +118,8 @@ public enum UnaryOperator implements Enumerator {
 	 * Returns the '<em><b>Unary Operator</b></em>' literal with the specified literal value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static UnaryOperator get(String literal) {
@@ -134,6 +136,8 @@ public enum UnaryOperator implements Enumerator {
 	 * Returns the '<em><b>Unary Operator</b></em>' literal with the specified name.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static UnaryOperator getByName(String name) {
@@ -150,6 +154,8 @@ public enum UnaryOperator implements Enumerator {
 	 * Returns the '<em><b>Unary Operator</b></em>' literal with the specified integer value.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
 	 * @generated
 	 */
 	public static UnaryOperator get(int value) {

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

@@ -18,12 +18,12 @@ import org.yakindu.base.expressions.expressions.ExpressionsPackage;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.AssignmentExpressionImpl#getVarRef <em>Var Ref</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.AssignmentExpressionImpl#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.AssignmentExpressionImpl#getExpression <em>Expression</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -17,11 +17,11 @@ import org.yakindu.base.expressions.expressions.ExpressionsPackage;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.BitwiseAndExpressionImpl#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.BitwiseAndExpressionImpl#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -17,11 +17,11 @@ import org.yakindu.base.expressions.expressions.ExpressionsPackage;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.BitwiseOrExpressionImpl#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.BitwiseOrExpressionImpl#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -17,11 +17,11 @@ import org.yakindu.base.expressions.expressions.ExpressionsPackage;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.BitwiseXorExpressionImpl#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.BitwiseXorExpressionImpl#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -14,10 +14,10 @@ import org.yakindu.base.expressions.expressions.ExpressionsPackage;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.BoolLiteralImpl#isValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -17,12 +17,12 @@ import org.yakindu.base.expressions.expressions.ExpressionsPackage;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ConditionalExpressionImpl#getCondition <em>Condition</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ConditionalExpressionImpl#getTrueCase <em>True Case</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ConditionalExpressionImpl#getFalseCase <em>False Case</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -14,10 +14,10 @@ import org.yakindu.base.expressions.expressions.ExpressionsPackage;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.DoubleLiteralImpl#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -23,12 +23,14 @@ import org.yakindu.base.expressions.expressions.ExpressionsPackage;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ElementReferenceExpressionImpl#getReference <em>Reference</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ElementReferenceExpressionImpl#isOperationCall <em>Operation Call</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ElementReferenceExpressionImpl#getArgs <em>Args</em>}</li>
+ *   <li>{@link org.yakindu.base.expressions.expressions.impl.ElementReferenceExpressionImpl#getArraySelector <em>Array Selector</em>}</li>
+ *   <li>{@link org.yakindu.base.expressions.expressions.impl.ElementReferenceExpressionImpl#isArrayAccess <em>Array Access</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
@@ -73,6 +75,36 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 	 */
 	protected EList<Expression> args;
 
+	/**
+	 * The cached value of the '{@link #getArraySelector() <em>Array Selector</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getArraySelector()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Expression> arraySelector;
+
+	/**
+	 * The default value of the '{@link #isArrayAccess() <em>Array Access</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isArrayAccess()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ARRAY_ACCESS_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isArrayAccess() <em>Array Access</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isArrayAccess()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean arrayAccess = ARRAY_ACCESS_EDEFAULT;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -163,6 +195,39 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 		return args;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Expression> getArraySelector() {
+		if (arraySelector == null) {
+			arraySelector = new EObjectContainmentEList<Expression>(Expression.class, this, ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR);
+		}
+		return arraySelector;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isArrayAccess() {
+		return arrayAccess;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setArrayAccess(boolean newArrayAccess) {
+		boolean oldArrayAccess = arrayAccess;
+		arrayAccess = newArrayAccess;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS, oldArrayAccess, arrayAccess));
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -173,6 +238,8 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 		switch (featureID) {
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARGS:
 				return ((InternalEList<?>)getArgs()).basicRemove(otherEnd, msgs);
+			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR:
+				return ((InternalEList<?>)getArraySelector()).basicRemove(otherEnd, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -192,6 +259,10 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 				return isOperationCall();
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARGS:
 				return getArgs();
+			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR:
+				return getArraySelector();
+			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS:
+				return isArrayAccess();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -215,6 +286,13 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 				getArgs().clear();
 				getArgs().addAll((Collection<? extends Expression>)newValue);
 				return;
+			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR:
+				getArraySelector().clear();
+				getArraySelector().addAll((Collection<? extends Expression>)newValue);
+				return;
+			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS:
+				setArrayAccess((Boolean)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -236,6 +314,12 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARGS:
 				getArgs().clear();
 				return;
+			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR:
+				getArraySelector().clear();
+				return;
+			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS:
+				setArrayAccess(ARRAY_ACCESS_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -254,6 +338,10 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 				return operationCall != OPERATION_CALL_EDEFAULT;
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARGS:
 				return args != null && !args.isEmpty();
+			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR:
+				return arraySelector != null && !arraySelector.isEmpty();
+			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS:
+				return arrayAccess != ARRAY_ACCESS_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -270,6 +358,8 @@ public class ElementReferenceExpressionImpl extends ExpressionImpl implements El
 		StringBuffer result = new StringBuffer(super.toString());
 		result.append(" (operationCall: ");
 		result.append(operationCall);
+		result.append(", arrayAccess: ");
+		result.append(arrayAccess);
 		result.append(')');
 		return result.toString();
 	}

+ 0 - 2
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ExpressionImpl.java

@@ -11,8 +11,6 @@ import org.yakindu.base.expressions.expressions.ExpressionsPackage;
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Expression</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */

+ 44 - 0
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ExpressionsPackageImpl.java

@@ -941,6 +941,24 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		return (EReference)featureCallEClass.getEStructuralFeatures().get(3);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getFeatureCall_ArraySelector() {
+		return (EReference)featureCallEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFeatureCall_ArrayAccess() {
+		return (EAttribute)featureCallEClass.getEStructuralFeatures().get(5);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -977,6 +995,24 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		return (EReference)elementReferenceExpressionEClass.getEStructuralFeatures().get(2);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getElementReferenceExpression_ArraySelector() {
+		return (EReference)elementReferenceExpressionEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getElementReferenceExpression_ArrayAccess() {
+		return (EAttribute)elementReferenceExpressionEClass.getEStructuralFeatures().get(4);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1193,11 +1229,15 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		createEReference(featureCallEClass, FEATURE_CALL__FEATURE);
 		createEAttribute(featureCallEClass, FEATURE_CALL__OPERATION_CALL);
 		createEReference(featureCallEClass, FEATURE_CALL__ARGS);
+		createEReference(featureCallEClass, FEATURE_CALL__ARRAY_SELECTOR);
+		createEAttribute(featureCallEClass, FEATURE_CALL__ARRAY_ACCESS);
 
 		elementReferenceExpressionEClass = createEClass(ELEMENT_REFERENCE_EXPRESSION);
 		createEReference(elementReferenceExpressionEClass, ELEMENT_REFERENCE_EXPRESSION__REFERENCE);
 		createEAttribute(elementReferenceExpressionEClass, ELEMENT_REFERENCE_EXPRESSION__OPERATION_CALL);
 		createEReference(elementReferenceExpressionEClass, ELEMENT_REFERENCE_EXPRESSION__ARGS);
+		createEReference(elementReferenceExpressionEClass, ELEMENT_REFERENCE_EXPRESSION__ARRAY_SELECTOR);
+		createEAttribute(elementReferenceExpressionEClass, ELEMENT_REFERENCE_EXPRESSION__ARRAY_ACCESS);
 
 		parenthesizedExpressionEClass = createEClass(PARENTHESIZED_EXPRESSION);
 		createEReference(parenthesizedExpressionEClass, PARENTHESIZED_EXPRESSION__EXPRESSION);
@@ -1362,11 +1402,15 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		initEReference(getFeatureCall_Feature(), ecorePackage.getEObject(), null, "feature", null, 0, 1, FeatureCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getFeatureCall_OperationCall(), ecorePackage.getEBoolean(), "operationCall", null, 0, 1, FeatureCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getFeatureCall_Args(), this.getExpression(), null, "args", null, 0, -1, FeatureCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getFeatureCall_ArraySelector(), this.getExpression(), null, "arraySelector", null, 0, -1, FeatureCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getFeatureCall_ArrayAccess(), ecorePackage.getEBoolean(), "arrayAccess", null, 0, 1, FeatureCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(elementReferenceExpressionEClass, ElementReferenceExpression.class, "ElementReferenceExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getElementReferenceExpression_Reference(), ecorePackage.getEObject(), null, "reference", null, 0, 1, ElementReferenceExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getElementReferenceExpression_OperationCall(), ecorePackage.getEBoolean(), "operationCall", null, 0, 1, ElementReferenceExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getElementReferenceExpression_Args(), this.getExpression(), null, "args", null, 0, -1, ElementReferenceExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getElementReferenceExpression_ArraySelector(), this.getExpression(), null, "arraySelector", null, 0, -1, ElementReferenceExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getElementReferenceExpression_ArrayAccess(), ecorePackage.getEBoolean(), "arrayAccess", null, 0, 1, ElementReferenceExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(parenthesizedExpressionEClass, ParenthesizedExpression.class, "ParenthesizedExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getParenthesizedExpression_Expression(), this.getExpression(), null, "expression", null, 0, 1, ParenthesizedExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

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

@@ -23,13 +23,15 @@ import org.yakindu.base.expressions.expressions.FeatureCall;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.FeatureCallImpl#getOwner <em>Owner</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.FeatureCallImpl#getFeature <em>Feature</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.FeatureCallImpl#isOperationCall <em>Operation Call</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.FeatureCallImpl#getArgs <em>Args</em>}</li>
+ *   <li>{@link org.yakindu.base.expressions.expressions.impl.FeatureCallImpl#getArraySelector <em>Array Selector</em>}</li>
+ *   <li>{@link org.yakindu.base.expressions.expressions.impl.FeatureCallImpl#isArrayAccess <em>Array Access</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */
@@ -84,6 +86,36 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 	 */
 	protected EList<Expression> args;
 
+	/**
+	 * The cached value of the '{@link #getArraySelector() <em>Array Selector</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getArraySelector()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Expression> arraySelector;
+
+	/**
+	 * The default value of the '{@link #isArrayAccess() <em>Array Access</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isArrayAccess()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ARRAY_ACCESS_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isArrayAccess() <em>Array Access</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isArrayAccess()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean arrayAccess = ARRAY_ACCESS_EDEFAULT;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -217,6 +249,39 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 		return args;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Expression> getArraySelector() {
+		if (arraySelector == null) {
+			arraySelector = new EObjectContainmentEList<Expression>(Expression.class, this, ExpressionsPackage.FEATURE_CALL__ARRAY_SELECTOR);
+		}
+		return arraySelector;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isArrayAccess() {
+		return arrayAccess;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setArrayAccess(boolean newArrayAccess) {
+		boolean oldArrayAccess = arrayAccess;
+		arrayAccess = newArrayAccess;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ExpressionsPackage.FEATURE_CALL__ARRAY_ACCESS, oldArrayAccess, arrayAccess));
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -229,6 +294,8 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 				return basicSetOwner(null, msgs);
 			case ExpressionsPackage.FEATURE_CALL__ARGS:
 				return ((InternalEList<?>)getArgs()).basicRemove(otherEnd, msgs);
+			case ExpressionsPackage.FEATURE_CALL__ARRAY_SELECTOR:
+				return ((InternalEList<?>)getArraySelector()).basicRemove(otherEnd, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -250,6 +317,10 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 				return isOperationCall();
 			case ExpressionsPackage.FEATURE_CALL__ARGS:
 				return getArgs();
+			case ExpressionsPackage.FEATURE_CALL__ARRAY_SELECTOR:
+				return getArraySelector();
+			case ExpressionsPackage.FEATURE_CALL__ARRAY_ACCESS:
+				return isArrayAccess();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -276,6 +347,13 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 				getArgs().clear();
 				getArgs().addAll((Collection<? extends Expression>)newValue);
 				return;
+			case ExpressionsPackage.FEATURE_CALL__ARRAY_SELECTOR:
+				getArraySelector().clear();
+				getArraySelector().addAll((Collection<? extends Expression>)newValue);
+				return;
+			case ExpressionsPackage.FEATURE_CALL__ARRAY_ACCESS:
+				setArrayAccess((Boolean)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -300,6 +378,12 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 			case ExpressionsPackage.FEATURE_CALL__ARGS:
 				getArgs().clear();
 				return;
+			case ExpressionsPackage.FEATURE_CALL__ARRAY_SELECTOR:
+				getArraySelector().clear();
+				return;
+			case ExpressionsPackage.FEATURE_CALL__ARRAY_ACCESS:
+				setArrayAccess(ARRAY_ACCESS_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -320,6 +404,10 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 				return operationCall != OPERATION_CALL_EDEFAULT;
 			case ExpressionsPackage.FEATURE_CALL__ARGS:
 				return args != null && !args.isEmpty();
+			case ExpressionsPackage.FEATURE_CALL__ARRAY_SELECTOR:
+				return arraySelector != null && !arraySelector.isEmpty();
+			case ExpressionsPackage.FEATURE_CALL__ARRAY_ACCESS:
+				return arrayAccess != ARRAY_ACCESS_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -336,6 +424,8 @@ public class FeatureCallImpl extends ExpressionImpl implements FeatureCall {
 		StringBuffer result = new StringBuffer(super.toString());
 		result.append(" (operationCall: ");
 		result.append(operationCall);
+		result.append(", arrayAccess: ");
+		result.append(arrayAccess);
 		result.append(')');
 		return result.toString();
 	}

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

@@ -14,10 +14,10 @@ import org.yakindu.base.expressions.expressions.FloatLiteral;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.FloatLiteralImpl#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -14,10 +14,10 @@ import org.yakindu.base.expressions.expressions.HexLiteral;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.HexLiteralImpl#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -14,10 +14,10 @@ import org.yakindu.base.expressions.expressions.IntLiteral;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.IntLiteralImpl#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

+ 0 - 2
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/LiteralImpl.java

@@ -11,8 +11,6 @@ import org.yakindu.base.expressions.expressions.Literal;
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Literal</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */

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

@@ -17,11 +17,11 @@ import org.yakindu.base.expressions.expressions.LogicalAndExpression;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.LogicalAndExpressionImpl#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.LogicalAndExpressionImpl#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -17,10 +17,10 @@ import org.yakindu.base.expressions.expressions.LogicalNotExpression;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.LogicalNotExpressionImpl#getOperand <em>Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -17,11 +17,11 @@ import org.yakindu.base.expressions.expressions.LogicalOrExpression;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.LogicalOrExpressionImpl#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.LogicalOrExpressionImpl#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -18,12 +18,12 @@ import org.yakindu.base.expressions.expressions.RelationalOperator;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.LogicalRelationExpressionImpl#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.LogicalRelationExpressionImpl#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.LogicalRelationExpressionImpl#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

+ 0 - 2
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/NullLiteralImpl.java

@@ -10,8 +10,6 @@ import org.yakindu.base.expressions.expressions.NullLiteral;
  * <!-- begin-user-doc -->
  * An implementation of the model object '<em><b>Null Literal</b></em>'.
  * <!-- end-user-doc -->
- * <p>
- * </p>
  *
  * @generated
  */

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

@@ -18,12 +18,12 @@ import org.yakindu.base.expressions.expressions.NumericalAddSubtractExpression;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.NumericalAddSubtractExpressionImpl#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.NumericalAddSubtractExpressionImpl#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.NumericalAddSubtractExpressionImpl#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -18,12 +18,12 @@ import org.yakindu.base.expressions.expressions.NumericalMultiplyDivideExpressio
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.NumericalMultiplyDivideExpressionImpl#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.NumericalMultiplyDivideExpressionImpl#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.NumericalMultiplyDivideExpressionImpl#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -18,11 +18,11 @@ import org.yakindu.base.expressions.expressions.UnaryOperator;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.NumericalUnaryExpressionImpl#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.NumericalUnaryExpressionImpl#getOperand <em>Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -17,10 +17,10 @@ import org.yakindu.base.expressions.expressions.ParenthesizedExpression;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ParenthesizedExpressionImpl#getExpression <em>Expression</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -17,10 +17,10 @@ import org.yakindu.base.expressions.expressions.PrimitiveValueExpression;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.PrimitiveValueExpressionImpl#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -18,12 +18,12 @@ import org.yakindu.base.expressions.expressions.ShiftOperator;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ShiftExpressionImpl#getLeftOperand <em>Left Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ShiftExpressionImpl#getOperator <em>Operator</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.ShiftExpressionImpl#getRightOperand <em>Right Operand</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -14,10 +14,10 @@ import org.yakindu.base.expressions.expressions.StringLiteral;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.StringLiteralImpl#getValue <em>Value</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -18,11 +18,11 @@ import org.yakindu.base.types.Type;
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
+ * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.TypeCastExpressionImpl#getOperand <em>Operand</em>}</li>
  *   <li>{@link org.yakindu.base.expressions.expressions.impl.TypeCastExpressionImpl#getType <em>Type</em>}</li>
  * </ul>
- * </p>
  *
  * @generated
  */

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

@@ -72,7 +72,7 @@ public class ExpressionsSwitch<T> extends Switch<T> {
 	 * Checks whether this is a switch for the given package.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @parameter ePackage the package in question.
+	 * @param ePackage the package in question.
 	 * @return whether this is a switch for the given package.
 	 * @generated
 	 */

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

@@ -155,12 +155,18 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="operationCall" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="args" upperBound="-1" eType="#//Expression"
         containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="arraySelector" upperBound="-1"
+        eType="#//Expression" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="arrayAccess" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ElementReferenceExpression" eSuperTypes="#//Expression">
     <eStructuralFeatures xsi:type="ecore:EReference" name="reference" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="operationCall" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="args" upperBound="-1" eType="#//Expression"
         containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="arraySelector" upperBound="-1"
+        eType="#//Expression" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="arrayAccess" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ParenthesizedExpression" eSuperTypes="#//Expression">
     <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"

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

@@ -87,15 +87,17 @@ PrimitiveValueExpression returns Expression:
 
 FeatureCall returns Expression:
 	ElementReferenceExpression ({FeatureCall.owner=current} '.' feature=[ecore::EObject]
-	(=> operationCall?='('
-	(args+=Expression (',' args+=Expression)*)?
-	')')?)*;
+	(=> operationCall?= '('(args+=Expression (',' args+=Expression)*)?')'
+		|
+	=> (arrayAccess ?= '[' arraySelector+=Expression ']') => ('[' arraySelector+=Expression ']')* 
+	)?)*;
 
 ElementReferenceExpression returns Expression:
 	{ElementReferenceExpression} reference=[ecore::EObject|ID]
-	(=> operationCall?='('
-	(args+=Expression (',' args+=Expression)*)?
-	')')?;
+	(=> operationCall?='('	(args+=Expression (',' args+=Expression)*)?	')' 
+		|
+	=> (arrayAccess ?= '[' arraySelector+=Expression ']') => ('[' arraySelector+=Expression ']')*
+	)?;
 
 ParenthesizedExpression returns Expression:
 	{ParenthesizedExpression} '(' expression=Expression ')';

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

@@ -136,7 +136,6 @@ public class ExpressionsTypeInferrer extends AbstractTypeSystemInferrer implemen
 		assertCompatible(type1, type2, String.format(COMPARSION_OPERATOR, e.getOperator(), type1, type2));
 		Type result = getType(BOOLEAN);
 		return result;
-
 	}
 
 	public Type infer(NumericalAddSubtractExpression e) {
@@ -181,7 +180,7 @@ public class ExpressionsTypeInferrer extends AbstractTypeSystemInferrer implemen
 	}
 
 	public Type infer(Type type) {
-		return type;
+		return type.getOriginType();
 	}
 
 	/**
@@ -245,8 +244,8 @@ public class ExpressionsTypeInferrer extends AbstractTypeSystemInferrer implemen
 	public Type infer(DoubleLiteral literal) {
 		return getType(REAL);
 	}
-	
-	public Type infer(FloatLiteral literal){
+
+	public Type infer(FloatLiteral literal) {
 		return getType(REAL);
 	}
 

+ 10 - 10
plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/validation/ExpressionsJavaValidator.java

@@ -20,7 +20,7 @@ import org.yakindu.base.types.ComplexType;
 import org.yakindu.base.types.ParameterizedType;
 import org.yakindu.base.types.Type;
 import org.yakindu.base.types.TypeParameter;
-import org.yakindu.base.types.TypedElement;
+import org.yakindu.base.types.TypeSpecifier;
 import org.yakindu.base.types.TypesPackage;
 import org.yakindu.base.types.inferrer.ITypeSystemInferrer;
 import org.yakindu.base.types.typesystem.ITypeSystem;
@@ -81,7 +81,7 @@ public class ExpressionsJavaValidator extends org.yakindu.base.expressions.valid
 	}
 
 	@Check
-	public void checkIsRaw(TypedElement typedElement) {
+	public void checkIsRaw(TypeSpecifier typedElement) {
 		Type type = typedElement.getType();
 		if (!(type instanceof ParameterizedType))
 			return;
@@ -89,25 +89,25 @@ public class ExpressionsJavaValidator extends org.yakindu.base.expressions.valid
 		if (typedElement.getTypeArguments().size() == 0 && typeParameter.size() > 0) {
 			String s1 = typedElement.getType().getName();
 			String s2 = s1 + printer.concatTypeParameter(typeParameter);
-			warning(String.format(WARNING_IS_RAW_MSG, s1, s2), typedElement, TypesPackage.Literals.TYPED_ELEMENT__TYPE,
+			warning(String.format(WARNING_IS_RAW_MSG, s1, s2), typedElement, TypesPackage.Literals.TYPE_SPECIFIER__TYPE,
 					WARNING_IS_RAW_CODE);
 		}
 	}
 
 	@Check
-	public void checkTypedElementNotGeneric(TypedElement typedElement) {
+	public void checkTypedElementNotGeneric(TypeSpecifier typedElement) {
 		if (typedElement.getTypeArguments().size() > 0
 				&& ((!(typedElement.getType() instanceof ParameterizedType)) || ((ParameterizedType) typedElement
 						.getType()).getParameter().size() == 0)) {
 			String s1 = typedElement.getType().getName();
 			String s2 = printer.concatTypeArguments(typedElement.getTypeArguments());
 			error(String.format(ERROR_NOT_GENERIC_MSG, s1, s2), typedElement,
-					TypesPackage.Literals.TYPED_ELEMENT__TYPE, ERROR_NOT_GENERIC_CODE);
+					TypesPackage.Literals.TYPE_SPECIFIER__TYPE, ERROR_NOT_GENERIC_CODE);
 		}
 	}
 
 	@Check
-	public void checkNofArguments(TypedElement typedElement) {
+	public void checkNofArguments(TypeSpecifier typedElement) {
 		if (!(typedElement.getType() instanceof ParameterizedType)) {
 			return;
 		}
@@ -118,7 +118,7 @@ public class ExpressionsJavaValidator extends org.yakindu.base.expressions.valid
 			String s1 = type.getName() + printer.concatTypeParameter(typeParameter);
 			String s2 = printer.concatTypeArguments(typedElement.getTypeArguments());
 			error(String.format(ERROR_ARGUMENTED_SPECIFIER_INCORRECT_ARGUMENT_NR_MSG, s1, s2), typedElement,
-					TypesPackage.Literals.TYPED_ELEMENT__TYPE, ERROR_ARGUMENTED_SPECIFIER_INCORRECT_ARGUMENT_NR_CODE);
+					TypesPackage.Literals.TYPE_SPECIFIER__TYPE, ERROR_ARGUMENTED_SPECIFIER_INCORRECT_ARGUMENT_NR_CODE);
 		}
 	}
 
@@ -137,7 +137,7 @@ public class ExpressionsJavaValidator extends org.yakindu.base.expressions.valid
 	}
 
 	@Check
-	public void checkTypeParameterBounds(TypedElement typedElement) {
+	public void checkTypeParameterBounds(TypeSpecifier typedElement) {
 		if (!(typedElement.getType() instanceof ParameterizedType)) {
 			return;
 		}
@@ -149,11 +149,11 @@ public class ExpressionsJavaValidator extends org.yakindu.base.expressions.valid
 		for (int i = 0; i < typeParameter.size(); i++) {
 			TypeParameter parameter = typeParameter.get(i);
 			if (parameter.getBound() != null) {
-				Type argument = typedElement.getTypeArguments().get(i);
+				Type argument = typedElement.getTypeArguments().get(i).getType();
 				if (!typeSystem.isSuperType(argument, parameter.getBound())) {
 					error(String.format(ERROR_BOUND_MISSMATCH_MSG, argument.getName(),
 							(parameter.getBound()).getName(), type.getName()), typedElement,
-							TypesPackage.Literals.TYPED_ELEMENT__TYPE_ARGUMENTS, i, ERROR_BOUND_MISSMATCH_CODE);
+							TypesPackage.Literals.TYPE_SPECIFIER__TYPE_ARGUMENTS, i, ERROR_BOUND_MISSMATCH_CODE);
 				}
 			}
 		}

+ 4 - 2
plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/validation/GenericsPrettyPrinter.xtend

@@ -13,6 +13,7 @@ package org.yakindu.base.expressions.validation
 import java.util.List
 import org.yakindu.base.types.Type
 import org.yakindu.base.types.TypeParameter
+import org.yakindu.base.types.TypeSpecifier
 
 class GenericsPrettyPrinter {
 
@@ -20,7 +21,8 @@ class GenericsPrettyPrinter {
 		return '''<«FOR param : parameter SEPARATOR ', '»«param.name»«IF param.bound != null» extends «(param.bound as Type).name»«ENDIF»«ENDFOR»>'''.toString
 	}
 
-	def concatTypeArguments(List<Type> parameter) {
-		return '''<«FOR param : parameter SEPARATOR ', '»«param.name»«ENDFOR»>'''.toString
+	def concatTypeArguments(List<TypeSpecifier> parameter) {
+		// TODO: type arguments can have multiple hierarches Type1<Type2<T>>
+		return '''<«FOR param : parameter SEPARATOR ', '»«param.type.name»«ENDFOR»>'''.toString
 	}
 }

BIN
plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateTypeSpecifier_typeArguments_ArrayTypeSpecifier.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateTypeSpecifier_typeArguments_TypeSpecifier.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/obj16/ArrayTypeSpecifier.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/obj16/TypeSpecifier.gif


+ 14 - 0
plugins/org.yakindu.base.types.edit/plugin.properties

@@ -194,3 +194,17 @@ _UI_Direction_IN_literal = in
 _UI_Direction_OUT_literal = out
 _UI_DomainElement_type = Domain Element
 _UI_DomainElement_domainID_feature = Domain ID
+_UI_TypeSpecifier_type = Type Specifier
+_UI_Annotation_type = Annotation
+_UI_AnnotatableElement_type = Annotatable Element
+_UI_Package_import_feature = Import
+_UI_Type_visible_feature = Visible
+_UI_TypedElement_typeSpecifier_feature = Type Specifier
+_UI_TypeSpecifier_type_feature = Type
+_UI_TypeSpecifier_typeArguments_feature = Type Arguments
+_UI_PackageMember_id_feature = Id
+_UI_Annotation_properties_feature = Properties
+_UI_Annotation_targets_feature = Targets
+_UI_AnnotatableElement_annotations_feature = Annotations
+_UI_ArrayTypeSpecifier_type = Array Type Specifier
+_UI_ArrayTypeSpecifier_size_feature = Size

+ 24 - 0
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/AnnotationItemProvider.java

@@ -9,6 +9,7 @@ import java.util.List;
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ViewerNotification;
 import org.yakindu.base.types.Annotation;
@@ -43,10 +44,33 @@ public class AnnotationItemProvider extends PackageMemberItemProvider {
 		if (itemPropertyDescriptors == null) {
 			super.getPropertyDescriptors(object);
 
+			addTargetsPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
 
+	/**
+	 * This adds a property descriptor for the Targets feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTargetsPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Annotation_targets_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Annotation_targets_feature", "_UI_Annotation_type"),
+				 TypesPackage.Literals.ANNOTATION__TARGETS,
+				 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

+ 130 - 0
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/ArrayTypeSpecifierItemProvider.java

@@ -0,0 +1,130 @@
+/**
+ */
+package org.yakindu.base.types.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.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.yakindu.base.types.ArrayTypeSpecifier;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.yakindu.base.types.ArrayTypeSpecifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ArrayTypeSpecifierItemProvider extends TypeSpecifierItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArrayTypeSpecifierItemProvider(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);
+
+			addSizePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Size feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSizePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ArrayTypeSpecifier_size_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_ArrayTypeSpecifier_size_feature", "_UI_ArrayTypeSpecifier_type"),
+				 TypesPackage.Literals.ARRAY_TYPE_SPECIFIER__SIZE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns ArrayTypeSpecifier.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/ArrayTypeSpecifier"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		ArrayTypeSpecifier arrayTypeSpecifier = (ArrayTypeSpecifier)object;
+		return getString("_UI_ArrayTypeSpecifier_type") + " " + arrayTypeSpecifier.getSize();
+	}
+	
+
+	/**
+	 * 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(ArrayTypeSpecifier.class)) {
+			case TypesPackage.ARRAY_TYPE_SPECIFIER__SIZE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				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);
+	}
+
+}

+ 45 - 23
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/DeclarationItemProvider.java

@@ -16,6 +16,7 @@ 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;
@@ -28,6 +29,7 @@ import org.eclipse.emf.edit.provider.ItemProviderAdapter;
 import org.eclipse.emf.edit.provider.ViewerNotification;
 import org.yakindu.base.base.BasePackage;
 import org.yakindu.base.types.Declaration;
+import org.yakindu.base.types.TypesFactory;
 import org.yakindu.base.types.TypesPackage;
 
 /**
@@ -60,7 +62,6 @@ public class DeclarationItemProvider extends ItemProviderAdapter implements IEdi
 			super.getPropertyDescriptors(object);
 
 			addTypePropertyDescriptor(object);
-			addTypeArgumentsPropertyDescriptor(object);
 			addNamePropertyDescriptor(object);
 			addAnnotationsPropertyDescriptor(object);
 			addIdPropertyDescriptor(object);
@@ -90,28 +91,6 @@ public class DeclarationItemProvider extends ItemProviderAdapter implements IEdi
 				 null));
 	}
 
-	/**
-	 * This adds a property descriptor for the Type Arguments feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
-	 * 
-	 * @generated
-	 */
-	protected void addTypeArgumentsPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_TypedElement_typeArguments_feature"),
-				 getString("_UI_PropertyDescriptor_description", "_UI_TypedElement_typeArguments_feature", "_UI_TypedElement_type"),
-				 TypesPackage.Literals.TYPED_ELEMENT__TYPE_ARGUMENTS,
-				 true,
-				 false,
-				 true,
-				 null,
-				 null,
-				 null));
-	}
-
 	/**
 	 * This adds a property descriptor for the Name feature.
 	 * <!-- begin-user-doc
@@ -178,6 +157,36 @@ public class DeclarationItemProvider extends ItemProviderAdapter implements IEdi
 				 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(TypesPackage.Literals.TYPED_ELEMENT__TYPE_SPECIFIER);
+		}
+		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 the label text for the adapted class. <!-- begin-user-doc
 	 * --> <!-- end-user-doc -->
@@ -206,6 +215,9 @@ public class DeclarationItemProvider extends ItemProviderAdapter implements IEdi
 			case TypesPackage.DECLARATION__ID:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
+			case TypesPackage.DECLARATION__TYPE_SPECIFIER:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
 		}
 		super.notifyChanged(notification);
 	}
@@ -220,6 +232,16 @@ public class DeclarationItemProvider extends ItemProviderAdapter implements IEdi
 	@Override
 	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
 		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(TypesPackage.Literals.TYPED_ELEMENT__TYPE_SPECIFIER,
+				 TypesFactory.eINSTANCE.createTypeSpecifier()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(TypesPackage.Literals.TYPED_ELEMENT__TYPE_SPECIFIER,
+				 TypesFactory.eINSTANCE.createArrayTypeSpecifier()));
 	}
 
 	/**

+ 45 - 23
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/ParameterItemProvider.java

@@ -17,6 +17,7 @@ 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;
@@ -29,6 +30,7 @@ import org.eclipse.emf.edit.provider.ItemProviderAdapter;
 import org.eclipse.emf.edit.provider.ViewerNotification;
 import org.yakindu.base.base.BasePackage;
 import org.yakindu.base.types.Parameter;
+import org.yakindu.base.types.TypesFactory;
 import org.yakindu.base.types.TypesPackage;
 
 /**
@@ -67,7 +69,6 @@ public class ParameterItemProvider
 			super.getPropertyDescriptors(object);
 
 			addTypePropertyDescriptor(object);
-			addTypeArgumentsPropertyDescriptor(object);
 			addNamePropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
@@ -95,28 +96,6 @@ public class ParameterItemProvider
 				 null));
 	}
 
-	/**
-	 * This adds a property descriptor for the Type Arguments feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addTypeArgumentsPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_TypedElement_typeArguments_feature"),
-				 getString("_UI_PropertyDescriptor_description", "_UI_TypedElement_typeArguments_feature", "_UI_TypedElement_type"),
-				 TypesPackage.Literals.TYPED_ELEMENT__TYPE_ARGUMENTS,
-				 true,
-				 false,
-				 true,
-				 null,
-				 null,
-				 null));
-	}
-
 	/**
 	 * This adds a property descriptor for the Name feature.
 	 * <!-- begin-user-doc -->
@@ -139,6 +118,36 @@ public class ParameterItemProvider
 				 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(TypesPackage.Literals.TYPED_ELEMENT__TYPE_SPECIFIER);
+		}
+		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 Parameter.gif.
 	 * <!-- begin-user-doc -->
@@ -179,6 +188,9 @@ public class ParameterItemProvider
 			case TypesPackage.PARAMETER__NAME:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
+			case TypesPackage.PARAMETER__TYPE_SPECIFIER:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
 		}
 		super.notifyChanged(notification);
 	}
@@ -193,6 +205,16 @@ public class ParameterItemProvider
 	@Override
 	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
 		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(TypesPackage.Literals.TYPED_ELEMENT__TYPE_SPECIFIER,
+				 TypesFactory.eINSTANCE.createTypeSpecifier()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(TypesPackage.Literals.TYPED_ELEMENT__TYPE_SPECIFIER,
+				 TypesFactory.eINSTANCE.createArrayTypeSpecifier()));
 	}
 
 	/**

+ 12 - 23
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/TypeAliasItemProvider.java

@@ -69,7 +69,6 @@ public class TypeAliasItemProvider
 			super.getPropertyDescriptors(object);
 
 			addTypePropertyDescriptor(object);
-			addTypeArgumentsPropertyDescriptor(object);
 			addNamePropertyDescriptor(object);
 			addAnnotationsPropertyDescriptor(object);
 			addIdPropertyDescriptor(object);
@@ -101,28 +100,6 @@ public class TypeAliasItemProvider
 				 null));
 	}
 
-	/**
-	 * This adds a property descriptor for the Type Arguments feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addTypeArgumentsPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_TypedElement_typeArguments_feature"),
-				 getString("_UI_PropertyDescriptor_description", "_UI_TypedElement_typeArguments_feature", "_UI_TypedElement_type"),
-				 TypesPackage.Literals.TYPED_ELEMENT__TYPE_ARGUMENTS,
-				 true,
-				 false,
-				 true,
-				 null,
-				 null,
-				 null));
-	}
-
 	/**
 	 * This adds a property descriptor for the Name feature.
 	 * <!-- begin-user-doc -->
@@ -245,6 +222,7 @@ public class TypeAliasItemProvider
 	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
 		if (childrenFeatures == null) {
 			super.getChildrenFeatures(object);
+			childrenFeatures.add(TypesPackage.Literals.TYPED_ELEMENT__TYPE_SPECIFIER);
 			childrenFeatures.add(TypesPackage.Literals.TYPE__CONSTRAINT);
 		}
 		return childrenFeatures;
@@ -319,6 +297,7 @@ public class TypeAliasItemProvider
 			case TypesPackage.TYPE_ALIAS__VISIBLE:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
+			case TypesPackage.TYPE_ALIAS__TYPE_SPECIFIER:
 			case TypesPackage.TYPE_ALIAS__CONSTRAINT:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
 				return;
@@ -337,6 +316,16 @@ public class TypeAliasItemProvider
 	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
 		super.collectNewChildDescriptors(newChildDescriptors, object);
 
+		newChildDescriptors.add
+			(createChildParameter
+				(TypesPackage.Literals.TYPED_ELEMENT__TYPE_SPECIFIER,
+				 TypesFactory.eINSTANCE.createTypeSpecifier()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(TypesPackage.Literals.TYPED_ELEMENT__TYPE_SPECIFIER,
+				 TypesFactory.eINSTANCE.createArrayTypeSpecifier()));
+
 		newChildDescriptors.add
 			(createChildParameter
 				(TypesPackage.Literals.TYPE__CONSTRAINT,

+ 197 - 0
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/TypeSpecifierItemProvider.java

@@ -0,0 +1,197 @@
+/**
+ */
+package org.yakindu.base.types.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.types.TypeSpecifier;
+import org.yakindu.base.types.TypesFactory;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.yakindu.base.types.TypeSpecifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TypeSpecifierItemProvider 
+	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 TypeSpecifierItemProvider(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);
+
+			addTypePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Type feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTypePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TypeSpecifier_type_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_TypeSpecifier_type_feature", "_UI_TypeSpecifier_type"),
+				 TypesPackage.Literals.TYPE_SPECIFIER__TYPE,
+				 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(TypesPackage.Literals.TYPE_SPECIFIER__TYPE_ARGUMENTS);
+		}
+		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 TypeSpecifier.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TypeSpecifier"));
+	}
+
+	/**
+	 * 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_TypeSpecifier_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(TypeSpecifier.class)) {
+			case TypesPackage.TYPE_SPECIFIER__TYPE_ARGUMENTS:
+				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
+				(TypesPackage.Literals.TYPE_SPECIFIER__TYPE_ARGUMENTS,
+				 TypesFactory.eINSTANCE.createTypeSpecifier()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(TypesPackage.Literals.TYPE_SPECIFIER__TYPE_ARGUMENTS,
+				 TypesFactory.eINSTANCE.createArrayTypeSpecifier()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TypesEditPlugin.INSTANCE;
+	}
+
+}

+ 48 - 0
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/TypesItemProviderAdapterFactory.java

@@ -192,6 +192,29 @@ public class TypesItemProviderAdapterFactory extends TypesAdapterFactory impleme
 		return parameterItemProvider;
 	}
 
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.TypeSpecifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TypeSpecifierItemProvider typeSpecifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.base.types.TypeSpecifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTypeSpecifierAdapter() {
+		if (typeSpecifierItemProvider == null) {
+			typeSpecifierItemProvider = new TypeSpecifierItemProvider(this);
+		}
+
+		return typeSpecifierItemProvider;
+	}
+
 	/**
 	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.Event} instances.
 	 * <!-- begin-user-doc -->
@@ -514,6 +537,29 @@ public class TypesItemProviderAdapterFactory extends TypesAdapterFactory impleme
 		return annotatableElementItemProvider;
 	}
 
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.ArrayTypeSpecifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArrayTypeSpecifierItemProvider arrayTypeSpecifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.base.types.ArrayTypeSpecifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createArrayTypeSpecifierAdapter() {
+		if (arrayTypeSpecifierItemProvider == null) {
+			arrayTypeSpecifierItemProvider = new ArrayTypeSpecifierItemProvider(this);
+		}
+
+		return arrayTypeSpecifierItemProvider;
+	}
+
 	/**
 	 * This returns the root adapter factory that contains this factory.
 	 * <!-- begin-user-doc -->
@@ -618,6 +664,7 @@ public class TypesItemProviderAdapterFactory extends TypesAdapterFactory impleme
 		if (operationItemProvider != null) operationItemProvider.dispose();
 		if (propertyItemProvider != null) propertyItemProvider.dispose();
 		if (parameterItemProvider != null) parameterItemProvider.dispose();
+		if (typeSpecifierItemProvider != null) typeSpecifierItemProvider.dispose();
 		if (eventItemProvider != null) eventItemProvider.dispose();
 		if (enumerationTypeItemProvider != null) enumerationTypeItemProvider.dispose();
 		if (primitiveTypeItemProvider != null) primitiveTypeItemProvider.dispose();
@@ -632,6 +679,7 @@ public class TypesItemProviderAdapterFactory extends TypesAdapterFactory impleme
 		if (typeAliasItemProvider != null) typeAliasItemProvider.dispose();
 		if (annotationItemProvider != null) annotationItemProvider.dispose();
 		if (annotatableElementItemProvider != null) annotatableElementItemProvider.dispose();
+		if (arrayTypeSpecifierItemProvider != null) arrayTypeSpecifierItemProvider.dispose();
 	}
 
 }

+ 1 - 0
plugins/org.yakindu.base.types/META-INF/MANIFEST.MF

@@ -11,6 +11,7 @@ Export-Package: org.yakindu.base.base,
  org.yakindu.base.base.impl,
  org.yakindu.base.base.util,
  org.yakindu.base.types,
+ org.yakindu.base.types.annotations,
  org.yakindu.base.types.impl,
  org.yakindu.base.types.inferrer,
  org.yakindu.base.types.interpreter,

+ 10 - 1
plugins/org.yakindu.base.types/model/types.ecore

@@ -32,9 +32,15 @@
         eOpposite="#//Operation/parameters"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="TypedElement" abstract="true" interface="true">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type" changeable="false"
+        volatile="true" transient="true" derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typeSpecifier" eType="#//TypeSpecifier"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TypeSpecifier">
     <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="typeArguments" upperBound="-1"
-        eType="#//Type"/>
+        eType="#//TypeSpecifier" containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Event" eSuperTypes="#//Declaration">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="direction" eType="#//Direction"/>
@@ -96,4 +102,7 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="annotations" upperBound="-1"
         eType="#//Annotation"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ArrayTypeSpecifier" eSuperTypes="#//TypeSpecifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="size" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+  </eClassifiers>
 </ecore:EPackage>

+ 49 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/ArrayTypeSpecifier.java

@@ -0,0 +1,49 @@
+/**
+ */
+package org.yakindu.base.types;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Array Type Specifier</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.ArrayTypeSpecifier#getSize <em>Size</em>}</li>
+ * </ul>
+ *
+ * @see org.yakindu.base.types.TypesPackage#getArrayTypeSpecifier()
+ * @model
+ * @generated
+ */
+public interface ArrayTypeSpecifier extends TypeSpecifier {
+	/**
+	 * Returns the value of the '<em><b>Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Size</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Size</em>' attribute.
+	 * @see #setSize(int)
+	 * @see org.yakindu.base.types.TypesPackage#getArrayTypeSpecifier_Size()
+	 * @model
+	 * @generated
+	 */
+	int getSize();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.base.types.ArrayTypeSpecifier#getSize <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Size</em>' attribute.
+	 * @see #getSize()
+	 * @generated
+	 */
+	void setSize(int value);
+
+} // ArrayTypeSpecifier

+ 69 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypeSpecifier.java

@@ -0,0 +1,69 @@
+/**
+ */
+package org.yakindu.base.types;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Type Specifier</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.TypeSpecifier#getType <em>Type</em>}</li>
+ *   <li>{@link org.yakindu.base.types.TypeSpecifier#getTypeArguments <em>Type Arguments</em>}</li>
+ * </ul>
+ *
+ * @see org.yakindu.base.types.TypesPackage#getTypeSpecifier()
+ * @model
+ * @generated
+ */
+public interface TypeSpecifier extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Type</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Type</em>' reference.
+	 * @see #setType(Type)
+	 * @see org.yakindu.base.types.TypesPackage#getTypeSpecifier_Type()
+	 * @model
+	 * @generated
+	 */
+	Type getType();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.base.types.TypeSpecifier#getType <em>Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Type</em>' reference.
+	 * @see #getType()
+	 * @generated
+	 */
+	void setType(Type value);
+
+	/**
+	 * Returns the value of the '<em><b>Type Arguments</b></em>' containment reference list.
+	 * The list contents are of type {@link org.yakindu.base.types.TypeSpecifier}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Type Arguments</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Type Arguments</em>' containment reference list.
+	 * @see org.yakindu.base.types.TypesPackage#getTypeSpecifier_TypeArguments()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<TypeSpecifier> getTypeArguments();
+
+} // TypeSpecifier

+ 16 - 18
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypedElement.java

@@ -6,7 +6,6 @@
  */
 package org.yakindu.base.types;
 
-import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EObject;
 
 /**
@@ -19,7 +18,7 @@ import org.eclipse.emf.ecore.EObject;
  * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.types.TypedElement#getType <em>Type</em>}</li>
- *   <li>{@link org.yakindu.base.types.TypedElement#getTypeArguments <em>Type Arguments</em>}</li>
+ *   <li>{@link org.yakindu.base.types.TypedElement#getTypeSpecifier <em>Type Specifier</em>}</li>
  * </ul>
  *
  * @see org.yakindu.base.types.TypesPackage#getTypedElement()
@@ -36,37 +35,36 @@ public interface TypedElement extends EObject {
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Type</em>' reference.
-	 * @see #setType(Type)
 	 * @see org.yakindu.base.types.TypesPackage#getTypedElement_Type()
-	 * @model
+	 * @model transient="true" changeable="false" volatile="true" derived="true"
 	 * @generated
 	 */
 	Type getType();
 
 	/**
-	 * Sets the value of the '{@link org.yakindu.base.types.TypedElement#getType <em>Type</em>}' reference.
+	 * Returns the value of the '<em><b>Type Specifier</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Type Specifier</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Type</em>' reference.
-	 * @see #getType()
+	 * @return the value of the '<em>Type Specifier</em>' containment reference.
+	 * @see #setTypeSpecifier(TypeSpecifier)
+	 * @see org.yakindu.base.types.TypesPackage#getTypedElement_TypeSpecifier()
+	 * @model containment="true"
 	 * @generated
 	 */
-	void setType(Type value);
+	TypeSpecifier getTypeSpecifier();
 
 	/**
-	 * Returns the value of the '<em><b>Type Arguments</b></em>' reference list.
-	 * The list contents are of type {@link org.yakindu.base.types.Type}.
+	 * Sets the value of the '{@link org.yakindu.base.types.TypedElement#getTypeSpecifier <em>Type Specifier</em>}' containment reference.
 	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Type Arguments</em>' reference list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Type Arguments</em>' reference list.
-	 * @see org.yakindu.base.types.TypesPackage#getTypedElement_TypeArguments()
-	 * @model
+	 * @param value the new value of the '<em>Type Specifier</em>' containment reference.
+	 * @see #getTypeSpecifier()
 	 * @generated
 	 */
-	EList<Type> getTypeArguments();
+	void setTypeSpecifier(TypeSpecifier value);
 
 } // TypedElement

+ 18 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypesFactory.java

@@ -70,6 +70,15 @@ public interface TypesFactory extends EFactory {
 	 */
 	Parameter createParameter();
 
+	/**
+	 * Returns a new object of class '<em>Type Specifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Type Specifier</em>'.
+	 * @generated
+	 */
+	TypeSpecifier createTypeSpecifier();
+
 	/**
 	 * Returns a new object of class '<em>Event</em>'.
 	 * <!-- begin-user-doc -->
@@ -196,6 +205,15 @@ public interface TypesFactory extends EFactory {
 	 */
 	AnnotatableElement createAnnotatableElement();
 
+	/**
+	 * Returns a new object of class '<em>Array Type Specifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Array Type Specifier</em>'.
+	 * @generated
+	 */
+	ArrayTypeSpecifier createArrayTypeSpecifier();
+
 	/**
 	 * Returns the package supported by this factory.
 	 * <!-- begin-user-doc -->

+ 217 - 37
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypesPackage.java

@@ -124,7 +124,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getPackageMember()
 	 * @generated
 	 */
-	int PACKAGE_MEMBER = 15;
+	int PACKAGE_MEMBER = 16;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -285,13 +285,13 @@ public interface TypesPackage extends EPackage {
 	int TYPED_ELEMENT__TYPE = 0;
 
 	/**
-	 * The feature id for the '<em><b>Type Arguments</b></em>' reference list.
+	 * The feature id for the '<em><b>Type Specifier</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int TYPED_ELEMENT__TYPE_ARGUMENTS = 1;
+	int TYPED_ELEMENT__TYPE_SPECIFIER = 1;
 
 	/**
 	 * The number of structural features of the '<em>Typed Element</em>' class.
@@ -322,13 +322,13 @@ public interface TypesPackage extends EPackage {
 	int DECLARATION__TYPE = TYPED_ELEMENT__TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Type Arguments</b></em>' reference list.
+	 * The feature id for the '<em><b>Type Specifier</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int DECLARATION__TYPE_ARGUMENTS = TYPED_ELEMENT__TYPE_ARGUMENTS;
+	int DECLARATION__TYPE_SPECIFIER = TYPED_ELEMENT__TYPE_SPECIFIER;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -376,13 +376,13 @@ public interface TypesPackage extends EPackage {
 	int OPERATION__TYPE = DECLARATION__TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Type Arguments</b></em>' reference list.
+	 * The feature id for the '<em><b>Type Specifier</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int OPERATION__TYPE_ARGUMENTS = DECLARATION__TYPE_ARGUMENTS;
+	int OPERATION__TYPE_SPECIFIER = DECLARATION__TYPE_SPECIFIER;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -439,13 +439,13 @@ public interface TypesPackage extends EPackage {
 	int PROPERTY__TYPE = DECLARATION__TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Type Arguments</b></em>' reference list.
+	 * The feature id for the '<em><b>Type Specifier</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int PROPERTY__TYPE_ARGUMENTS = DECLARATION__TYPE_ARGUMENTS;
+	int PROPERTY__TYPE_SPECIFIER = DECLARATION__TYPE_SPECIFIER;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -520,13 +520,13 @@ public interface TypesPackage extends EPackage {
 	int PARAMETER__TYPE = TYPED_ELEMENT__TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Type Arguments</b></em>' reference list.
+	 * The feature id for the '<em><b>Type Specifier</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int PARAMETER__TYPE_ARGUMENTS = TYPED_ELEMENT__TYPE_ARGUMENTS;
+	int PARAMETER__TYPE_SPECIFIER = TYPED_ELEMENT__TYPE_SPECIFIER;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -556,6 +556,43 @@ public interface TypesPackage extends EPackage {
 	int PARAMETER_FEATURE_COUNT = TYPED_ELEMENT_FEATURE_COUNT + 2;
 
 
+	/**
+	 * The meta object id for the '{@link org.yakindu.base.types.impl.TypeSpecifierImpl <em>Type Specifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.base.types.impl.TypeSpecifierImpl
+	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getTypeSpecifier()
+	 * @generated
+	 */
+	int TYPE_SPECIFIER = 7;
+
+	/**
+	 * The feature id for the '<em><b>Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TYPE_SPECIFIER__TYPE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Type Arguments</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TYPE_SPECIFIER__TYPE_ARGUMENTS = 1;
+
+	/**
+	 * The number of structural features of the '<em>Type Specifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TYPE_SPECIFIER_FEATURE_COUNT = 2;
+
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.types.impl.EventImpl <em>Event</em>}' class.
 	 * <!-- begin-user-doc -->
@@ -564,7 +601,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getEvent()
 	 * @generated
 	 */
-	int EVENT = 7;
+	int EVENT = 8;
 
 	/**
 	 * The feature id for the '<em><b>Type</b></em>' reference.
@@ -576,13 +613,13 @@ public interface TypesPackage extends EPackage {
 	int EVENT__TYPE = DECLARATION__TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Type Arguments</b></em>' reference list.
+	 * The feature id for the '<em><b>Type Specifier</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int EVENT__TYPE_ARGUMENTS = DECLARATION__TYPE_ARGUMENTS;
+	int EVENT__TYPE_SPECIFIER = DECLARATION__TYPE_SPECIFIER;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -638,7 +675,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getEnumerationType()
 	 * @generated
 	 */
-	int ENUMERATION_TYPE = 8;
+	int ENUMERATION_TYPE = 9;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.types.impl.PrimitiveTypeImpl <em>Primitive Type</em>}' class.
@@ -648,7 +685,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getPrimitiveType()
 	 * @generated
 	 */
-	int PRIMITIVE_TYPE = 9;
+	int PRIMITIVE_TYPE = 10;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -811,7 +848,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getParameterizedType()
 	 * @generated
 	 */
-	int PARAMETERIZED_TYPE = 14;
+	int PARAMETERIZED_TYPE = 15;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -893,7 +930,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getComplexType()
 	 * @generated
 	 */
-	int COMPLEX_TYPE = 10;
+	int COMPLEX_TYPE = 11;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -993,7 +1030,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getEnumerator()
 	 * @generated
 	 */
-	int ENUMERATOR = 11;
+	int ENUMERATOR = 12;
 
 	/**
 	 * The feature id for the '<em><b>Type</b></em>' reference.
@@ -1005,13 +1042,13 @@ public interface TypesPackage extends EPackage {
 	int ENUMERATOR__TYPE = DECLARATION__TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Type Arguments</b></em>' reference list.
+	 * The feature id for the '<em><b>Type Specifier</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int ENUMERATOR__TYPE_ARGUMENTS = DECLARATION__TYPE_ARGUMENTS;
+	int ENUMERATOR__TYPE_SPECIFIER = DECLARATION__TYPE_SPECIFIER;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -1076,7 +1113,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getTypeConstraint()
 	 * @generated
 	 */
-	int TYPE_CONSTRAINT = 12;
+	int TYPE_CONSTRAINT = 13;
 
 	/**
 	 * The feature id for the '<em><b>Value</b></em>' attribute.
@@ -1104,7 +1141,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getTypeParameter()
 	 * @generated
 	 */
-	int TYPE_PARAMETER = 13;
+	int TYPE_PARAMETER = 14;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -1186,7 +1223,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getRangeConstraint()
 	 * @generated
 	 */
-	int RANGE_CONSTRAINT = 16;
+	int RANGE_CONSTRAINT = 17;
 
 	/**
 	 * The feature id for the '<em><b>Value</b></em>' attribute.
@@ -1232,7 +1269,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getDomain()
 	 * @generated
 	 */
-	int DOMAIN = 17;
+	int DOMAIN = 18;
 
 	/**
 	 * The feature id for the '<em><b>Domain ID</b></em>' attribute.
@@ -1260,7 +1297,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getTypeAlias()
 	 * @generated
 	 */
-	int TYPE_ALIAS = 18;
+	int TYPE_ALIAS = 19;
 
 	/**
 	 * The feature id for the '<em><b>Type</b></em>' reference.
@@ -1272,13 +1309,13 @@ public interface TypesPackage extends EPackage {
 	int TYPE_ALIAS__TYPE = TYPED_ELEMENT__TYPE;
 
 	/**
-	 * The feature id for the '<em><b>Type Arguments</b></em>' reference list.
+	 * The feature id for the '<em><b>Type Specifier</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int TYPE_ALIAS__TYPE_ARGUMENTS = TYPED_ELEMENT__TYPE_ARGUMENTS;
+	int TYPE_ALIAS__TYPE_SPECIFIER = TYPED_ELEMENT__TYPE_SPECIFIER;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -1351,7 +1388,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getAnnotation()
 	 * @generated
 	 */
-	int ANNOTATION = 19;
+	int ANNOTATION = 20;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -1415,7 +1452,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getAnnotatableElement()
 	 * @generated
 	 */
-	int ANNOTATABLE_ELEMENT = 20;
+	int ANNOTATABLE_ELEMENT = 21;
 
 	/**
 	 * The feature id for the '<em><b>Annotations</b></em>' reference list.
@@ -1435,6 +1472,52 @@ public interface TypesPackage extends EPackage {
 	 */
 	int ANNOTATABLE_ELEMENT_FEATURE_COUNT = 1;
 
+	/**
+	 * The meta object id for the '{@link org.yakindu.base.types.impl.ArrayTypeSpecifierImpl <em>Array Type Specifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.base.types.impl.ArrayTypeSpecifierImpl
+	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getArrayTypeSpecifier()
+	 * @generated
+	 */
+	int ARRAY_TYPE_SPECIFIER = 22;
+
+	/**
+	 * The feature id for the '<em><b>Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_TYPE_SPECIFIER__TYPE = TYPE_SPECIFIER__TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Type Arguments</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_TYPE_SPECIFIER__TYPE_ARGUMENTS = TYPE_SPECIFIER__TYPE_ARGUMENTS;
+
+	/**
+	 * The feature id for the '<em><b>Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_TYPE_SPECIFIER__SIZE = TYPE_SPECIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Array Type Specifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARRAY_TYPE_SPECIFIER_FEATURE_COUNT = TYPE_SPECIFIER_FEATURE_COUNT + 1;
+
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.types.Direction <em>Direction</em>}' enum.
 	 * <!-- begin-user-doc -->
@@ -1443,7 +1526,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getDirection()
 	 * @generated
 	 */
-	int DIRECTION = 21;
+	int DIRECTION = 23;
 
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.base.types.Package <em>Package</em>}'.
@@ -1648,15 +1731,47 @@ public interface TypesPackage extends EPackage {
 	EReference getTypedElement_Type();
 
 	/**
-	 * Returns the meta object for the reference list '{@link org.yakindu.base.types.TypedElement#getTypeArguments <em>Type Arguments</em>}'.
+	 * Returns the meta object for the containment reference '{@link org.yakindu.base.types.TypedElement#getTypeSpecifier <em>Type Specifier</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the reference list '<em>Type Arguments</em>'.
-	 * @see org.yakindu.base.types.TypedElement#getTypeArguments()
+	 * @return the meta object for the containment reference '<em>Type Specifier</em>'.
+	 * @see org.yakindu.base.types.TypedElement#getTypeSpecifier()
 	 * @see #getTypedElement()
 	 * @generated
 	 */
-	EReference getTypedElement_TypeArguments();
+	EReference getTypedElement_TypeSpecifier();
+
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.base.types.TypeSpecifier <em>Type Specifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Type Specifier</em>'.
+	 * @see org.yakindu.base.types.TypeSpecifier
+	 * @generated
+	 */
+	EClass getTypeSpecifier();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.yakindu.base.types.TypeSpecifier#getType <em>Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Type</em>'.
+	 * @see org.yakindu.base.types.TypeSpecifier#getType()
+	 * @see #getTypeSpecifier()
+	 * @generated
+	 */
+	EReference getTypeSpecifier_Type();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.types.TypeSpecifier#getTypeArguments <em>Type Arguments</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Type Arguments</em>'.
+	 * @see org.yakindu.base.types.TypeSpecifier#getTypeArguments()
+	 * @see #getTypeSpecifier()
+	 * @generated
+	 */
+	EReference getTypeSpecifier_TypeArguments();
 
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.base.types.Event <em>Event</em>}'.
@@ -1985,6 +2100,27 @@ public interface TypesPackage extends EPackage {
 	 */
 	EReference getAnnotatableElement_Annotations();
 
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.base.types.ArrayTypeSpecifier <em>Array Type Specifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Array Type Specifier</em>'.
+	 * @see org.yakindu.base.types.ArrayTypeSpecifier
+	 * @generated
+	 */
+	EClass getArrayTypeSpecifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.yakindu.base.types.ArrayTypeSpecifier#getSize <em>Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Size</em>'.
+	 * @see org.yakindu.base.types.ArrayTypeSpecifier#getSize()
+	 * @see #getArrayTypeSpecifier()
+	 * @generated
+	 */
+	EAttribute getArrayTypeSpecifier_Size();
+
 	/**
 	 * Returns the meta object for enum '{@link org.yakindu.base.types.Direction <em>Direction</em>}'.
 	 * <!-- begin-user-doc -->
@@ -2184,12 +2320,38 @@ public interface TypesPackage extends EPackage {
 		EReference TYPED_ELEMENT__TYPE = eINSTANCE.getTypedElement_Type();
 
 		/**
-		 * The meta object literal for the '<em><b>Type Arguments</b></em>' reference list feature.
+		 * The meta object literal for the '<em><b>Type Specifier</b></em>' containment reference feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EReference TYPED_ELEMENT__TYPE_ARGUMENTS = eINSTANCE.getTypedElement_TypeArguments();
+		EReference TYPED_ELEMENT__TYPE_SPECIFIER = eINSTANCE.getTypedElement_TypeSpecifier();
+
+		/**
+		 * The meta object literal for the '{@link org.yakindu.base.types.impl.TypeSpecifierImpl <em>Type Specifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.base.types.impl.TypeSpecifierImpl
+		 * @see org.yakindu.base.types.impl.TypesPackageImpl#getTypeSpecifier()
+		 * @generated
+		 */
+		EClass TYPE_SPECIFIER = eINSTANCE.getTypeSpecifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Type</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TYPE_SPECIFIER__TYPE = eINSTANCE.getTypeSpecifier_Type();
+
+		/**
+		 * The meta object literal for the '<em><b>Type Arguments</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TYPE_SPECIFIER__TYPE_ARGUMENTS = eINSTANCE.getTypeSpecifier_TypeArguments();
 
 		/**
 		 * The meta object literal for the '{@link org.yakindu.base.types.impl.EventImpl <em>Event</em>}' class.
@@ -2467,6 +2629,24 @@ public interface TypesPackage extends EPackage {
 		 */
 		EReference ANNOTATABLE_ELEMENT__ANNOTATIONS = eINSTANCE.getAnnotatableElement_Annotations();
 
+		/**
+		 * The meta object literal for the '{@link org.yakindu.base.types.impl.ArrayTypeSpecifierImpl <em>Array Type Specifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.base.types.impl.ArrayTypeSpecifierImpl
+		 * @see org.yakindu.base.types.impl.TypesPackageImpl#getArrayTypeSpecifier()
+		 * @generated
+		 */
+		EClass ARRAY_TYPE_SPECIFIER = eINSTANCE.getArrayTypeSpecifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ARRAY_TYPE_SPECIFIER__SIZE = eINSTANCE.getArrayTypeSpecifier_Size();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.base.types.Direction <em>Direction</em>}' enum.
 		 * <!-- begin-user-doc -->

+ 162 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/ArrayTypeSpecifierImpl.java

@@ -0,0 +1,162 @@
+/**
+ */
+package org.yakindu.base.types.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.yakindu.base.types.ArrayTypeSpecifier;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Array Type Specifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.impl.ArrayTypeSpecifierImpl#getSize <em>Size</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ArrayTypeSpecifierImpl extends TypeSpecifierImpl implements ArrayTypeSpecifier {
+	/**
+	 * The default value of the '{@link #getSize() <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int SIZE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getSize() <em>Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected int size = SIZE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArrayTypeSpecifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TypesPackage.Literals.ARRAY_TYPE_SPECIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getSize() {
+		return size;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSize(int newSize) {
+		int oldSize = size;
+		size = newSize;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.ARRAY_TYPE_SPECIFIER__SIZE, oldSize, size));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TypesPackage.ARRAY_TYPE_SPECIFIER__SIZE:
+				return getSize();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TypesPackage.ARRAY_TYPE_SPECIFIER__SIZE:
+				setSize((Integer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TypesPackage.ARRAY_TYPE_SPECIFIER__SIZE:
+				setSize(SIZE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TypesPackage.ARRAY_TYPE_SPECIFIER__SIZE:
+				return size != SIZE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (size: ");
+		result.append(size);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ArrayTypeSpecifierImpl

+ 63 - 50
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/DeclarationImpl.java

@@ -3,8 +3,8 @@
 package org.yakindu.base.types.impl;
 
 import java.util.Collection;
-
 import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
@@ -18,6 +18,7 @@ import org.yakindu.base.types.Annotation;
 import org.yakindu.base.types.Declaration;
 import org.yakindu.base.types.PackageMember;
 import org.yakindu.base.types.Type;
+import org.yakindu.base.types.TypeSpecifier;
 import org.yakindu.base.types.TypesPackage;
 import org.yakindu.base.types.TypesUtil;
 
@@ -30,7 +31,7 @@ import org.yakindu.base.types.TypesUtil;
  * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.types.impl.DeclarationImpl#getType <em>Type</em>}</li>
- *   <li>{@link org.yakindu.base.types.impl.DeclarationImpl#getTypeArguments <em>Type Arguments</em>}</li>
+ *   <li>{@link org.yakindu.base.types.impl.DeclarationImpl#getTypeSpecifier <em>Type Specifier</em>}</li>
  *   <li>{@link org.yakindu.base.types.impl.DeclarationImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.yakindu.base.types.impl.DeclarationImpl#getAnnotations <em>Annotations</em>}</li>
  *   <li>{@link org.yakindu.base.types.impl.DeclarationImpl#getId <em>Id</em>}</li>
@@ -40,24 +41,14 @@ import org.yakindu.base.types.TypesUtil;
  */
 public abstract class DeclarationImpl extends EObjectImpl implements Declaration {
 	/**
-	 * The cached value of the '{@link #getType() <em>Type</em>}' reference.
+	 * The cached value of the '{@link #getTypeSpecifier() <em>Type Specifier</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getType()
+	 * @see #getTypeSpecifier()
 	 * @generated
 	 * @ordered
 	 */
-	protected Type type;
-
-	/**
-	 * The cached value of the '{@link #getTypeArguments() <em>Type Arguments</em>}' reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getTypeArguments()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<Type> typeArguments;
+	protected TypeSpecifier typeSpecifier;
 
 	/**
 	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
@@ -124,15 +115,20 @@ public abstract class DeclarationImpl extends EObjectImpl implements Declaration
 	 * @generated
 	 */
 	public Type getType() {
-		if (type != null && type.eIsProxy()) {
-			InternalEObject oldType = (InternalEObject)type;
-			type = (Type)eResolveProxy(oldType);
-			if (type != oldType) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, TypesPackage.DECLARATION__TYPE, oldType, type));
-			}
+		Type type = basicGetType();
+		return type != null && type.eIsProxy() ? (Type)eResolveProxy((InternalEObject)type) : type;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public Type basicGetType() {
+		if (getTypeSpecifier() != null) {
+			return getTypeSpecifier().getType();
 		}
-		return type;
+		return null;
 	}
 
 	/**
@@ -140,8 +136,8 @@ public abstract class DeclarationImpl extends EObjectImpl implements Declaration
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Type basicGetType() {
-		return type;
+	public TypeSpecifier getTypeSpecifier() {
+		return typeSpecifier;
 	}
 
 	/**
@@ -149,11 +145,14 @@ public abstract class DeclarationImpl extends EObjectImpl implements Declaration
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void setType(Type newType) {
-		Type oldType = type;
-		type = newType;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.DECLARATION__TYPE, oldType, type));
+	public NotificationChain basicSetTypeSpecifier(TypeSpecifier newTypeSpecifier, NotificationChain msgs) {
+		TypeSpecifier oldTypeSpecifier = typeSpecifier;
+		typeSpecifier = newTypeSpecifier;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, TypesPackage.DECLARATION__TYPE_SPECIFIER, oldTypeSpecifier, newTypeSpecifier);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
 	}
 
 	/**
@@ -161,11 +160,18 @@ public abstract class DeclarationImpl extends EObjectImpl implements Declaration
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EList<Type> getTypeArguments() {
-		if (typeArguments == null) {
-			typeArguments = new EObjectResolvingEList<Type>(Type.class, this, TypesPackage.DECLARATION__TYPE_ARGUMENTS);
+	public void setTypeSpecifier(TypeSpecifier newTypeSpecifier) {
+		if (newTypeSpecifier != typeSpecifier) {
+			NotificationChain msgs = null;
+			if (typeSpecifier != null)
+				msgs = ((InternalEObject)typeSpecifier).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - TypesPackage.DECLARATION__TYPE_SPECIFIER, null, msgs);
+			if (newTypeSpecifier != null)
+				msgs = ((InternalEObject)newTypeSpecifier).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - TypesPackage.DECLARATION__TYPE_SPECIFIER, null, msgs);
+			msgs = basicSetTypeSpecifier(newTypeSpecifier, msgs);
+			if (msgs != null) msgs.dispatch();
 		}
-		return typeArguments;
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.DECLARATION__TYPE_SPECIFIER, newTypeSpecifier, newTypeSpecifier));
 	}
 
 	/**
@@ -212,8 +218,8 @@ public abstract class DeclarationImpl extends EObjectImpl implements Declaration
 			case TypesPackage.DECLARATION__TYPE:
 				if (resolve) return getType();
 				return basicGetType();
-			case TypesPackage.DECLARATION__TYPE_ARGUMENTS:
-				return getTypeArguments();
+			case TypesPackage.DECLARATION__TYPE_SPECIFIER:
+				return getTypeSpecifier();
 			case TypesPackage.DECLARATION__NAME:
 				return getName();
 			case TypesPackage.DECLARATION__ANNOTATIONS:
@@ -233,12 +239,8 @@ public abstract class DeclarationImpl extends EObjectImpl implements Declaration
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case TypesPackage.DECLARATION__TYPE:
-				setType((Type)newValue);
-				return;
-			case TypesPackage.DECLARATION__TYPE_ARGUMENTS:
-				getTypeArguments().clear();
-				getTypeArguments().addAll((Collection<? extends Type>)newValue);
+			case TypesPackage.DECLARATION__TYPE_SPECIFIER:
+				setTypeSpecifier((TypeSpecifier)newValue);
 				return;
 			case TypesPackage.DECLARATION__NAME:
 				setName((String)newValue);
@@ -259,11 +261,8 @@ public abstract class DeclarationImpl extends EObjectImpl implements Declaration
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case TypesPackage.DECLARATION__TYPE:
-				setType((Type)null);
-				return;
-			case TypesPackage.DECLARATION__TYPE_ARGUMENTS:
-				getTypeArguments().clear();
+			case TypesPackage.DECLARATION__TYPE_SPECIFIER:
+				setTypeSpecifier((TypeSpecifier)null);
 				return;
 			case TypesPackage.DECLARATION__NAME:
 				setName(NAME_EDEFAULT);
@@ -284,9 +283,9 @@ public abstract class DeclarationImpl extends EObjectImpl implements Declaration
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
 			case TypesPackage.DECLARATION__TYPE:
-				return type != null;
-			case TypesPackage.DECLARATION__TYPE_ARGUMENTS:
-				return typeArguments != null && !typeArguments.isEmpty();
+				return basicGetType() != null;
+			case TypesPackage.DECLARATION__TYPE_SPECIFIER:
+				return typeSpecifier != null;
 			case TypesPackage.DECLARATION__NAME:
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case TypesPackage.DECLARATION__ANNOTATIONS:
@@ -379,4 +378,18 @@ public abstract class DeclarationImpl extends EObjectImpl implements Declaration
 		return TypesUtil.computeQID(this);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case TypesPackage.DECLARATION__TYPE_SPECIFIER:
+				return basicSetTypeSpecifier(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
 } //DeclarationImpl

+ 50 - 54
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/ParameterImpl.java

@@ -6,22 +6,19 @@
  */
 package org.yakindu.base.types.impl;
 
-import java.util.Collection;
-
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
-import org.eclipse.emf.common.util.EList;
 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.EObjectImpl;
-import org.eclipse.emf.ecore.util.EObjectResolvingEList;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.yakindu.base.base.BasePackage;
 import org.yakindu.base.base.NamedElement;
 import org.yakindu.base.types.Operation;
 import org.yakindu.base.types.Parameter;
 import org.yakindu.base.types.Type;
+import org.yakindu.base.types.TypeSpecifier;
 import org.yakindu.base.types.TypesPackage;
 
 /**
@@ -33,7 +30,7 @@ import org.yakindu.base.types.TypesPackage;
  * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.types.impl.ParameterImpl#getType <em>Type</em>}</li>
- *   <li>{@link org.yakindu.base.types.impl.ParameterImpl#getTypeArguments <em>Type Arguments</em>}</li>
+ *   <li>{@link org.yakindu.base.types.impl.ParameterImpl#getTypeSpecifier <em>Type Specifier</em>}</li>
  *   <li>{@link org.yakindu.base.types.impl.ParameterImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.yakindu.base.types.impl.ParameterImpl#getOwningOperation <em>Owning Operation</em>}</li>
  * </ul>
@@ -42,24 +39,14 @@ import org.yakindu.base.types.TypesPackage;
  */
 public class ParameterImpl extends EObjectImpl implements Parameter {
 	/**
-	 * The cached value of the '{@link #getType() <em>Type</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getType()
-	 * @generated
-	 * @ordered
-	 */
-	protected Type type;
-
-	/**
-	 * The cached value of the '{@link #getTypeArguments() <em>Type Arguments</em>}' reference list.
+	 * The cached value of the '{@link #getTypeSpecifier() <em>Type Specifier</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getTypeArguments()
+	 * @see #getTypeSpecifier()
 	 * @generated
 	 * @ordered
 	 */
-	protected EList<Type> typeArguments;
+	protected TypeSpecifier typeSpecifier;
 
 	/**
 	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
@@ -106,15 +93,20 @@ public class ParameterImpl extends EObjectImpl implements Parameter {
 	 * @generated
 	 */
 	public Type getType() {
-		if (type != null && type.eIsProxy()) {
-			InternalEObject oldType = (InternalEObject)type;
-			type = (Type)eResolveProxy(oldType);
-			if (type != oldType) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, TypesPackage.PARAMETER__TYPE, oldType, type));
-			}
+		Type type = basicGetType();
+		return type != null && type.eIsProxy() ? (Type)eResolveProxy((InternalEObject)type) : type;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public Type basicGetType() {
+		if (getTypeSpecifier() != null) {
+			return getTypeSpecifier().getType();
 		}
-		return type;
+		return null;
 	}
 
 	/**
@@ -122,8 +114,8 @@ public class ParameterImpl extends EObjectImpl implements Parameter {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Type basicGetType() {
-		return type;
+	public TypeSpecifier getTypeSpecifier() {
+		return typeSpecifier;
 	}
 
 	/**
@@ -131,11 +123,14 @@ public class ParameterImpl extends EObjectImpl implements Parameter {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void setType(Type newType) {
-		Type oldType = type;
-		type = newType;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.PARAMETER__TYPE, oldType, type));
+	public NotificationChain basicSetTypeSpecifier(TypeSpecifier newTypeSpecifier, NotificationChain msgs) {
+		TypeSpecifier oldTypeSpecifier = typeSpecifier;
+		typeSpecifier = newTypeSpecifier;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, TypesPackage.PARAMETER__TYPE_SPECIFIER, oldTypeSpecifier, newTypeSpecifier);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
 	}
 
 	/**
@@ -143,11 +138,18 @@ public class ParameterImpl extends EObjectImpl implements Parameter {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EList<Type> getTypeArguments() {
-		if (typeArguments == null) {
-			typeArguments = new EObjectResolvingEList<Type>(Type.class, this, TypesPackage.PARAMETER__TYPE_ARGUMENTS);
+	public void setTypeSpecifier(TypeSpecifier newTypeSpecifier) {
+		if (newTypeSpecifier != typeSpecifier) {
+			NotificationChain msgs = null;
+			if (typeSpecifier != null)
+				msgs = ((InternalEObject)typeSpecifier).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - TypesPackage.PARAMETER__TYPE_SPECIFIER, null, msgs);
+			if (newTypeSpecifier != null)
+				msgs = ((InternalEObject)newTypeSpecifier).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - TypesPackage.PARAMETER__TYPE_SPECIFIER, null, msgs);
+			msgs = basicSetTypeSpecifier(newTypeSpecifier, msgs);
+			if (msgs != null) msgs.dispatch();
 		}
-		return typeArguments;
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.PARAMETER__TYPE_SPECIFIER, newTypeSpecifier, newTypeSpecifier));
 	}
 
 	/**
@@ -236,6 +238,8 @@ public class ParameterImpl extends EObjectImpl implements Parameter {
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
+			case TypesPackage.PARAMETER__TYPE_SPECIFIER:
+				return basicSetTypeSpecifier(null, msgs);
 			case TypesPackage.PARAMETER__OWNING_OPERATION:
 				return basicSetOwningOperation(null, msgs);
 		}
@@ -267,8 +271,8 @@ public class ParameterImpl extends EObjectImpl implements Parameter {
 			case TypesPackage.PARAMETER__TYPE:
 				if (resolve) return getType();
 				return basicGetType();
-			case TypesPackage.PARAMETER__TYPE_ARGUMENTS:
-				return getTypeArguments();
+			case TypesPackage.PARAMETER__TYPE_SPECIFIER:
+				return getTypeSpecifier();
 			case TypesPackage.PARAMETER__NAME:
 				return getName();
 			case TypesPackage.PARAMETER__OWNING_OPERATION:
@@ -282,16 +286,11 @@ public class ParameterImpl extends EObjectImpl implements Parameter {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@SuppressWarnings("unchecked")
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case TypesPackage.PARAMETER__TYPE:
-				setType((Type)newValue);
-				return;
-			case TypesPackage.PARAMETER__TYPE_ARGUMENTS:
-				getTypeArguments().clear();
-				getTypeArguments().addAll((Collection<? extends Type>)newValue);
+			case TypesPackage.PARAMETER__TYPE_SPECIFIER:
+				setTypeSpecifier((TypeSpecifier)newValue);
 				return;
 			case TypesPackage.PARAMETER__NAME:
 				setName((String)newValue);
@@ -311,11 +310,8 @@ public class ParameterImpl extends EObjectImpl implements Parameter {
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case TypesPackage.PARAMETER__TYPE:
-				setType((Type)null);
-				return;
-			case TypesPackage.PARAMETER__TYPE_ARGUMENTS:
-				getTypeArguments().clear();
+			case TypesPackage.PARAMETER__TYPE_SPECIFIER:
+				setTypeSpecifier((TypeSpecifier)null);
 				return;
 			case TypesPackage.PARAMETER__NAME:
 				setName(NAME_EDEFAULT);
@@ -336,9 +332,9 @@ public class ParameterImpl extends EObjectImpl implements Parameter {
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
 			case TypesPackage.PARAMETER__TYPE:
-				return type != null;
-			case TypesPackage.PARAMETER__TYPE_ARGUMENTS:
-				return typeArguments != null && !typeArguments.isEmpty();
+				return basicGetType() != null;
+			case TypesPackage.PARAMETER__TYPE_SPECIFIER:
+				return typeSpecifier != null;
 			case TypesPackage.PARAMETER__NAME:
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case TypesPackage.PARAMETER__OWNING_OPERATION:

+ 57 - 53
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypeAliasImpl.java

@@ -22,6 +22,7 @@ import org.yakindu.base.types.PackageMember;
 import org.yakindu.base.types.Type;
 import org.yakindu.base.types.TypeAlias;
 import org.yakindu.base.types.TypeConstraint;
+import org.yakindu.base.types.TypeSpecifier;
 import org.yakindu.base.types.TypesPackage;
 import org.yakindu.base.types.TypesUtil;
 
@@ -33,7 +34,7 @@ import org.yakindu.base.types.TypesUtil;
  * </p>
  * <ul>
  *   <li>{@link org.yakindu.base.types.impl.TypeAliasImpl#getType <em>Type</em>}</li>
- *   <li>{@link org.yakindu.base.types.impl.TypeAliasImpl#getTypeArguments <em>Type Arguments</em>}</li>
+ *   <li>{@link org.yakindu.base.types.impl.TypeAliasImpl#getTypeSpecifier <em>Type Specifier</em>}</li>
  *   <li>{@link org.yakindu.base.types.impl.TypeAliasImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.yakindu.base.types.impl.TypeAliasImpl#getAnnotations <em>Annotations</em>}</li>
  *   <li>{@link org.yakindu.base.types.impl.TypeAliasImpl#getId <em>Id</em>}</li>
@@ -46,23 +47,14 @@ import org.yakindu.base.types.TypesUtil;
  */
 public class TypeAliasImpl extends EObjectImpl implements TypeAlias {
 	/**
-	 * The cached value of the '{@link #getType() <em>Type</em>}' reference.
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * @see #getType()
-	 * @generated
-	 * @ordered
-	 */
-	protected Type type;
-
-	/**
-	 * The cached value of the '{@link #getTypeArguments() <em>Type Arguments</em>}' reference list.
-	 * <!-- begin-user-doc --> <!--
-	 * end-user-doc -->
-	 * @see #getTypeArguments()
+	 * The cached value of the '{@link #getTypeSpecifier() <em>Type Specifier</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypeSpecifier()
 	 * @generated
 	 * @ordered
 	 */
-	protected EList<Type> typeArguments;
+	protected TypeSpecifier typeSpecifier;
 
 	/**
 	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
@@ -171,45 +163,62 @@ public class TypeAliasImpl extends EObjectImpl implements TypeAlias {
 	 * @generated
 	 */
 	public Type getType() {
-		if (type != null && type.eIsProxy()) {
-			InternalEObject oldType = (InternalEObject)type;
-			type = (Type)eResolveProxy(oldType);
-			if (type != oldType) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, TypesPackage.TYPE_ALIAS__TYPE, oldType, type));
-			}
-		}
-		return type;
+		Type type = basicGetType();
+		return type != null && type.eIsProxy() ? (Type)eResolveProxy((InternalEObject)type) : type;
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT
 	 */
 	public Type basicGetType() {
-		return type;
+		if (getTypeSpecifier() != null) {
+			return getTypeSpecifier().getType();
+		}
+		return null;
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void setType(Type newType) {
-		Type oldType = type;
-		type = newType;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.TYPE_ALIAS__TYPE, oldType, type));
+	public TypeSpecifier getTypeSpecifier() {
+		return typeSpecifier;
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTypeSpecifier(TypeSpecifier newTypeSpecifier, NotificationChain msgs) {
+		TypeSpecifier oldTypeSpecifier = typeSpecifier;
+		typeSpecifier = newTypeSpecifier;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, TypesPackage.TYPE_ALIAS__TYPE_SPECIFIER, oldTypeSpecifier, newTypeSpecifier);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EList<Type> getTypeArguments() {
-		if (typeArguments == null) {
-			typeArguments = new EObjectResolvingEList<Type>(Type.class, this, TypesPackage.TYPE_ALIAS__TYPE_ARGUMENTS);
+	public void setTypeSpecifier(TypeSpecifier newTypeSpecifier) {
+		if (newTypeSpecifier != typeSpecifier) {
+			NotificationChain msgs = null;
+			if (typeSpecifier != null)
+				msgs = ((InternalEObject)typeSpecifier).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - TypesPackage.TYPE_ALIAS__TYPE_SPECIFIER, null, msgs);
+			if (newTypeSpecifier != null)
+				msgs = ((InternalEObject)newTypeSpecifier).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - TypesPackage.TYPE_ALIAS__TYPE_SPECIFIER, null, msgs);
+			msgs = basicSetTypeSpecifier(newTypeSpecifier, msgs);
+			if (msgs != null) msgs.dispatch();
 		}
-		return typeArguments;
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.TYPE_ALIAS__TYPE_SPECIFIER, newTypeSpecifier, newTypeSpecifier));
 	}
 
 	/**
@@ -313,6 +322,8 @@ public class TypeAliasImpl extends EObjectImpl implements TypeAlias {
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
+			case TypesPackage.TYPE_ALIAS__TYPE_SPECIFIER:
+				return basicSetTypeSpecifier(null, msgs);
 			case TypesPackage.TYPE_ALIAS__CONSTRAINT:
 				return ((InternalEList<?>)getConstraint()).basicRemove(otherEnd, msgs);
 		}
@@ -329,8 +340,8 @@ public class TypeAliasImpl extends EObjectImpl implements TypeAlias {
 			case TypesPackage.TYPE_ALIAS__TYPE:
 				if (resolve) return getType();
 				return basicGetType();
-			case TypesPackage.TYPE_ALIAS__TYPE_ARGUMENTS:
-				return getTypeArguments();
+			case TypesPackage.TYPE_ALIAS__TYPE_SPECIFIER:
+				return getTypeSpecifier();
 			case TypesPackage.TYPE_ALIAS__NAME:
 				return getName();
 			case TypesPackage.TYPE_ALIAS__ANNOTATIONS:
@@ -355,12 +366,8 @@ public class TypeAliasImpl extends EObjectImpl implements TypeAlias {
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case TypesPackage.TYPE_ALIAS__TYPE:
-				setType((Type)newValue);
-				return;
-			case TypesPackage.TYPE_ALIAS__TYPE_ARGUMENTS:
-				getTypeArguments().clear();
-				getTypeArguments().addAll((Collection<? extends Type>)newValue);
+			case TypesPackage.TYPE_ALIAS__TYPE_SPECIFIER:
+				setTypeSpecifier((TypeSpecifier)newValue);
 				return;
 			case TypesPackage.TYPE_ALIAS__NAME:
 				setName((String)newValue);
@@ -390,11 +397,8 @@ public class TypeAliasImpl extends EObjectImpl implements TypeAlias {
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case TypesPackage.TYPE_ALIAS__TYPE:
-				setType((Type)null);
-				return;
-			case TypesPackage.TYPE_ALIAS__TYPE_ARGUMENTS:
-				getTypeArguments().clear();
+			case TypesPackage.TYPE_ALIAS__TYPE_SPECIFIER:
+				setTypeSpecifier((TypeSpecifier)null);
 				return;
 			case TypesPackage.TYPE_ALIAS__NAME:
 				setName(NAME_EDEFAULT);
@@ -423,9 +427,9 @@ public class TypeAliasImpl extends EObjectImpl implements TypeAlias {
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
 			case TypesPackage.TYPE_ALIAS__TYPE:
-				return type != null;
-			case TypesPackage.TYPE_ALIAS__TYPE_ARGUMENTS:
-				return typeArguments != null && !typeArguments.isEmpty();
+				return basicGetType() != null;
+			case TypesPackage.TYPE_ALIAS__TYPE_SPECIFIER:
+				return typeSpecifier != null;
 			case TypesPackage.TYPE_ALIAS__NAME:
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case TypesPackage.TYPE_ALIAS__ANNOTATIONS:

+ 25 - 24
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypeParameterImpl.java

@@ -6,14 +6,15 @@ import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.yakindu.base.types.Type;
 import org.yakindu.base.types.TypeParameter;
+import org.yakindu.base.types.TypeParameterBinding;
 import org.yakindu.base.types.TypesPackage;
 
 /**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Type Parameter</b></em>'.
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> An implementation of the model object '
+ * <em><b>Type Parameter</b></em>'. <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
  * </p>
@@ -26,8 +27,7 @@ import org.yakindu.base.types.TypesPackage;
 public class TypeParameterImpl extends TypeImpl implements TypeParameter {
 	/**
 	 * The cached value of the '{@link #getBound() <em>Bound</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @see #getBound()
 	 * @generated
 	 * @ordered
@@ -35,8 +35,7 @@ public class TypeParameterImpl extends TypeImpl implements TypeParameter {
 	protected Type bound;
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	protected TypeParameterImpl() {
@@ -44,8 +43,7 @@ public class TypeParameterImpl extends TypeImpl implements TypeParameter {
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -54,8 +52,7 @@ public class TypeParameterImpl extends TypeImpl implements TypeParameter {
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public Type getBound() {
@@ -71,8 +68,7 @@ public class TypeParameterImpl extends TypeImpl implements TypeParameter {
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public Type basicGetBound() {
@@ -80,8 +76,7 @@ public class TypeParameterImpl extends TypeImpl implements TypeParameter {
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setBound(Type newBound) {
@@ -92,8 +87,7 @@ public class TypeParameterImpl extends TypeImpl implements TypeParameter {
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -107,8 +101,7 @@ public class TypeParameterImpl extends TypeImpl implements TypeParameter {
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -122,8 +115,7 @@ public class TypeParameterImpl extends TypeImpl implements TypeParameter {
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -137,8 +129,7 @@ public class TypeParameterImpl extends TypeImpl implements TypeParameter {
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -150,4 +141,14 @@ public class TypeParameterImpl extends TypeImpl implements TypeParameter {
 		return super.eIsSet(featureID);
 	}
 
-} //TypeParameterImpl
+	@Override
+	public Type getOriginType() {
+		TypeParameterBinding existingAdapter = (TypeParameterBinding) EcoreUtil
+				.getExistingAdapter(this, TypeParameterBinding.class);
+		if (existingAdapter != null && existingAdapter.getActualType() != null) {
+			return existingAdapter.getActualType();
+		}
+		return super.getOriginType();
+	}
+
+} // TypeParameterImpl

+ 209 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypeSpecifierImpl.java

@@ -0,0 +1,209 @@
+/**
+ */
+package org.yakindu.base.types.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+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.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.yakindu.base.types.Type;
+import org.yakindu.base.types.TypeSpecifier;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Type Specifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.impl.TypeSpecifierImpl#getType <em>Type</em>}</li>
+ *   <li>{@link org.yakindu.base.types.impl.TypeSpecifierImpl#getTypeArguments <em>Type Arguments</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class TypeSpecifierImpl extends EObjectImpl implements TypeSpecifier {
+	/**
+	 * The cached value of the '{@link #getType() <em>Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected Type type;
+
+	/**
+	 * The cached value of the '{@link #getTypeArguments() <em>Type Arguments</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypeArguments()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<TypeSpecifier> typeArguments;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TypeSpecifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TypesPackage.Literals.TYPE_SPECIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Type getType() {
+		if (type != null && type.eIsProxy()) {
+			InternalEObject oldType = (InternalEObject)type;
+			type = (Type)eResolveProxy(oldType);
+			if (type != oldType) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, TypesPackage.TYPE_SPECIFIER__TYPE, oldType, type));
+			}
+		}
+		return type;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Type basicGetType() {
+		return type;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setType(Type newType) {
+		Type oldType = type;
+		type = newType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.TYPE_SPECIFIER__TYPE, oldType, type));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<TypeSpecifier> getTypeArguments() {
+		if (typeArguments == null) {
+			typeArguments = new EObjectContainmentEList<TypeSpecifier>(TypeSpecifier.class, this, TypesPackage.TYPE_SPECIFIER__TYPE_ARGUMENTS);
+		}
+		return typeArguments;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case TypesPackage.TYPE_SPECIFIER__TYPE_ARGUMENTS:
+				return ((InternalEList<?>)getTypeArguments()).basicRemove(otherEnd, 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 TypesPackage.TYPE_SPECIFIER__TYPE:
+				if (resolve) return getType();
+				return basicGetType();
+			case TypesPackage.TYPE_SPECIFIER__TYPE_ARGUMENTS:
+				return getTypeArguments();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TypesPackage.TYPE_SPECIFIER__TYPE:
+				setType((Type)newValue);
+				return;
+			case TypesPackage.TYPE_SPECIFIER__TYPE_ARGUMENTS:
+				getTypeArguments().clear();
+				getTypeArguments().addAll((Collection<? extends TypeSpecifier>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TypesPackage.TYPE_SPECIFIER__TYPE:
+				setType((Type)null);
+				return;
+			case TypesPackage.TYPE_SPECIFIER__TYPE_ARGUMENTS:
+				getTypeArguments().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TypesPackage.TYPE_SPECIFIER__TYPE:
+				return type != null;
+			case TypesPackage.TYPE_SPECIFIER__TYPE_ARGUMENTS:
+				return typeArguments != null && !typeArguments.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //TypeSpecifierImpl

+ 24 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypesFactoryImpl.java

@@ -14,6 +14,7 @@ import org.eclipse.emf.ecore.impl.EFactoryImpl;
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
 import org.yakindu.base.types.AnnotatableElement;
 import org.yakindu.base.types.Annotation;
+import org.yakindu.base.types.ArrayTypeSpecifier;
 import org.yakindu.base.types.ComplexType;
 import org.yakindu.base.types.Direction;
 import org.yakindu.base.types.Domain;
@@ -31,6 +32,7 @@ import org.yakindu.base.types.Type;
 import org.yakindu.base.types.TypeAlias;
 import org.yakindu.base.types.TypeConstraint;
 import org.yakindu.base.types.TypeParameter;
+import org.yakindu.base.types.TypeSpecifier;
 import org.yakindu.base.types.TypesFactory;
 import org.yakindu.base.types.TypesPackage;
 
@@ -83,6 +85,7 @@ public class TypesFactoryImpl extends EFactoryImpl implements TypesFactory {
 			case TypesPackage.OPERATION: return createOperation();
 			case TypesPackage.PROPERTY: return createProperty();
 			case TypesPackage.PARAMETER: return createParameter();
+			case TypesPackage.TYPE_SPECIFIER: return createTypeSpecifier();
 			case TypesPackage.EVENT: return createEvent();
 			case TypesPackage.ENUMERATION_TYPE: return createEnumerationType();
 			case TypesPackage.PRIMITIVE_TYPE: return createPrimitiveType();
@@ -97,6 +100,7 @@ public class TypesFactoryImpl extends EFactoryImpl implements TypesFactory {
 			case TypesPackage.TYPE_ALIAS: return createTypeAlias();
 			case TypesPackage.ANNOTATION: return createAnnotation();
 			case TypesPackage.ANNOTATABLE_ELEMENT: return createAnnotatableElement();
+			case TypesPackage.ARRAY_TYPE_SPECIFIER: return createArrayTypeSpecifier();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
@@ -182,6 +186,16 @@ public class TypesFactoryImpl extends EFactoryImpl implements TypesFactory {
 		return parameter;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypeSpecifier createTypeSpecifier() {
+		TypeSpecifierImpl typeSpecifier = new TypeSpecifierImpl();
+		return typeSpecifier;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -322,6 +336,16 @@ public class TypesFactoryImpl extends EFactoryImpl implements TypesFactory {
 		return annotatableElement;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArrayTypeSpecifier createArrayTypeSpecifier() {
+		ArrayTypeSpecifierImpl arrayTypeSpecifier = new ArrayTypeSpecifierImpl();
+		return arrayTypeSpecifier;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->

+ 80 - 4
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypesPackageImpl.java

@@ -15,6 +15,7 @@ import org.eclipse.emf.ecore.impl.EPackageImpl;
 import org.yakindu.base.base.BasePackage;
 import org.yakindu.base.types.AnnotatableElement;
 import org.yakindu.base.types.Annotation;
+import org.yakindu.base.types.ArrayTypeSpecifier;
 import org.yakindu.base.types.ComplexType;
 import org.yakindu.base.types.Declaration;
 import org.yakindu.base.types.Direction;
@@ -33,6 +34,7 @@ import org.yakindu.base.types.Type;
 import org.yakindu.base.types.TypeAlias;
 import org.yakindu.base.types.TypeConstraint;
 import org.yakindu.base.types.TypeParameter;
+import org.yakindu.base.types.TypeSpecifier;
 import org.yakindu.base.types.TypedElement;
 import org.yakindu.base.types.TypesFactory;
 import org.yakindu.base.types.TypesPackage;
@@ -87,6 +89,13 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 	 */
 	private EClass typedElementEClass = null;
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass typeSpecifierEClass = null;
+
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
@@ -180,6 +189,13 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 	 */
 	private EClass annotatableElementEClass = null;
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass arrayTypeSpecifierEClass = null;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -418,10 +434,37 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getTypedElement_TypeArguments() {
+	public EReference getTypedElement_TypeSpecifier() {
 		return (EReference)typedElementEClass.getEStructuralFeatures().get(1);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTypeSpecifier() {
+		return typeSpecifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTypeSpecifier_Type() {
+		return (EReference)typeSpecifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTypeSpecifier_TypeArguments() {
+		return (EReference)typeSpecifierEClass.getEStructuralFeatures().get(1);
+	}
+
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
@@ -691,6 +734,24 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 		return (EReference)annotatableElementEClass.getEStructuralFeatures().get(0);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getArrayTypeSpecifier() {
+		return arrayTypeSpecifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getArrayTypeSpecifier_Size() {
+		return (EAttribute)arrayTypeSpecifierEClass.getEStructuralFeatures().get(0);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -751,7 +812,11 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 
 		typedElementEClass = createEClass(TYPED_ELEMENT);
 		createEReference(typedElementEClass, TYPED_ELEMENT__TYPE);
-		createEReference(typedElementEClass, TYPED_ELEMENT__TYPE_ARGUMENTS);
+		createEReference(typedElementEClass, TYPED_ELEMENT__TYPE_SPECIFIER);
+
+		typeSpecifierEClass = createEClass(TYPE_SPECIFIER);
+		createEReference(typeSpecifierEClass, TYPE_SPECIFIER__TYPE);
+		createEReference(typeSpecifierEClass, TYPE_SPECIFIER__TYPE_ARGUMENTS);
 
 		eventEClass = createEClass(EVENT);
 		createEAttribute(eventEClass, EVENT__DIRECTION);
@@ -798,6 +863,9 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 		annotatableElementEClass = createEClass(ANNOTATABLE_ELEMENT);
 		createEReference(annotatableElementEClass, ANNOTATABLE_ELEMENT__ANNOTATIONS);
 
+		arrayTypeSpecifierEClass = createEClass(ARRAY_TYPE_SPECIFIER);
+		createEAttribute(arrayTypeSpecifierEClass, ARRAY_TYPE_SPECIFIER__SIZE);
+
 		// Create enums
 		directionEEnum = createEEnum(DIRECTION);
 	}
@@ -854,6 +922,7 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 		typeAliasEClass.getESuperTypes().add(this.getTypedElement());
 		typeAliasEClass.getESuperTypes().add(this.getType());
 		annotationEClass.getESuperTypes().add(this.getPackageMember());
+		arrayTypeSpecifierEClass.getESuperTypes().add(this.getTypeSpecifier());
 
 		// Initialize classes and features; add operations and parameters
 		initEClass(packageEClass, org.yakindu.base.types.Package.class, "Package", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -882,8 +951,12 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 		initEReference(getParameter_OwningOperation(), this.getOperation(), this.getOperation_Parameters(), "owningOperation", null, 0, 1, Parameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(typedElementEClass, TypedElement.class, "TypedElement", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getTypedElement_Type(), this.getType(), null, "type", null, 0, 1, TypedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getTypedElement_TypeArguments(), this.getType(), null, "typeArguments", null, 0, -1, TypedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getTypedElement_Type(), this.getType(), null, "type", null, 0, 1, TypedElement.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+		initEReference(getTypedElement_TypeSpecifier(), this.getTypeSpecifier(), null, "typeSpecifier", null, 0, 1, TypedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(typeSpecifierEClass, TypeSpecifier.class, "TypeSpecifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getTypeSpecifier_Type(), this.getType(), null, "type", null, 0, 1, TypeSpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getTypeSpecifier_TypeArguments(), this.getTypeSpecifier(), null, "typeArguments", null, 0, -1, TypeSpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(eventEClass, Event.class, "Event", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getEvent_Direction(), this.getDirection(), "direction", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -932,6 +1005,9 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 		initEClass(annotatableElementEClass, AnnotatableElement.class, "AnnotatableElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getAnnotatableElement_Annotations(), this.getAnnotation(), null, "annotations", null, 0, -1, AnnotatableElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+		initEClass(arrayTypeSpecifierEClass, ArrayTypeSpecifier.class, "ArrayTypeSpecifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getArrayTypeSpecifier_Size(), ecorePackage.getEInt(), "size", null, 0, 1, ArrayTypeSpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
 		// Initialize enums and add enum literals
 		initEEnum(directionEEnum, Direction.class, "Direction");
 		addEEnumLiteral(directionEEnum, Direction.LOCAL);

+ 38 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/util/TypesAdapterFactory.java

@@ -13,6 +13,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.yakindu.base.base.NamedElement;
 import org.yakindu.base.types.AnnotatableElement;
 import org.yakindu.base.types.Annotation;
+import org.yakindu.base.types.ArrayTypeSpecifier;
 import org.yakindu.base.types.ComplexType;
 import org.yakindu.base.types.Declaration;
 import org.yakindu.base.types.Domain;
@@ -30,6 +31,7 @@ import org.yakindu.base.types.Type;
 import org.yakindu.base.types.TypeAlias;
 import org.yakindu.base.types.TypeConstraint;
 import org.yakindu.base.types.TypeParameter;
+import org.yakindu.base.types.TypeSpecifier;
 import org.yakindu.base.types.TypedElement;
 import org.yakindu.base.types.TypesPackage;
 
@@ -115,6 +117,10 @@ public class TypesAdapterFactory extends AdapterFactoryImpl {
 				return createTypedElementAdapter();
 			}
 			@Override
+			public Adapter caseTypeSpecifier(TypeSpecifier object) {
+				return createTypeSpecifierAdapter();
+			}
+			@Override
 			public Adapter caseEvent(Event object) {
 				return createEventAdapter();
 			}
@@ -171,6 +177,10 @@ public class TypesAdapterFactory extends AdapterFactoryImpl {
 				return createAnnotatableElementAdapter();
 			}
 			@Override
+			public Adapter caseArrayTypeSpecifier(ArrayTypeSpecifier object) {
+				return createArrayTypeSpecifierAdapter();
+			}
+			@Override
 			public Adapter caseNamedElement(NamedElement object) {
 				return createNamedElementAdapter();
 			}
@@ -295,6 +305,20 @@ public class TypesAdapterFactory extends AdapterFactoryImpl {
 		return null;
 	}
 
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.base.types.TypeSpecifier <em>Type Specifier</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.types.TypeSpecifier
+	 * @generated
+	 */
+	public Adapter createTypeSpecifierAdapter() {
+		return null;
+	}
+
 	/**
 	 * Creates a new adapter for an object of class '
 	 * {@link org.yakindu.base.base.NamedElement <em>Named Element</em>}'. <!--
@@ -505,6 +529,20 @@ public class TypesAdapterFactory extends AdapterFactoryImpl {
 		return null;
 	}
 
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.base.types.ArrayTypeSpecifier <em>Array Type Specifier</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.types.ArrayTypeSpecifier
+	 * @generated
+	 */
+	public Adapter createArrayTypeSpecifierAdapter() {
+		return null;
+	}
+
 	/**
 	 * Creates a new adapter for the default case.
 	 * <!-- begin-user-doc --> This

+ 45 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/util/TypesSwitch.java

@@ -12,6 +12,7 @@ import org.eclipse.emf.ecore.util.Switch;
 import org.yakindu.base.base.NamedElement;
 import org.yakindu.base.types.AnnotatableElement;
 import org.yakindu.base.types.Annotation;
+import org.yakindu.base.types.ArrayTypeSpecifier;
 import org.yakindu.base.types.ComplexType;
 import org.yakindu.base.types.Declaration;
 import org.yakindu.base.types.Domain;
@@ -29,6 +30,7 @@ import org.yakindu.base.types.Type;
 import org.yakindu.base.types.TypeAlias;
 import org.yakindu.base.types.TypeConstraint;
 import org.yakindu.base.types.TypeParameter;
+import org.yakindu.base.types.TypeSpecifier;
 import org.yakindu.base.types.TypedElement;
 import org.yakindu.base.types.TypesPackage;
 
@@ -147,6 +149,12 @@ public class TypesSwitch<T> extends Switch<T> {
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case TypesPackage.TYPE_SPECIFIER: {
+				TypeSpecifier typeSpecifier = (TypeSpecifier)theEObject;
+				T result = caseTypeSpecifier(typeSpecifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case TypesPackage.EVENT: {
 				Event event = (Event)theEObject;
 				T result = caseEvent(event);
@@ -274,6 +282,13 @@ public class TypesSwitch<T> extends Switch<T> {
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case TypesPackage.ARRAY_TYPE_SPECIFIER: {
+				ArrayTypeSpecifier arrayTypeSpecifier = (ArrayTypeSpecifier)theEObject;
+				T result = caseArrayTypeSpecifier(arrayTypeSpecifier);
+				if (result == null) result = caseTypeSpecifier(arrayTypeSpecifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			default: return defaultCase(theEObject);
 		}
 	}
@@ -381,6 +396,21 @@ public class TypesSwitch<T> extends Switch<T> {
 		return null;
 	}
 
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Type Specifier</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>Type Specifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTypeSpecifier(TypeSpecifier object) {
+		return null;
+	}
+
 	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Named Element</em>'.
 	 * <!-- begin-user-doc --> This implementation
@@ -599,6 +629,21 @@ public class TypesSwitch<T> extends Switch<T> {
 		return null;
 	}
 
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Array Type Specifier</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>Array Type Specifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseArrayTypeSpecifier(ArrayTypeSpecifier object) {
+		return null;
+	}
+
 	/**
 	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
 	 * <!-- begin-user-doc --> This implementation returns

+ 39 - 0
plugins/org.yakindu.base.types/src/org/yakindu/base/types/TypeParameterBinding.java

@@ -0,0 +1,39 @@
+/**
+ * Copyright (c) 2016 committers of YAKINDU 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:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
+package org.yakindu.base.types;
+
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+
+/**
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public class TypeParameterBinding extends AdapterImpl {
+
+	private Type actualType;
+
+	public TypeParameterBinding(Type actualType) {
+		this.actualType = actualType;
+	}
+
+	@Override
+	public boolean isAdapterForType(Object type) {
+		return TypeParameterBinding.class == type;
+	}
+
+	public Type getActualType() {
+		return actualType;
+	}
+	
+	public void setActualType(Type actualType) {
+		this.actualType = actualType;
+	}
+}

+ 44 - 0
plugins/org.yakindu.base.types/src/org/yakindu/base/types/annotations/TypeAnnotations.java

@@ -0,0 +1,44 @@
+package org.yakindu.base.types.annotations;
+
+import org.yakindu.base.types.AnnotatableElement;
+import org.yakindu.base.types.Annotation;
+import org.yakindu.base.types.TypesFactory;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+
+public class TypeAnnotations {
+	
+	private static final String INDEX_OPERATION = "IndexOperation";
+	private static final String BUILT_IN_TYPE = "Built-In-Type";
+
+	public static Annotation createBuiltInTypeAnnotation() {
+		Annotation builtInAnnotation = TypesFactory.eINSTANCE.createAnnotation();
+		builtInAnnotation.setName(BUILT_IN_TYPE);
+		return builtInAnnotation;
+	}
+	
+	public static boolean hasBuiltInTypeAnnotation(AnnotatableElement element) {
+		return hasAnnotation(element, BUILT_IN_TYPE);
+	}
+	
+	public static Annotation createIndexOperationAnnotation() {
+		Annotation indexAnnotation = TypesFactory.eINSTANCE.createAnnotation();
+		indexAnnotation.setName(INDEX_OPERATION);
+		return indexAnnotation;
+	}
+	
+	public static boolean hasIndexOperationAnnotation(AnnotatableElement element) {
+		return hasAnnotation(element, INDEX_OPERATION);
+	}
+
+	public static boolean hasAnnotation(final AnnotatableElement element, final String name) {
+		return Iterables.any(element.getAnnotations(), new Predicate<Annotation>() {
+			@Override
+			public boolean apply(Annotation input) {
+				return input.getName().equals(name);
+			}
+		});
+	}
+	
+}

+ 4 - 0
plugins/org.yakindu.base.types/src/org/yakindu/base/types/inferrer/AbstractTypeSystemInferrer.java

@@ -77,6 +77,8 @@ public abstract class AbstractTypeSystemInferrer implements ITypeSystemInferrer
 		if (object == null || object.eIsProxy())
 			return null;
 		try {
+			// need to invalidate cache to always get current type parameter binding
+			typeCache.invalidate(object);
 			return typeCache.get(object);
 		} catch (Exception e) {
 			// Ignore invalid expressions and recursions
@@ -86,7 +88,9 @@ public abstract class AbstractTypeSystemInferrer implements ITypeSystemInferrer
 
 	private void initTypeCache() {
 		typeCache = CacheBuilder.newBuilder().maximumSize(100).build(new CacheLoader<EObject, Type>() {
+			
 			public Type load(EObject key) {
+				// TODO: this is not relevant anymore as we do not declare type aliases in type system
 				if (key instanceof TypeAlias) {
 					// for type aliases we want to infer their base types
 					return (Type) (EObject) dispatcher.invoke(key);

+ 5 - 0
plugins/org.yakindu.base.types/src/org/yakindu/base/types/typesystem/AbstractTypeSystem.java

@@ -216,4 +216,9 @@ public abstract class AbstractTypeSystem implements ITypeSystem {
 	public Resource getResource() {
 		return resource;
 	}
+	
+	@Override
+	public boolean isArrayType(Type type) {
+		return false;
+	}
 }

+ 10 - 1
plugins/org.yakindu.base.types/src/org/yakindu/base/types/typesystem/GenericTypeSystem.java

@@ -19,6 +19,15 @@ import com.google.inject.Singleton;
  */
 @Singleton
 public class GenericTypeSystem extends AbstractTypeSystem {
+	
+	private static final GenericTypeSystem INSTANCE = new GenericTypeSystem();
+
+	
+	protected GenericTypeSystem() {}
+	
+	public static GenericTypeSystem getInstance() {
+		return INSTANCE;
+	}
 
 	@Override
 	protected void initBuiltInTypes() {
@@ -30,7 +39,7 @@ public class GenericTypeSystem extends AbstractTypeSystem {
 		declarePrimitive(NULL);
 
 		declareSuperType(getType(INTEGER), getType(REAL));
-		
+
 		getType(NULL).setAbstract(true);
 	}
 }

+ 0 - 0
plugins/org.yakindu.base.types/src/org/yakindu/base/types/typesystem/GenericTypeValueProvider.java


Некоторые файлы не были показаны из-за большого количества измененных файлов