Browse Source

Merge remote-tracking branch 'origin/master' into issue_382

Dominik Tesch 9 years ago
parent
commit
790ab86fa0
11 changed files with 117 additions and 73 deletions
  1. 3 1
      plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/features/CDefaultFeatureValueProvider.java
  2. 6 4
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/AbstractDefaultFeatureValueProvider.java
  3. 7 6
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/impl/CoreLibraryDefaultFeatureValueProvider.java
  4. 6 8
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/impl/GenericJavaLibraryDefaultValueProvider.java
  5. 7 6
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/impl/SCTBaseLibaryDefaultFeatureValueProvider.java
  6. 6 9
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/impl/XpandLibraryDefaultFeatureValueProvider.java
  7. 9 16
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/features/CPPDefaultFeatureValueProvider.java
  8. 7 11
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/JavaFeatureValueProvider.java
  9. 12 12
      plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/scoping/STextScopeProvider.java
  10. 10 0
      plugins/org.yakindu.sct.simulation.core.sexec/src/org/yakindu/sct/simulation/core/sexec/interpreter/StextStatementInterpreter.xtend
  11. 44 0
      test-plugins/org.yakindu.sct.simulation.core.sexec.test/src/org/yakindu/sct/model/sexec/interpreter/test/STextInterpreterTest.java

+ 3 - 1
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/features/CDefaultFeatureValueProvider.java

@@ -18,6 +18,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.xtext.xbase.lib.StringExtensions;
 import org.yakindu.sct.generator.core.features.AbstractDefaultFeatureValueProvider;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
+import org.yakindu.sct.model.sgen.FeatureType;
 import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
 import org.yakindu.sct.model.sgen.GeneratorEntry;
 import org.yakindu.sct.model.sgraph.Statechart;
@@ -41,7 +42,8 @@ public class CDefaultFeatureValueProvider extends AbstractDefaultFeatureValuePro
 	}
 
 	@Override
