Преглед на файлове

Added Type Cast Expression

Andreas Mülder преди 11 години
родител
ревизия
8533d5cfe8
променени са 14 файла, в които са добавени 546 реда и са изтрити 14 реда
  1. 3 2
      plugins/org.yakindu.base.expressions/.launch/Launch Runtime Eclipse.launch
  2. 9 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ExpressionsFactory.java
  3. 101 6
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ExpressionsPackage.java
  4. 77 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/TypeCastExpression.java
  5. 11 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ExpressionsFactoryImpl.java
  6. 44 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/ExpressionsPackageImpl.java
  7. 236 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/impl/TypeCastExpressionImpl.java
  8. 18 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/util/ExpressionsAdapterFactory.java
  9. 22 0
      plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/util/ExpressionsSwitch.java
  10. 5 0
      plugins/org.yakindu.base.expressions/model/Expressions.ecore
  11. 7 2
      plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/Expressions.xtext
  12. 2 0
      plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/GenerateExpressions.mwe2
  13. 10 3
      plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/inferrer/DefaultExpressionsTypeInferrer.xtend
  14. 1 1
      plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/validation/ExpressionsJavaValidator.java

+ 3 - 2
plugins/org.yakindu.base.expressions/.launch/Launch Runtime Eclipse.launch

@@ -13,7 +13,7 @@
 <stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Launch Runtime Eclipse"/>
 <booleanAttribute key="default" value="true"/>
 <booleanAttribute key="includeOptional" value="true"/>
-<stringAttribute key="location" value="${workspace_loc}/../runtime-EclipseXtext"/>
+<stringAttribute key="location" value="${workspace_loc}/../runtime-EclipseXtext2345"/>
 <listAttribute key="org.eclipse.debug.ui.favoriteGroups">
 <listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
 <listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
@@ -21,12 +21,13 @@
 <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx512m -XX:MaxPermSize=256m"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx512m -XX:MaxPermSize=256m &#13;&#10;-Dorg.eclipse.epp.internal.mpc.core.service.DefaultCatalogService.url=http://localhost:8080"/>
 <stringAttribute key="pde.version" value="3.3"/>
 <stringAttribute key="product" value="org.eclipse.platform.ide"/>
 <booleanAttribute key="show_selected_only" value="false"/>
 <stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
 <booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
 <booleanAttribute key="useDefaultConfig" value="true"/>
 <booleanAttribute key="useDefaultConfigArea" value="true"/>
 <booleanAttribute key="useProduct" value="true"/>

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

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

+ 101 - 6
plugins/org.yakindu.base.expressions/emf-gen/org/yakindu/base/expressions/expressions/ExpressionsPackage.java

@@ -936,6 +936,43 @@ public interface ExpressionsPackage extends EPackage {
 	 */
 	int PARENTHESIZED_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
 
+	/**
+	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.impl.TypeCastExpressionImpl <em>Type Cast Expression</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.base.expressions.expressions.impl.TypeCastExpressionImpl
+	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getTypeCastExpression()
+	 * @generated
+	 */
+	int TYPE_CAST_EXPRESSION = 25;
+
+	/**
+	 * The feature id for the '<em><b>Operand</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TYPE_CAST_EXPRESSION__OPERAND = EXPRESSION_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TYPE_CAST_EXPRESSION__TYPE = EXPRESSION_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Type Cast Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TYPE_CAST_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 2;
+
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.AssignmentOperator <em>Assignment Operator</em>}' enum.
 	 * <!-- begin-user-doc -->
@@ -944,7 +981,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getAssignmentOperator()
 	 * @generated
 	 */
-	int ASSIGNMENT_OPERATOR = 25;
+	int ASSIGNMENT_OPERATOR = 26;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.ShiftOperator <em>Shift Operator</em>}' enum.
@@ -954,7 +991,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getShiftOperator()
 	 * @generated
 	 */
-	int SHIFT_OPERATOR = 26;
+	int SHIFT_OPERATOR = 27;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.AdditiveOperator <em>Additive Operator</em>}' enum.
@@ -964,7 +1001,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getAdditiveOperator()
 	 * @generated
 	 */
-	int ADDITIVE_OPERATOR = 27;
+	int ADDITIVE_OPERATOR = 28;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.MultiplicativeOperator <em>Multiplicative Operator</em>}' enum.
@@ -974,7 +1011,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getMultiplicativeOperator()
 	 * @generated
 	 */
