Explorar o código

Added support for super types

Andreas Mülder %!s(int64=10) %!d(string=hai) anos
pai
achega
1323f9b19a

+ 14 - 15
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SequenceBuilder.xtend

@@ -13,8 +13,7 @@ import org.yakindu.base.expressions.expressions.NumericalMultiplyDivideExpressio
 import org.yakindu.base.expressions.expressions.PrimitiveValueExpression
 import org.yakindu.base.expressions.expressions.RealLiteral
 import org.yakindu.base.expressions.expressions.StringLiteral
-import org.yakindu.base.types.interpreter.ITypeSystemInterpreter
-import org.yakindu.base.types.typesystem.ITypeSystem
+import org.yakindu.base.types.ITypeSystemRegistry
 import org.yakindu.sct.model.sexec.ExecutionFlow
 import org.yakindu.sct.model.sexec.ExecutionRegion
 import org.yakindu.sct.model.sexec.ExecutionState
@@ -40,9 +39,8 @@ class SequenceBuilder {
 	@Inject extension SexecExtensions sexec
 	@Inject extension SexecElementMapping mapping
 	@Inject extension TraceExtensions trace
-	
-	@Inject extension ITypeSystemInterpreter
-	@Inject extension ITypeSystem ts
+
+	@Inject extension ITypeSystemRegistry ts
 
 	@Inject @Named("ADD_TRACES")
 	boolean _addTraceSteps
@@ -243,13 +241,12 @@ class SequenceBuilder {
 					}
 				}
 			}
-			
+
 			// save the history on entering a state 
 			val execRegion = state.parentRegion.create
 			if (execRegion.historyVector != null) {
 				seq.steps += execRegion.newSaveHistory()
 			}
-			
 
 			execState.enterSequences += seq
 		}
@@ -449,7 +446,7 @@ class SequenceBuilder {
 		val initSequence = sexec.factory.createSequence
 		initSequence.name = "staticInit"
 		initSequence.comment = "The statecharts init sequence for constants." + sc.name
-	
+
 		for (VariableDefinition vd : flow.getVariablesForInitSequence(true)) {
 			initSequence.addVariableInitializationStep(vd)
 		}
@@ -457,7 +454,7 @@ class SequenceBuilder {
 		flow.staticInitSequence = initSequence
 		return initSequence
 	}
-	
+
 	/**
 	 * Defines the sequence of initialization steps. 
 	 * 
@@ -468,7 +465,7 @@ class SequenceBuilder {
 		val initSequence = sexec.factory.createSequence
 		initSequence.name = "init"
 		initSequence.comment = "Default init sequence for statechart " + sc.name
-	
+
 		for (VariableDefinition vd : flow.getVariablesForInitSequence(false)) {
 			initSequence.addVariableInitializationStep(vd)
 		}
@@ -476,19 +473,21 @@ class SequenceBuilder {
 		flow.initSequence = initSequence
 		return initSequence
 	}
-	
+
 	protected def getVariablesForInitSequence(ExecutionFlow flow, boolean const) {
-		val statechartVariables = flow.scopes.map(s|s.variables).flatten.filter(typeof(VariableDefinition)).filter(v | v.const == const)
-		val importedVariables = flow.scopes.map(s|s.declarations).flatten.filter(typeof(ImportDeclaration)).map(d|d.declaration).filter(typeof(VariableDefinition))
+		val statechartVariables = flow.scopes.map(s|s.variables).flatten.filter(typeof(VariableDefinition)).filter(
+			v|v.const == const)
+		val importedVariables = flow.scopes.map(s|s.declarations).flatten.filter(typeof(ImportDeclaration)).map(
+			d|d.declaration).filter(typeof(VariableDefinition))
 		return statechartVariables + importedVariables
 	}
-	
+
 	def addVariableInitializationStep(Sequence initSequence, VariableDefinition vd) {
 		if (vd.effectiveInitialValue != null) {
 			initSequence.steps.add(vd.createInitialization)
 		}
 	}
-	
+
 	//TODO: Move to type system
 	def effectiveInitialValue(VariableDefinition vd) {
 		if (vd.initialValue != null) {

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

@@ -20,8 +20,6 @@ import org.yakindu.base.expressions.expressions.Expression;
 import org.yakindu.base.expressions.expressions.FeatureCall;
 import org.yakindu.base.expressions.inferrer.ExpressionsTypeInferrer;
 import org.yakindu.base.types.Event;
-import org.yakindu.base.types.Operation;
-import org.yakindu.base.types.Property;
 import org.yakindu.base.types.Type;
 import org.yakindu.sct.model.sgraph.Scope;
 import org.yakindu.sct.model.stext.stext.ActiveStateReferenceExpression;
@@ -42,7 +40,6 @@ public class STextTypeInferrer extends ExpressionsTypeInferrer {
 	public static final String EVENT_DEFINITION = "Cannot assign a value of type %s to an event of type %s.";
 	public static final String GUARD = "The evaluation result of a guard expression must be of type boolean";
 	public static final String TIME_SPEC = "The evaluation result of a time expression must be of type integer";
-	public static final String VARIABLE_VOID_TYPE = "'void' is an invalid type for variables";
 	public static final String MISSING_VALUE = "Need to assign a value to an event of type %s.";
 
 	public Object infer(VariableDefinition e) {
@@ -55,17 +52,6 @@ public class STextTypeInferrer extends ExpressionsTypeInferrer {
 		return inferTypeDispatch(type);
 	}
 	
-	public Object infer(Property p){
-		Type type = inferTypeDispatch(p.getType());
-		assertNotType(type, VARIABLE_VOID_TYPE, getType(VOID));
-		return inferTypeDispatch(type);
-		
-	}
-	
-	public Object infer(Operation e) {
-		return inferTypeDispatch(e.getType() != null ? e.getType() : getType(VOID));
-	}
-
 	public Object infer(Event e) {
 		// if an event is used within an expression, the type is boolean and the
 		// value indicates if the event is raised or not