-	protected void setDefaultValue(FeatureParameterValue parameterValue, EObject contextElement) {
+	protected void setDefaultValue(FeatureType featureType, FeatureParameterValue parameterValue,
+			EObject contextElement) {
 
 		GeneratorEntry entry = (GeneratorEntry) contextElement;
 		Statechart statechart = (Statechart) entry.getElementRef();

+ 6 - 4
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/AbstractDefaultFeatureValueProvider.java

@@ -34,13 +34,14 @@ public abstract class AbstractDefaultFeatureValueProvider implements IDefaultFea
 
 	protected static final SGenFactory factory = SGenFactory.eINSTANCE;
 
-	protected abstract void setDefaultValue(FeatureParameterValue parameterValue, EObject contextElement);
+	protected abstract void setDefaultValue(FeatureType featureType, FeatureParameterValue parameterValue,
+			EObject contextElement);
 
 	public final FeatureConfiguration createDefaultFeatureConfiguration(FeatureType type, EObject contextElement) {
 		FeatureConfiguration config = createConfiguration(type);
 		EList<FeatureParameter> parameters = type.getParameters();
 		for (FeatureParameter parameter : parameters) {
-			FeatureParameterValue parameterValue = createParameterValue(parameter, contextElement);
+			FeatureParameterValue parameterValue = createParameterValue(type, parameter, contextElement);
 			if (parameterValue != null && parameterValue.getExpression() != null) {
 				config.getParameterValues().add(parameterValue);
 			}
@@ -48,10 +49,11 @@ public abstract class AbstractDefaultFeatureValueProvider implements IDefaultFea
 		return config;
 	}
 
-	protected FeatureParameterValue createParameterValue(FeatureParameter parameter, EObject contextElement) {
+	protected FeatureParameterValue createParameterValue(FeatureType featureType, FeatureParameter parameter,
+			EObject contextElement) {
 		FeatureParameterValue parameterValue = factory.createFeatureParameterValue();
 		parameterValue.setParameter(parameter);
-		setDefaultValue(parameterValue, contextElement);
+		setDefaultValue(featureType, parameterValue, contextElement);
 		return parameterValue;
 	}
 

+ 7 - 6
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/impl/CoreLibraryDefaultFeatureValueProvider.java

@@ -21,6 +21,7 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.emf.ecore.EObject;
 import org.yakindu.sct.generator.core.features.AbstractDefaultFeatureValueProvider;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
+import org.yakindu.sct.model.sgen.FeatureType;
 import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
 
 /**
@@ -35,15 +36,14 @@ public class CoreLibraryDefaultFeatureValueProvider extends AbstractDefaultFeatu
 	}
 
 	@Override
-	protected void setDefaultValue(FeatureParameterValue parameterValue, EObject contextElement) {
+	protected void setDefaultValue(FeatureType featureType, FeatureParameterValue parameterValue,
+			EObject contextElement) {
 		String parameterName = parameterValue.getParameter().getName();
 		if (OUTLET_FEATURE_TARGET_FOLDER.equals(parameterName)) {
 			parameterValue.setValue("src-gen");
-		} 
-		else if (OUTLET_FEATURE_LIBRARY_TARGET_FOLDER.equals(parameterName)){
+		} else if (OUTLET_FEATURE_LIBRARY_TARGET_FOLDER.equals(parameterName)) {
 			parameterValue.setValue("src");
-		}
-		else if (OUTLET_FEATURE_TARGET_PROJECT.equals(parameterName)) {
+		} else if (OUTLET_FEATURE_TARGET_PROJECT.equals(parameterName)) {
 			parameterValue.setValue(getProject(contextElement).getName());
 		} else if (LICENSE_TEXT.equals(parameterName)) {
 			parameterValue.setValue("Enter license text here");
@@ -57,7 +57,8 @@ public class CoreLibraryDefaultFeatureValueProvider extends AbstractDefaultFeatu
 		if (OUTLET_FEATURE_TARGET_PROJECT.equals(parameterName) && projectExists(parameterValue.getStringValue())
 				&& !projectOpened(parameterValue.getStringValue()))
 			return error(String.format("The Project %s is not open.", parameterValue.getExpression()));
-		if (OUTLET_FEATURE_TARGET_FOLDER.equals(parameterName) || OUTLET_FEATURE_LIBRARY_TARGET_FOLDER.equals(parameterName)) {
+		if (OUTLET_FEATURE_TARGET_FOLDER.equals(parameterName)
+				|| OUTLET_FEATURE_LIBRARY_TARGET_FOLDER.equals(parameterName)) {
 			FeatureParameterValue targetProjectParam = parameterValue.getFeatureConfiguration()
 					.getParameterValue(OUTLET_FEATURE_TARGET_PROJECT);
 			String targetProjectName = targetProjectParam != null ? targetProjectParam.getStringValue() : null;

+ 6 - 8
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/impl/GenericJavaLibraryDefaultValueProvider.java

@@ -22,15 +22,14 @@ import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 import org.yakindu.sct.generator.core.features.AbstractDefaultFeatureValueProvider;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
+import org.yakindu.sct.model.sgen.FeatureType;
 import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
 
-
 /**
  * 
  * @author holger willebrandt - Initial contribution and API
  */
-public class GenericJavaLibraryDefaultValueProvider extends
-		AbstractDefaultFeatureValueProvider {
+public class GenericJavaLibraryDefaultValueProvider extends AbstractDefaultFeatureValueProvider {
 
 	// (ID.)+ID
 	private static final String GENERATOR_CLASS_REGEX = "([a-zA-Z_][a-zA-Z0-9_]*\\.)+[a-zA-Z_][a-zA-Z0-9_]*"; //$NON-NLS-1$
@@ -40,7 +39,7 @@ public class GenericJavaLibraryDefaultValueProvider extends
 	}
 
 	@Override
-	protected void setDefaultValue(FeatureParameterValue parameterValue,
+	protected void setDefaultValue(FeatureType featureType, FeatureParameterValue parameterValue,
 			EObject contextElement) {
 		String parameterName = parameterValue.getParameter().getName();
 		if (GENERATOR_PROJECT.equals(parameterName)) {
@@ -58,15 +57,14 @@ public class GenericJavaLibraryDefaultValueProvider extends
 		}
 		IJavaProject ijp = JavaCore.create(this.getProject(parameterValue));
 		try {
-			if(ijp.findType(value) == null && GENERATOR_CLASS.equals(parameterName)){
+			if (ijp.findType(value) == null && GENERATOR_CLASS.equals(parameterName)) {
 				return error("Generator class does not exist.");
 			}
 		} catch (JavaModelException e) {
 			// Stacktrace
 			e.printStackTrace();
-		}			
-		if (GENERATOR_CLASS.equals(parameterName)
-				&& !value.matches(GENERATOR_CLASS_REGEX)) {
+		}
+		if (GENERATOR_CLASS.equals(parameterName) && !value.matches(GENERATOR_CLASS_REGEX)) {
 			return error("Generator class must be a full qualified class name");
 		}
 		return Status.OK_STATUS;

+ 7 - 6
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/impl/SCTBaseLibaryDefaultFeatureValueProvider.java

@@ -19,27 +19,28 @@ import org.eclipse.emf.ecore.EObject;
 import org.yakindu.sct.generator.core.features.AbstractDefaultFeatureValueProvider;
 import org.yakindu.sct.model.sgen.BoolLiteral;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
+import org.yakindu.sct.model.sgen.FeatureType;
 import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
 
 /**
  * 
  * @author oliver bohl - Initial contribution
  */
-public class SCTBaseLibaryDefaultFeatureValueProvider extends
-AbstractDefaultFeatureValueProvider{
+public class SCTBaseLibaryDefaultFeatureValueProvider extends AbstractDefaultFeatureValueProvider {
 
 	public boolean isProviderFor(FeatureTypeLibrary library) {
 		return LIBRARY_NAME.equals(library.getName());
-	}	
-	
+	}
+
 	@Override
-	protected void setDefaultValue(FeatureParameterValue parameterValue, EObject contextElement) {
+	protected void setDefaultValue(FeatureType featureType, FeatureParameterValue parameterValue,
+			EObject contextElement) {
 		String parameterName = parameterValue.getParameter().getName();
 		if (DEBUG_FEATURE_DUMP_SEXEC.equals(parameterName)) {
 			parameterValue.setValue(false);
 		}
 	}
-	
+
 	public IStatus validateParameterValue(FeatureParameterValue parameterValue) {
 		String parameterName = parameterValue.getParameter().getName();
 		if (DEBUG_FEATURE_DUMP_SEXEC.equals(parameterName)

+ 6 - 9
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/impl/XpandLibraryDefaultFeatureValueProvider.java

@@ -19,14 +19,14 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.emf.ecore.EObject;
 import org.yakindu.sct.generator.core.features.AbstractDefaultFeatureValueProvider;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
+import org.yakindu.sct.model.sgen.FeatureType;
 import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
 
 /**
  * 
  * @author holger willebrandt - Initial contribution and API
  */
-public class XpandLibraryDefaultFeatureValueProvider extends
-		AbstractDefaultFeatureValueProvider {
+public class XpandLibraryDefaultFeatureValueProvider extends AbstractDefaultFeatureValueProvider {
 
 	// (ID::)+ID
 	private static final String XPAND_TEMPLATE_PATH_REGEX = "([a-zA-Z_][a-zA-Z0-9_]*::)+[a-zA-Z_][a-zA-Z0-9_]*"; //$NON-NLS-1$
@@ -36,12 +36,11 @@ public class XpandLibraryDefaultFeatureValueProvider extends
 	}
 
 	@Override
-	protected void setDefaultValue(final FeatureParameterValue parameterValue,
+	protected void setDefaultValue(FeatureType featureType, FeatureParameterValue parameterValue,
 			final EObject contextElement) {
 		String parameterName = parameterValue.getParameter().getName();
 		if (TEMPLATE_FEATURE_TEMPLATE_PATH.equals(parameterName)) {
-			parameterValue
-					.setValue("org::yakindu::sct::generator::xpand::Main::main");
+			parameterValue.setValue("org::yakindu::sct::generator::xpand::Main::main");
 		}
 		if (TEMPLATE_FEATURE_TEMPLATE_PROJECT.equals(parameterName)) {
 			parameterValue.setValue(getProject(contextElement).getName());
@@ -52,12 +51,10 @@ public class XpandLibraryDefaultFeatureValueProvider extends
 		String parameterName = parameterValue.getParameter().getName();
 		String value = parameterValue.getStringValue();
 		if (TEMPLATE_FEATURE_TEMPLATE_PATH.equals(parameterName)
-				&& !parameterValue.getStringValue()
-						.matches(XPAND_TEMPLATE_PATH_REGEX)) {
+				&& !parameterValue.getStringValue().matches(XPAND_TEMPLATE_PATH_REGEX)) {
 			return error("Xpand Template Path Syntax Error");
 		}
-		if (TEMPLATE_FEATURE_TEMPLATE_PROJECT.equals(parameterName)
-				&& !projectExists(value)) {
+		if (TEMPLATE_FEATURE_TEMPLATE_PROJECT.equals(parameterName) && !projectExists(value)) {
 			return error(String.format("The Project %s does not exist", value));
 		}
 		return Status.OK_STATUS;

+ 9 - 16
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/features/CPPDefaultFeatureValueProvider.java

@@ -20,6 +20,7 @@ import org.yakindu.sct.generator.c.features.ICFeatureConstants;
 import org.yakindu.sct.generator.core.features.AbstractDefaultFeatureValueProvider;
 import org.yakindu.sct.generator.cpp.features.CPPFeatureConstants.Visibility;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
+import org.yakindu.sct.model.sgen.FeatureType;
 import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
 import org.yakindu.sct.model.sgen.GeneratorEntry;
 import org.yakindu.sct.model.sgraph.Statechart;
@@ -29,8 +30,7 @@ import org.yakindu.sct.model.sgraph.Statechart;
  * @author andreas muelder - Initial contribution and API
  * 
  */
-public class CPPDefaultFeatureValueProvider extends
-		AbstractDefaultFeatureValueProvider {
+public class CPPDefaultFeatureValueProvider extends AbstractDefaultFeatureValueProvider {
 
 	private static final String INVALID_IDENTIFIER_REGEX = "[^a-z&&[^A-Z&&[^0-9]]]";
 	private static final String VALID_IDENTIFIER_REGEX = "[_a-zA-Z][_a-zA-Z0-9]*";
@@ -40,31 +40,25 @@ public class CPPDefaultFeatureValueProvider extends
 	}
 
 	@Override
-	protected void setDefaultValue(FeatureParameterValue parameterValue,
+	protected void setDefaultValue(FeatureType featureType, FeatureParameterValue parameterValue,
 			EObject contextElement) {
 		GeneratorEntry entry = (GeneratorEntry) contextElement;
 		Statechart statechart = (Statechart) entry.getElementRef();
 
-		if (parameterValue.getParameter().getName()
-				.equals(ICFeatureConstants.PARAMETER_NAMING_MODULE_NAME)) {
+		if (parameterValue.getParameter().getName().equals(ICFeatureConstants.PARAMETER_NAMING_MODULE_NAME)) {
 			parameterValue.setValue(asIdentifier(statechart.getName(), "_"));
 		} else if (parameterValue.getParameter().getName()
 				.equals(ICFeatureConstants.PARAMETER_NAMING_STATEMACHINE_PREFIX)) {
-			parameterValue.setValue(StringExtensions.toFirstLower(asIdentifier(
-					statechart.getName(), "_")));
+			parameterValue.setValue(StringExtensions.toFirstLower(asIdentifier(statechart.getName(), "_")));
 		} else if (parameterValue.getParameter().getName()
 				.equals(ICFeatureConstants.PARAMETER_NAMING_MAX_IDENTIFIER_LENGTH)) {
 			parameterValue.setValue("31");
-		} else if (parameterValue.getParameter().getName()
-				.equals(ICFeatureConstants.PARAMETER_NAMING_SEPARATOR)) {
+		} else if (parameterValue.getParameter().getName().equals(ICFeatureConstants.PARAMETER_NAMING_SEPARATOR)) {
 			parameterValue.setValue("_");
-		} else if (parameterValue
-				.getParameter()
-				.getName()
+		} else if (parameterValue.getParameter().getName()
 				.equals(CPPFeatureConstants.PARAMETER_INNER_FUNCTION_VISIBILITY)) {
 			parameterValue.setValue(Visibility.PRIVATE.toString().toLowerCase());
-		} else if (parameterValue.getParameter().getName()
-				.equals(CPPFeatureConstants.PARAMETER_STATIC_OPC)) {
+		} else if (parameterValue.getParameter().getName().equals(CPPFeatureConstants.PARAMETER_STATIC_OPC)) {
 			parameterValue.setValue(false);
 		}
 	}
@@ -75,8 +69,7 @@ public class CPPDefaultFeatureValueProvider extends
 			if (!parameter.getStringValue().matches(VALID_IDENTIFIER_REGEX)) {
 				return error("Invalid module name");
 			}
-		} else if (ICFeatureConstants.PARAMETER_NAMING_STATEMACHINE_PREFIX
-				.equals(parameterName)) {
+		} else if (ICFeatureConstants.PARAMETER_NAMING_STATEMACHINE_PREFIX.equals(parameterName)) {
 			if (!parameter.getStringValue().matches(VALID_IDENTIFIER_REGEX)) {
 				return error("Invalid function prefix name");
 			}

+ 7 - 11
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/JavaFeatureValueProvider.java

@@ -21,6 +21,7 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.emf.ecore.EObject;
 import org.yakindu.sct.generator.core.features.AbstractDefaultFeatureValueProvider;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
+import org.yakindu.sct.model.sgen.FeatureType;
 import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
 
 /**
@@ -29,19 +30,17 @@ import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
  * @author terfloth - extensions
  * 
  */
-public class JavaFeatureValueProvider extends
-		AbstractDefaultFeatureValueProvider {
+public class JavaFeatureValueProvider extends AbstractDefaultFeatureValueProvider {
 
 	private static final String PACKAGE_NAME_REGEX = "([a-zA-Z_][a-zA-Z0-9_\\.]*)+[a-zA-Z_][a-zA-Z0-9_]*";
 	private static final String SUFFIX_REGEX = "[a-zA-Z0-9_]*";
 
 	@Override
-	protected void setDefaultValue(FeatureParameterValue parameterValue,
+	protected void setDefaultValue(FeatureType featureType, FeatureParameterValue parameterValue,
 			EObject contextElement) {
 		if (parameterValue.getParameter().getName().equals(BASE_PACKAGE)) {
 			parameterValue.setValue("org.yakindu.sct");
-		} else if (parameterValue.getParameter().getName()
-				.equals(IMPLEMENTATION_SUFFIX)) {
+		} else if (parameterValue.getParameter().getName().equals(IMPLEMENTATION_SUFFIX)) {
 			parameterValue.setValue("impl");
 		} else if (parameterValue.getParameter().getName().equals(NAME_PREFIX)) {
 			parameterValue.setValue("Runnable");
@@ -62,12 +61,10 @@ public class JavaFeatureValueProvider extends
 			}
 			// Filter out java keywords
 			for (String keyword : Arrays.asList(JAVA_KEYWORDS)) {
-				Pattern pattern = Pattern.compile("(?:^|\\.)" + keyword
-						+ "(?:$|\\.)");
+				Pattern pattern = Pattern.compile("(?:^|\\.)" + keyword + "(?:$|\\.)");
 				Matcher matcher = pattern.matcher(value.getStringValue());
 				while (matcher.find()) {
-					return error("Java keyword '" + matcher.group()
-							+ "' is not allowed in package names.");
+					return error("Java keyword '" + matcher.group() + "' is not allowed in package names.");
 				}
 			}
 		}
@@ -79,8 +76,7 @@ public class JavaFeatureValueProvider extends
 				Pattern pattern = Pattern.compile("^" + keyword + "$");
 				Matcher matcher = pattern.matcher(value.getStringValue());
 				while (matcher.find()) {
-					return error("Java keyword '" + matcher.group()
-							+ "' is not allowed as suffix.");
+					return error("Java keyword '" + matcher.group() + "' is not allowed as suffix.");
 				}
 			}
 

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

@@ -37,6 +37,7 @@ import org.yakindu.base.expressions.expressions.FeatureCall;
 import org.yakindu.base.types.ComplexType;
 import org.yakindu.base.types.Declaration;
 import org.yakindu.base.types.EnumerationType;
+import org.yakindu.base.types.TypesPackage;
 import org.yakindu.base.xtext.utils.jface.viewers.ContextElementAdapter;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.Scope;
@@ -117,18 +118,17 @@ public class STextScopeProvider extends AbstractDeclarativeScopeProvider {
 		IScope unnamedScope = getUnnamedTopLevelScope(context, reference);
 		Predicate<IEObjectDescription> predicate = calculateFilterPredicate(context, reference);
 		unnamedScope = new FilteringScope(unnamedScope, predicate);
-		// TODO: Performance problem -> fix this in context of Add Support for
-		// Enumerations #165
-		// // add enum types
-		// IScope enumerations = new
-		// FilteringScope(getDelegate().getScope(context, reference),
-		// new Predicate<IEObjectDescription>() {
-		// @Override
-		// public boolean apply(IEObjectDescription input) {
-		// return input.getEClass() == TypesPackage.Literals.ENUMERATION_TYPE;
-		// }
-		// });
-		return new SimpleScope(Iterables.concat(namdScope.getAllElements(), unnamedScope.getAllElements()));
+		
+		// TODO: this might be a performance problem -> fix this in context of Add Support for Enumerations #165
+		IScope enumerations = new FilteringScope(getDelegate().getScope(context, reference),
+				new Predicate<IEObjectDescription>() {
+					@Override
+					public boolean apply(IEObjectDescription input) {
+						return input.getEClass() == TypesPackage.Literals.ENUMERATION_TYPE;
+					}
+				});
+		return new SimpleScope(Iterables.concat(namdScope.getAllElements(), unnamedScope.getAllElements(),
+				enumerations.getAllElements()));
 	}
 
 	public IScope scope_FeatureCall_feature(final FeatureCall context, EReference reference) {

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

@@ -119,6 +119,11 @@ class StextStatementInterpreter extends AbstractStatementInterpreter {
 		throw new IllegalArgumentException
 	}
 
+	def dispatch Object typeCast(Enumerator value, Type type) {
+		if(ts.isSuperType(type, value.owningEnumeration)) return value
+		throw new IllegalArgumentException
+	}
+
 	def dispatch Object typeCast(Object value, Type type) {
 		throw new IllegalArgumentException("Invalid cast " + value.class + " to " + type.name)
 	}
@@ -167,6 +172,11 @@ class StextStatementInterpreter extends AbstractStatementInterpreter {
 				return operationDelegate.execute((expression.reference as Operation), parameter.toArray)
 			}
 		}
+		// for enumeration types just return the referenced enumerator
+		if (expression.reference instanceof Enumerator) {
+			return expression.reference
+		}
+		
 		val executionSlot = context.resolve(expression)
 		if (executionSlot instanceof ExecutionVariable)
 			return executionSlot.getValue

+ 44 - 0
test-plugins/org.yakindu.sct.simulation.core.sexec.test/src/org/yakindu/sct/model/sexec/interpreter/test/STextInterpreterTest.java

@@ -12,6 +12,9 @@ package org.yakindu.sct.model.sexec.interpreter.test;
 
 import static org.junit.Assert.assertEquals;
 
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
 import org.eclipse.xtext.junit4.InjectWith;
 import org.eclipse.xtext.junit4.XtextRunner;
 import org.junit.After;
@@ -19,6 +22,9 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.yakindu.base.expressions.expressions.Expression;
+import org.yakindu.base.types.EnumerationType;
+import org.yakindu.base.types.Enumerator;
+import org.yakindu.base.types.TypesFactory;
 import org.yakindu.base.types.typesystem.GenericTypeSystem;
 import org.yakindu.base.types.typesystem.ITypeSystem;
 import org.yakindu.sct.model.sgraph.Scope;
@@ -459,6 +465,17 @@ public class STextInterpreterTest extends AbstractSTextTest {
 	public void testPlainFalse() {
 		assertEquals(false, executeExpression("false"));
 	}
+	
+	@Test
+	public void testEnumEqualsExpression() {
+		assertEquals(true, execute("internal: var enumVar : EnumType", "enumVar == EnumType.A"));
+	}
+	
+	@Test
+	public void testEnumAssignment() {
+		execute("internal: var enumVar : EnumType", "enumVar = EnumType.A");
+		assertEquals(((EnumerationType)typeSystem.getType("EnumType")).getEnumerator().get(0), getEnumValue());
+	}
 
 	// Convenience...
 
@@ -503,6 +520,29 @@ public class STextInterpreterTest extends AbstractSTextTest {
 		event.setFqName("abc");
 		event.setType(typeSystem.getType(GenericTypeSystem.INTEGER));
 		context.getSlots().add(event);
+		
+		ExecutionVariable enumVar = new ExecutionVariableImpl();
+		enumVar.setName("enumVar");
+		enumVar.setFqName("enumVar");
+		EnumerationType enumType = createEnumType();
+		enumVar.setType(enumType);
+		enumVar.setValue(enumType.getEnumerator().get(0));
+		context.getSlots().add(enumVar);
+	}
+	
+	private EnumerationType createEnumType() {
+		EnumerationType enumType = TypesFactory.eINSTANCE.createEnumerationType();
+		enumType.setName("EnumType");
+		
+		Enumerator enumA = TypesFactory.eINSTANCE.createEnumerator();
+		enumA.setName("A");
+		enumType.getEnumerator().add(enumA);
+		
+		typeSystem.declareType(enumType, enumType.getName());
+		
+		Resource resource = new ResourceImpl(URI.createURI("types2"));
+		resource.getContents().add(enumType);
+		return enumType;
 	}
 
 	protected Object getBoolValue() {
@@ -520,6 +560,10 @@ public class STextInterpreterTest extends AbstractSTextTest {
 	protected Object getStringValue() {
 		return context.getVariable("stringVar").getValue();
 	}
+	
+	protected Object getEnumValue() {
+		return context.getVariable("enumVar").getValue();
+	}
 
 	protected Object executeWithDefaultScope(String expression) {
 		Scope defaultScope = internalScope();