-	int MULTIPLICATIVE_OPERATOR = 28;
+	int MULTIPLICATIVE_OPERATOR = 29;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.UnaryOperator <em>Unary Operator</em>}' enum.
@@ -984,7 +1021,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getUnaryOperator()
 	 * @generated
 	 */
-	int UNARY_OPERATOR = 29;
+	int UNARY_OPERATOR = 30;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.expressions.expressions.RelationalOperator <em>Relational Operator</em>}' enum.
@@ -994,7 +1031,7 @@ public interface ExpressionsPackage extends EPackage {
 	 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getRelationalOperator()
 	 * @generated
 	 */
-	int RELATIONAL_OPERATOR = 30;
+	int RELATIONAL_OPERATOR = 31;
 
 
 	/**
@@ -1742,6 +1779,38 @@ public interface ExpressionsPackage extends EPackage {
 	 */
 	EReference getParenthesizedExpression_Expression();
 
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.base.expressions.expressions.TypeCastExpression <em>Type Cast Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Type Cast Expression</em>'.
+	 * @see org.yakindu.base.expressions.expressions.TypeCastExpression
+	 * @generated
+	 */
+	EClass getTypeCastExpression();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.yakindu.base.expressions.expressions.TypeCastExpression#getOperand <em>Operand</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Operand</em>'.
+	 * @see org.yakindu.base.expressions.expressions.TypeCastExpression#getOperand()
+	 * @see #getTypeCastExpression()
+	 * @generated
+	 */
+	EReference getTypeCastExpression_Operand();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.yakindu.base.expressions.expressions.TypeCastExpression#getType <em>Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Type</em>'.
+	 * @see org.yakindu.base.expressions.expressions.TypeCastExpression#getType()
+	 * @see #getTypeCastExpression()
+	 * @generated
+	 */
+	EReference getTypeCastExpression_Type();
+
 	/**
 	 * Returns the meta object for enum '{@link org.yakindu.base.expressions.expressions.AssignmentOperator <em>Assignment Operator</em>}'.
 	 * <!-- begin-user-doc -->
@@ -2434,6 +2503,32 @@ public interface ExpressionsPackage extends EPackage {
 		 */
 		EReference PARENTHESIZED_EXPRESSION__EXPRESSION = eINSTANCE.getParenthesizedExpression_Expression();
 
+		/**
+		 * The meta object literal for the '{@link org.yakindu.base.expressions.expressions.impl.TypeCastExpressionImpl <em>Type Cast Expression</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.base.expressions.expressions.impl.TypeCastExpressionImpl
+		 * @see org.yakindu.base.expressions.expressions.impl.ExpressionsPackageImpl#getTypeCastExpression()
+		 * @generated
+		 */
+		EClass TYPE_CAST_EXPRESSION = eINSTANCE.getTypeCastExpression();
+
+		/**
+		 * The meta object literal for the '<em><b>Operand</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TYPE_CAST_EXPRESSION__OPERAND = eINSTANCE.getTypeCastExpression_Operand();
+
+		/**
+		 * The meta object literal for the '<em><b>Type</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TYPE_CAST_EXPRESSION__TYPE = eINSTANCE.getTypeCastExpression_Type();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.base.expressions.expressions.AssignmentOperator <em>Assignment Operator</em>}' enum.
 		 * <!-- begin-user-doc -->

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

@@ -0,0 +1,77 @@
+/**
+ */
+package org.yakindu.base.expressions.expressions;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Type Cast Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <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
+ * @generated
+ */
+public interface TypeCastExpression extends Expression {
+	/**
+	 * Returns the value of the '<em><b>Operand</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Operand</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Operand</em>' containment reference.
+	 * @see #setOperand(Expression)
+	 * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getTypeCastExpression_Operand()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Expression getOperand();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.base.expressions.expressions.TypeCastExpression#getOperand <em>Operand</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Operand</em>' containment reference.
+	 * @see #getOperand()
+	 * @generated
+	 */
+	void setOperand(Expression value);
+
+	/**
+	 * 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(EObject)
+	 * @see org.yakindu.base.expressions.expressions.ExpressionsPackage#getTypeCastExpression_Type()
+	 * @model
+	 * @generated
+	 */
+	EObject getType();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.base.expressions.expressions.TypeCastExpression#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(EObject value);
+
+} // TypeCastExpression

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

@@ -80,6 +80,7 @@ public class ExpressionsFactoryImpl extends EFactoryImpl implements ExpressionsF
 			case ExpressionsPackage.FEATURE_CALL: return createFeatureCall();
 			case ExpressionsPackage.ELEMENT_REFERENCE_EXPRESSION: return createElementReferenceExpression();
 			case ExpressionsPackage.PARENTHESIZED_EXPRESSION: return createParenthesizedExpression();
+			case ExpressionsPackage.TYPE_CAST_EXPRESSION: return createTypeCastExpression();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
@@ -365,6 +366,16 @@ public class ExpressionsFactoryImpl extends EFactoryImpl implements ExpressionsF
 		return parenthesizedExpression;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypeCastExpression createTypeCastExpression() {
+		TypeCastExpressionImpl typeCastExpression = new TypeCastExpressionImpl();
+		return typeCastExpression;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->

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

@@ -42,6 +42,7 @@ import org.yakindu.base.expressions.expressions.RelationalOperator;
 import org.yakindu.base.expressions.expressions.ShiftExpression;
 import org.yakindu.base.expressions.expressions.ShiftOperator;
 import org.yakindu.base.expressions.expressions.StringLiteral;
+import org.yakindu.base.expressions.expressions.TypeCastExpression;
 import org.yakindu.base.expressions.expressions.UnaryOperator;
 
 /**
@@ -226,6 +227,13 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 	 */
 	private EClass parenthesizedExpressionEClass = null;
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass typeCastExpressionEClass = null;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -959,6 +967,33 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		return (EReference)parenthesizedExpressionEClass.getEStructuralFeatures().get(0);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTypeCastExpression() {
+		return typeCastExpressionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTypeCastExpression_Operand() {
+		return (EReference)typeCastExpressionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTypeCastExpression_Type() {
+		return (EReference)typeCastExpressionEClass.getEStructuralFeatures().get(1);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1136,6 +1171,10 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		parenthesizedExpressionEClass = createEClass(PARENTHESIZED_EXPRESSION);
 		createEReference(parenthesizedExpressionEClass, PARENTHESIZED_EXPRESSION__EXPRESSION);
 
+		typeCastExpressionEClass = createEClass(TYPE_CAST_EXPRESSION);
+		createEReference(typeCastExpressionEClass, TYPE_CAST_EXPRESSION__OPERAND);
+		createEReference(typeCastExpressionEClass, TYPE_CAST_EXPRESSION__TYPE);
+
 		// Create enums
 		assignmentOperatorEEnum = createEEnum(ASSIGNMENT_OPERATOR);
 		shiftOperatorEEnum = createEEnum(SHIFT_OPERATOR);
@@ -1196,6 +1235,7 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		featureCallEClass.getESuperTypes().add(this.getExpression());
 		elementReferenceExpressionEClass.getESuperTypes().add(this.getExpression());
 		parenthesizedExpressionEClass.getESuperTypes().add(this.getExpression());
+		typeCastExpressionEClass.getESuperTypes().add(this.getExpression());
 
 		// Initialize classes and features; add operations and parameters
 		initEClass(expressionEClass, Expression.class, "Expression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -1293,6 +1333,10 @@ public class ExpressionsPackageImpl extends EPackageImpl implements ExpressionsP
 		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);
 
+		initEClass(typeCastExpressionEClass, TypeCastExpression.class, "TypeCastExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getTypeCastExpression_Operand(), this.getExpression(), null, "operand", null, 0, 1, TypeCastExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getTypeCastExpression_Type(), ecorePackage.getEObject(), null, "type", null, 0, 1, TypeCastExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
 		// Initialize enums and add enum literals
 		initEEnum(assignmentOperatorEEnum, AssignmentOperator.class, "AssignmentOperator");
 		addEEnumLiteral(assignmentOperatorEEnum, AssignmentOperator.ASSIGN);

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

@@ -0,0 +1,236 @@
+/**
+ */
+package org.yakindu.base.expressions.expressions.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.yakindu.base.expressions.expressions.Expression;
+import org.yakindu.base.expressions.expressions.ExpressionsPackage;
+import org.yakindu.base.expressions.expressions.TypeCastExpression;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Type Cast Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <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
+ */
+public class TypeCastExpressionImpl extends ExpressionImpl implements TypeCastExpression {
+	/**
+	 * The cached value of the '{@link #getOperand() <em>Operand</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOperand()
+	 * @generated
+	 * @ordered
+	 */
+	protected Expression operand;
+
+	/**
+	 * The cached value of the '{@link #getType() <em>Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected EObject type;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TypeCastExpressionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ExpressionsPackage.Literals.TYPE_CAST_EXPRESSION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Expression getOperand() {
+		return operand;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetOperand(Expression newOperand, NotificationChain msgs) {
+		Expression oldOperand = operand;
+		operand = newOperand;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ExpressionsPackage.TYPE_CAST_EXPRESSION__OPERAND, oldOperand, newOperand);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOperand(Expression newOperand) {
+		if (newOperand != operand) {
+			NotificationChain msgs = null;
+			if (operand != null)
+				msgs = ((InternalEObject)operand).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ExpressionsPackage.TYPE_CAST_EXPRESSION__OPERAND, null, msgs);
+			if (newOperand != null)
+				msgs = ((InternalEObject)newOperand).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ExpressionsPackage.TYPE_CAST_EXPRESSION__OPERAND, null, msgs);
+			msgs = basicSetOperand(newOperand, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ExpressionsPackage.TYPE_CAST_EXPRESSION__OPERAND, newOperand, newOperand));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject getType() {
+		if (type != null && type.eIsProxy()) {
+			InternalEObject oldType = (InternalEObject)type;
+			type = eResolveProxy(oldType);
+			if (type != oldType) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ExpressionsPackage.TYPE_CAST_EXPRESSION__TYPE, oldType, type));
+			}
+		}
+		return type;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject basicGetType() {
+		return type;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setType(EObject newType) {
+		EObject oldType = type;
+		type = newType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ExpressionsPackage.TYPE_CAST_EXPRESSION__TYPE, oldType, type));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ExpressionsPackage.TYPE_CAST_EXPRESSION__OPERAND:
+				return basicSetOperand(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ExpressionsPackage.TYPE_CAST_EXPRESSION__OPERAND:
+				return getOperand();
+			case ExpressionsPackage.TYPE_CAST_EXPRESSION__TYPE:
+				if (resolve) return getType();
+				return basicGetType();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ExpressionsPackage.TYPE_CAST_EXPRESSION__OPERAND:
+				setOperand((Expression)newValue);
+				return;
+			case ExpressionsPackage.TYPE_CAST_EXPRESSION__TYPE:
+				setType((EObject)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ExpressionsPackage.TYPE_CAST_EXPRESSION__OPERAND:
+				setOperand((Expression)null);
+				return;
+			case ExpressionsPackage.TYPE_CAST_EXPRESSION__TYPE:
+				setType((EObject)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ExpressionsPackage.TYPE_CAST_EXPRESSION__OPERAND:
+				return operand != null;
+			case ExpressionsPackage.TYPE_CAST_EXPRESSION__TYPE:
+				return type != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //TypeCastExpressionImpl

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

@@ -168,6 +168,10 @@ public class ExpressionsAdapterFactory extends AdapterFactoryImpl {
 				return createParenthesizedExpressionAdapter();
 			}
 			@Override
+			public Adapter caseTypeCastExpression(TypeCastExpression object) {
+				return createTypeCastExpressionAdapter();
+			}
+			@Override
 			public Adapter defaultCase(EObject object) {
 				return createEObjectAdapter();
 			}
@@ -537,6 +541,20 @@ public class ExpressionsAdapterFactory extends AdapterFactoryImpl {
 		return null;
 	}
 
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.base.expressions.expressions.TypeCastExpression <em>Type Cast Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.yakindu.base.expressions.expressions.TypeCastExpression
+	 * @generated
+	 */
+	public Adapter createTypeCastExpressionAdapter() {
+		return null;
+	}
+
 	/**
 	 * Creates a new adapter for the default case.
 	 * <!-- begin-user-doc -->

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

@@ -239,6 +239,13 @@ public class ExpressionsSwitch<T> extends Switch<T> {
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case ExpressionsPackage.TYPE_CAST_EXPRESSION: {
+				TypeCastExpression typeCastExpression = (TypeCastExpression)theEObject;
+				T result = caseTypeCastExpression(typeCastExpression);
+				if (result == null) result = caseExpression(typeCastExpression);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			default: return defaultCase(theEObject);
 		}
 	}
@@ -618,6 +625,21 @@ public class ExpressionsSwitch<T> extends Switch<T> {
 		return null;
 	}
 
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Type Cast Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Type Cast Expression</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTypeCastExpression(TypeCastExpression object) {
+		return null;
+	}
+
 	/**
 	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
 	 * <!-- begin-user-doc -->

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

@@ -163,4 +163,9 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
         containment="true"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TypeCastExpression" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+  </eClassifiers>
 </ecore:EPackage>

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

@@ -11,6 +11,7 @@
 grammar org.yakindu.base.expressions.Expressions with org.eclipse.xtext.common.Terminals
 
 import "http://www.eclipse.org/emf/2002/Ecore" as ecore
+import "http://www.yakindu.org/base/types/2.0.0" as types
 import "http://www.yakindu.org/base/expressions/Expressions"
 
 Expression:
@@ -70,8 +71,12 @@ NumericalMultiplyDivideExpression returns Expression:
 	rightOperand=NumericalUnaryExpression)*;
 
 NumericalUnaryExpression returns Expression:
-	PrimaryExpression | {NumericalUnaryExpression}
-	operator=UnaryOperator operand=PrimaryExpression;
+	TypeCastExpression | {NumericalUnaryExpression}
+	operator=UnaryOperator operand=TypeCastExpression;
+
+TypeCastExpression returns Expression:
+	PrimaryExpression (({TypeCastExpression.operand=current} 'as') type=[types::Type|ID])*
+;
 
 PrimaryExpression returns Expression:
 	PrimitiveValueExpression

+ 2 - 0
plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/GenerateExpressions.mwe2

@@ -17,6 +17,8 @@ Workflow {
     	platformUri = "${runtimeProject}/.."
 		registerGenModelFile = "platform:/resource/org.yakindu.base.expressions/model/Expressions.genmodel"
 		registerEcoreFile ="platform:/resource/org.yakindu.base.expressions/model/Expressions.ecore"
+		registerGenModelFile = "platform:/resource/org.yakindu.base.types/model/types.genmodel"
+		registerGeneratedEPackage = "org.yakindu.base.types.TypesPackage"
     }
     
     component = DirectoryCleaner {

+ 10 - 3
plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/inferrer/DefaultExpressionsTypeInferrer.xtend

@@ -32,6 +32,7 @@ import org.yakindu.base.expressions.expressions.LogicalNotExpression
 import org.yakindu.base.expressions.expressions.LogicalOrExpression
 import org.yakindu.base.expressions.expressions.LogicalRelationExpression
 import org.yakindu.base.expressions.expressions.MultiplicativeOperator
+import org.yakindu.base.expressions.expressions.NullLiteral
 import org.yakindu.base.expressions.expressions.NumericalAddSubtractExpression
 import org.yakindu.base.expressions.expressions.NumericalMultiplyDivideExpression
 import org.yakindu.base.expressions.expressions.NumericalUnaryExpression
@@ -42,6 +43,7 @@ import org.yakindu.base.expressions.expressions.RelationalOperator
 import org.yakindu.base.expressions.expressions.ShiftExpression
 import org.yakindu.base.expressions.expressions.ShiftOperator
 import org.yakindu.base.expressions.expressions.StringLiteral
+import org.yakindu.base.expressions.expressions.TypeCastExpression
 import org.yakindu.base.expressions.expressions.UnaryOperator
 import org.yakindu.base.types.Enumerator
 import org.yakindu.base.types.ITypeSystem
@@ -50,7 +52,7 @@ import org.yakindu.base.types.InferenceIssue
 import org.yakindu.base.types.InferenceResult
 import org.yakindu.base.types.InferredType
 import org.yakindu.base.types.TypedElement
-import org.yakindu.base.expressions.expressions.NullLiteral
+import org.yakindu.base.types.Type
 
 /**
  * 
@@ -169,6 +171,11 @@ class DefaultExpressionsTypeInferrer implements IExpressionsTypeInferrer {
 		return expression.value.doInferType
 	}
 
+	def dispatch InferenceResult doInferType(TypeCastExpression expression) {
+		return inferResult(expression.operand.doInferType, new InferenceResult(expression.type as Type),
+			ITypeSystem.BinaryOperators::CAST)
+	}
+
 	def dispatch InferenceResult doInferType(ShiftExpression expression) {
 		return inferResult(expression.leftOperand.doInferType, expression.rightOperand.doInferType,
 			getTypeSystemOperator(expression.operator))
@@ -198,9 +205,9 @@ class DefaultExpressionsTypeInferrer implements IExpressionsTypeInferrer {
 	def dispatch InferenceResult doInferType(IntLiteral literal) {
 		return inferTypeForLiteral(literal.value);
 	}
-	
+
 	def dispatch InferenceResult doInferType(NullLiteral literal) {
-		return  inferTypeForLiteral(null);
+		return inferTypeForLiteral(null);
 	}
 
 	def dispatch InferenceResult doInferType(Literal l) {

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

@@ -163,7 +163,7 @@ public class ExpressionsJavaValidator extends org.yakindu.base.expressions.valid
 			// linking problem occurred, which is handled in other locations
 		}
 	}
-
+	
 	protected void report(InferenceResult result, EStructuralFeature feature) {
 		if (result.getIssues().isEmpty())
 			return;