Selaa lähdekoodia

adopted sexec transformations to metamodel changes

terfloth@itemis.de 13 vuotta sitten
vanhempi
commit
8a27036fc0

+ 20 - 6
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/ModelSequencer.xtend

@@ -63,6 +63,9 @@ import com.sun.org.apache.xerces.internal.dom.ParentNode$UserDataRecord
 import org.yakindu.sct.model.sexec.StateSwitch
 import org.yakindu.sct.model.stext.stext.OnCycleEvent
 import org.yakindu.sct.model.stext.stext.AlwaysEvent
+import org.yakindu.sct.model.stext.stext.IntLiteral
+import org.yakindu.sct.model.stext.stext.BoolLiteral
+import javax.sound.sampled.BooleanControl$Type
 
 class ModelSequencer {
 	
@@ -375,7 +378,9 @@ class ModelSequencer {
 	
 	def Statement buildValueExpression(TimeEventSpec tes) {
 		val PrimitiveValueExpression pve = stextFactory.createPrimitiveValueExpression 
-		pve.value = tes.value.toString
+		val IntLiteral intLit = stextFactory.createIntLiteral
+		intLit.value = tes.value
+		pve.value = intLit
 	
 		switch (tes.unit) {
 			case TimeUnit::MILLISECOND : pve
@@ -389,7 +394,9 @@ class ModelSequencer {
 	def Statement divide(Expression stmnt, long divisor) {
 		val NumericalMultiplyDivideExpression div = stextFactory.createNumericalMultiplyDivideExpression
 		val PrimitiveValueExpression pve = stextFactory.createPrimitiveValueExpression 
-		pve.value = divisor.toString
+		val IntLiteral intLit = stextFactory.createIntLiteral
+		intLit.value = divisor.intValue
+		pve.value = intLit
 		
 		div.operator = MultiplicativeOperator::DIV
 		div.leftOperand = stmnt
@@ -401,7 +408,9 @@ class ModelSequencer {
 	def Statement multiply(Expression stmnt, long factor) {
 		val NumericalMultiplyDivideExpression div = stextFactory.createNumericalMultiplyDivideExpression
 		val PrimitiveValueExpression pve = stextFactory.createPrimitiveValueExpression 
-		pve.value = factor.toString
+		val IntLiteral intLit = stextFactory.createIntLiteral
+		intLit.value = factor.intValue
+		pve.value = intLit
 		
 		div.operator = MultiplicativeOperator::MUL
 		div.leftOperand = stmnt
@@ -559,15 +568,20 @@ class ModelSequencer {
 
 	def dispatch Expression raised(OnCycleEvent e) {
 		val r = stextFactory.createPrimitiveValueExpression
-		r.value = 'true'
+		val BoolLiteral boolLit = stextFactory.createBoolLiteral
+		boolLit.value = true		
+		r.value = boolLit
 		return r
 	}
 	
 	def dispatch Expression raised(AlwaysEvent e) {
 		val r = stextFactory.createPrimitiveValueExpression
-		r.value = 'true'
-		return r		
+		val BoolLiteral boolLit = stextFactory.createBoolLiteral
+		boolLit.value = true		
+		r.value = boolLit
+		return r
 	}
+
 	
 	/* ==========================================================================
 	 * HANDLING TIME EVENTS

+ 29 - 8
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/ModelSequencer.java

@@ -57,10 +57,12 @@ import org.yakindu.sct.model.sgraph.Variable;
 import org.yakindu.sct.model.sgraph.Vertex;
 import org.yakindu.sct.model.stext.stext.AlwaysEvent;
 import org.yakindu.sct.model.stext.stext.Assignment;
+import org.yakindu.sct.model.stext.stext.BoolLiteral;
 import org.yakindu.sct.model.stext.stext.ElementReferenceExpression;
 import org.yakindu.sct.model.stext.stext.EventDefinition;
 import org.yakindu.sct.model.stext.stext.EventSpec;
 import org.yakindu.sct.model.stext.stext.Expression;
+import org.yakindu.sct.model.stext.stext.IntLiteral;
 import org.yakindu.sct.model.stext.stext.LocalReaction;
 import org.yakindu.sct.model.stext.stext.LogicalAndExpression;
 import org.yakindu.sct.model.stext.stext.LogicalOrExpression;
@@ -719,9 +721,12 @@ public class ModelSequencer {
       StextFactory _stextFactory = this.stextFactory();
       PrimitiveValueExpression _createPrimitiveValueExpression = _stextFactory.createPrimitiveValueExpression();
       final PrimitiveValueExpression pve = _createPrimitiveValueExpression;
+      StextFactory _stextFactory_1 = this.stextFactory();
+      IntLiteral _createIntLiteral = _stextFactory_1.createIntLiteral();
+      final IntLiteral intLit = _createIntLiteral;
       int _value = tes.getValue();
-      String _string = ((Integer)_value).toString();
-      pve.setValue(_string);
+      intLit.setValue(_value);
+      pve.setValue(intLit);
       Statement _switchResult = null;
       TimeUnit _unit = tes.getUnit();
       final TimeUnit __valOfSwitchOver = _unit;
@@ -763,8 +768,12 @@ public class ModelSequencer {
       StextFactory _stextFactory_1 = this.stextFactory();
       PrimitiveValueExpression _createPrimitiveValueExpression = _stextFactory_1.createPrimitiveValueExpression();
       final PrimitiveValueExpression pve = _createPrimitiveValueExpression;
-      String _string = ((Long)divisor).toString();
-      pve.setValue(_string);
+      StextFactory _stextFactory_2 = this.stextFactory();
+      IntLiteral _createIntLiteral = _stextFactory_2.createIntLiteral();
+      final IntLiteral intLit = _createIntLiteral;
+      int _intValue = ((Long)divisor).intValue();
+      intLit.setValue(_intValue);
+      pve.setValue(intLit);
       div.setOperator(MultiplicativeOperator.DIV);
       div.setLeftOperand(stmnt);
       div.setRightOperand(pve);
@@ -782,8 +791,12 @@ public class ModelSequencer {
       StextFactory _stextFactory_1 = this.stextFactory();
       PrimitiveValueExpression _createPrimitiveValueExpression = _stextFactory_1.createPrimitiveValueExpression();
       final PrimitiveValueExpression pve = _createPrimitiveValueExpression;
-      String _string = ((Long)factor).toString();
-      pve.setValue(_string);
+      StextFactory _stextFactory_2 = this.stextFactory();
+      IntLiteral _createIntLiteral = _stextFactory_2.createIntLiteral();
+      final IntLiteral intLit = _createIntLiteral;
+      int _intValue = ((Long)factor).intValue();
+      intLit.setValue(_intValue);
+      pve.setValue(intLit);
       div.setOperator(MultiplicativeOperator.MUL);
       div.setLeftOperand(stmnt);
       div.setRightOperand(pve);
@@ -1160,7 +1173,11 @@ public class ModelSequencer {
       StextFactory _stextFactory = this.stextFactory();
       PrimitiveValueExpression _createPrimitiveValueExpression = _stextFactory.createPrimitiveValueExpression();
       final PrimitiveValueExpression r = _createPrimitiveValueExpression;
-      r.setValue("true");
+      StextFactory _stextFactory_1 = this.stextFactory();
+      BoolLiteral _createBoolLiteral = _stextFactory_1.createBoolLiteral();
+      final BoolLiteral boolLit = _createBoolLiteral;
+      boolLit.setValue(true);
+      r.setValue(boolLit);
       return r;
     }
   }
@@ -1170,7 +1187,11 @@ public class ModelSequencer {
       StextFactory _stextFactory = this.stextFactory();
       PrimitiveValueExpression _createPrimitiveValueExpression = _stextFactory.createPrimitiveValueExpression();
       final PrimitiveValueExpression r = _createPrimitiveValueExpression;
-      r.setValue("true");
+      StextFactory _stextFactory_1 = this.stextFactory();
+      BoolLiteral _createBoolLiteral = _stextFactory_1.createBoolLiteral();
+      final BoolLiteral boolLit = _createBoolLiteral;
+      boolLit.setValue(true);
+      r.setValue(boolLit);
       return r;
     }
   }

+ 16 - 16
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerHierarchyTest.java

@@ -32,15 +32,15 @@ public class ModelSequencerHierarchyTest extends ModelSequencerTest {
 
 			Region r = _createRegion("r", sc); {
 				State s1 = _createState("s1", r); {
-					_createEntryAssignment(v1, s1, "1");
+					_createEntryAssignment(v1, s1, 1);
 
 					Region r_s1 = _createRegion("r", s1); {
 						State s3 = _createState("s3", r_s1); {
-							_createEntryAssignment(v1, s3, "2");
+							_createEntryAssignment(v1, s3, 2);
 							
 							Region r_s3 = _createRegion("r", s3); {
 								State s4 = _createState("s4", r_s3);
-								_createEntryAssignment(v1, s4, "3");
+								_createEntryAssignment(v1, s4, 3);
 
 								State s5 = _createState("s5", r_s3);
 							}
@@ -104,14 +104,14 @@ public class ModelSequencerHierarchyTest extends ModelSequencerTest {
 
 			Region r = _createRegion("r", sc); {
 				State s1 = _createState("s1", r); {
-					_createEntryAssignment(v1, s1, "1");
+					_createEntryAssignment(v1, s1, 1);
 
 					Region r_s1 = _createRegion("r", s1); {
 						State s3 = _createState("s3", r_s1); {
 							
 							Region r_s3 = _createRegion("r", s3); {
 								State s4 = _createState("s4", r_s3);
-								_createEntryAssignment(v1, s4, "3");
+								_createEntryAssignment(v1, s4, 3);
 
 								State s5 = _createState("s5", r_s3);
 							}
@@ -172,15 +172,15 @@ public class ModelSequencerHierarchyTest extends ModelSequencerTest {
 
 			Region r = _createRegion("r", sc); {
 				State s1 = _createState("s1", r); {
-					_createEntryAssignment(v1, s1, "1");
+					_createEntryAssignment(v1, s1, 1);
 
 					Region r_s1 = _createRegion("r", s1); {
 						State s3 = _createState("s3", r_s1); {
-							_createEntryAssignment(v1, s3, "2");
+							_createEntryAssignment(v1, s3, 2);
 
 							Region r_s3 = _createRegion("r", s3); {
 								State s4 = _createState("s4", r_s3);
-								_createEntryAssignment(v1, s4, "3");
+								_createEntryAssignment(v1, s4, 3);
 
 								State s5 = _createState("s5", r_s3);
 							}
@@ -242,15 +242,15 @@ public class ModelSequencerHierarchyTest extends ModelSequencerTest {
 
 			Region r = _createRegion("r", sc); {
 				State s1 = _createState("s1", r); {
-					_createExitAssignment(v1, s1, "1");
+					_createExitAssignment(v1, s1, 1);
 
 					Region r_s1 = _createRegion("r", s1); {
 						State s3 = _createState("s3", r_s1); {
-							_createExitAssignment(v1, s3, "2");
+							_createExitAssignment(v1, s3, 2);
 							
 							Region r_s3 = _createRegion("r", s3); {
 								State s4 = _createState("s4", r_s3);
-								_createExitAssignment(v1, s4, "3");
+								_createExitAssignment(v1, s4, 3);
 
 								State s5 = _createState("s5", r_s3);
 							}
@@ -309,14 +309,14 @@ public class ModelSequencerHierarchyTest extends ModelSequencerTest {
 
 			Region r = _createRegion("r", sc); {
 				State s1 = _createState("s1", r); {
-					_createExitAssignment(v1, s1, "1");
+					_createExitAssignment(v1, s1, 1);
 
 					Region r_s1 = _createRegion("r", s1); {
 						State s3 = _createState("s3", r_s1); {
 							
 							Region r_s3 = _createRegion("r", s3); {
 								State s4 = _createState("s4", r_s3);
-								_createExitAssignment(v1, s4, "3");
+								_createExitAssignment(v1, s4, 3);
 
 								State s5 = _createState("s5", r_s3);
 							}
@@ -373,15 +373,15 @@ public class ModelSequencerHierarchyTest extends ModelSequencerTest {
 
 			Region r = _createRegion("r", sc); {
 				State s1 = _createState("s1", r); {
-					_createExitAssignment(v1, s1, "1");
+					_createExitAssignment(v1, s1, 1);
 
 					Region r_s1 = _createRegion("r", s1); {
 						State s3 = _createState("s3", r_s1); {
-							_createExitAssignment(v1, s3, "2");
+							_createExitAssignment(v1, s3, 2);
 
 							Region r_s3 = _createRegion("r", s3); {
 								State s4 = _createState("s4", r_s3);
-								_createExitAssignment(v1, s4, "3");
+								_createExitAssignment(v1, s4, 3);
 
 								State s5 = _createState("s5", r_s3);
 							}

+ 6 - 6
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerStateReactionTest.java

@@ -150,7 +150,7 @@ public class ModelSequencerStateReactionTest extends ModelSequencerTest {
 		_createRegularEventSpec(e1, tr1);
 		_createRegularEventSpec(e2, tr1);
 
-		PrimitiveValueExpression exp = _createValue("false");
+		PrimitiveValueExpression exp = _createValue(false);
 		tr1.setGuardExpression(exp);
 
 		Transition t = SGraphFactory.eINSTANCE.createTransition();
@@ -179,7 +179,7 @@ public class ModelSequencerStateReactionTest extends ModelSequencerTest {
 	@Test public void testTransitionCheckSequenceWithoutTrigger() {
 
 		ReactionTrigger tr1 = _createReactionTrigger(null);
-		PrimitiveValueExpression exp = _createValue("false");
+		PrimitiveValueExpression exp = _createValue(false);
 		tr1.setGuardExpression(exp);
 
 		Transition t = SGraphFactory.eINSTANCE.createTransition();
@@ -212,7 +212,7 @@ public class ModelSequencerStateReactionTest extends ModelSequencerTest {
 		ReactionTrigger tr1 = _createReactionTrigger(t);
 		_createTimeEventSpec(TimeEventType.AFTER, 1, TimeUnit.SECOND, tr1);
 
-		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), (ReactionEffect) t.getEffect());
+		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) t.getEffect());
 		
 		ExecutionFlow flow = sequencer.transform(sc);
 		
@@ -260,7 +260,7 @@ public class ModelSequencerStateReactionTest extends ModelSequencerTest {
 		State s= _createState("s", r);
 
 		LocalReaction timeTriggeredReaction = _createTimeTriggeredReaction(s, TimeEventType.AFTER, 2, TimeUnit.MILLISECOND);
-		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), (ReactionEffect) timeTriggeredReaction.getEffect());
+		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) timeTriggeredReaction.getEffect());
 		
 		ExecutionFlow flow = sequencer.transform(sc);
 		
@@ -300,7 +300,7 @@ public class ModelSequencerStateReactionTest extends ModelSequencerTest {
 
 		
 		LocalReaction timeTriggeredReaction = _createLocalReaction(s, StextFactory.eINSTANCE.createOnCycleEvent());
-		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), (ReactionEffect) timeTriggeredReaction.getEffect());
+		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) timeTriggeredReaction.getEffect());
 		
 		ExecutionFlow flow = sequencer.transform(sc);
 		
@@ -327,7 +327,7 @@ public class ModelSequencerStateReactionTest extends ModelSequencerTest {
 
 		
 		LocalReaction timeTriggeredReaction = _createLocalReaction(s, StextFactory.eINSTANCE.createAlwaysEvent());
-		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), (ReactionEffect) timeTriggeredReaction.getEffect());
+		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) timeTriggeredReaction.getEffect());
 		
 		ExecutionFlow flow = sequencer.transform(sc);
 		

+ 119 - 28
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerStateTest.java

@@ -19,6 +19,7 @@ import org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.OrthogonalFla
 import org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.SimpleFlatTSC;
 import org.yakindu.sct.model.sgraph.Entry;
 import org.yakindu.sct.model.sgraph.EntryKind;
+import org.yakindu.sct.model.sgraph.FinalState;
 import org.yakindu.sct.model.sgraph.Region;
 import org.yakindu.sct.model.sgraph.Scope;
 import org.yakindu.sct.model.sgraph.State;
@@ -58,7 +59,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		_createTransition(e, s1);
 		_createTransition(s1, s2);
 		LocalReaction entryAction = _createEntryAction(s2);
-		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), (ReactionEffect) entryAction.getEffect());
+		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) entryAction.getEffect());
 		
 		ExecutionFlow flow = sequencer.transform(sc);
 		
@@ -86,9 +87,9 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		Region s2_r = _createRegion("sub", s2);
 		State s2_1 = _createState("s2_1", s2_r);
 		LocalReaction entryAction = _createEntryAction(s2_1);
-		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), (ReactionEffect) entryAction.getEffect());
+		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) entryAction.getEffect());
 		LocalReaction exitAction = _createExitAction(s2_1);
-		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("43"), (ReactionEffect) exitAction.getEffect());
+		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(43), (ReactionEffect) exitAction.getEffect());
 		
 		ExecutionFlow flow = sequencer.transform(sc);
 		
@@ -119,7 +120,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		_createTransition(e, s1);
 		_createTransition(s1, s2);
 		LocalReaction exitAction = _createExitAction(s1);
-		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("21"), (ReactionEffect) exitAction.getEffect());
+		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(21), (ReactionEffect) exitAction.getEffect());
 		
 		ExecutionFlow flow = sequencer.transform(sc);
 		
@@ -145,7 +146,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		Region r = _createRegion("r", sc);
 		State s1 = _createState("s1", r);
 		LocalReaction entryAction = _createEntryAction(s1);
-		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), (ReactionEffect) entryAction.getEffect());
+		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) entryAction.getEffect());
 		
 		ExecutionFlow flow = sequencer.transform(sc);
 		
@@ -173,7 +174,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 
 			Region r = _createRegion("r", sc); {
 				State s1 = _createState("s1", r); {
-					_createEntryAssignment(v1, s1, "1");
+					_createEntryAssignment(v1, s1, 1);
 					Region r1_s1 = _createRegion("r1", s1); {
 						Entry e = _createEntry(EntryKind.INITIAL, null, r1_s1);
 						State s2 = _createState("s2", r1_s1);
@@ -223,7 +224,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		Region r = _createRegion("r", sc);
 		State s1 = _createState("s1", r);
 		LocalReaction entryAction = _createExitAction(s1);
-		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), (ReactionEffect) entryAction.getEffect());
+		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) entryAction.getEffect());
 		
 		ExecutionFlow flow = sequencer.transform(sc);
 		
@@ -252,7 +253,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 
 			Region r = _createRegion("r", sc); {
 				State s1 = _createState("s1", r); {
-					_createExitAssignment(v1, s1, "1");
+					_createExitAssignment(v1, s1, 1);
 					Region r1_s1 = _createRegion("r1", s1); {
 						Entry e = _createEntry(EntryKind.INITIAL, null, r1_s1);
 						State s2 = _createState("s2", r1_s1);
@@ -343,7 +344,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		SimpleFlatTSC tsc = new SimpleFlatTSC();
 		VariableDefinition v1 = _createVariableDefinition("v1", Type.INTEGER, tsc.s_scope);
 		ReactionEffect effect = _createReactionEffect(tsc.t1);
-		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), effect); 
+		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), effect); 
 		
 		ExecutionFlow flow = sequencer.transform(tsc.sc);
 
@@ -383,7 +384,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 
 		VariableDefinition v1 = _createVariableDefinition("v1", Type.INTEGER, tsc.s_scope);
 		LocalReaction exitAction = _createExitAction(tsc.s1);
-		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("21"), (ReactionEffect) exitAction.getEffect());
+		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(21), (ReactionEffect) exitAction.getEffect());
 
 		ExecutionFlow flow = sequencer.transform(tsc.sc);
 		
@@ -415,7 +416,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 
 		VariableDefinition v1 = _createVariableDefinition("v1", Type.INTEGER, tsc.s_scope);
 		LocalReaction entryAction = _createEntryAction(tsc.s2);
-		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("21"), (ReactionEffect) entryAction.getEffect());
+		Assignment assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(21), (ReactionEffect) entryAction.getEffect());
 
 		
 		ExecutionFlow flow = sequencer.transform(tsc.sc);
@@ -493,7 +494,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		LocalReaction lr1 = _createLocalReaction(tsc.s1, null);
 		_createRegularEventSpec(tsc.e1, (ReactionTrigger) lr1.getTrigger());
 		ReactionEffect lr1_eff = _createReactionEffect(lr1);
-		Assignment assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), lr1_eff); 
+		Assignment assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), lr1_eff); 
 
 		// the secont local reaction conforms to "e1 [x==42] / x=0;" 
 		LocalReaction lr2 = _createLocalReaction(tsc.s1, null);
@@ -502,12 +503,12 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		lr2_equals.setOperator(RelationalOperator.EQUALS);
 		ElementReferenceExpression lr2_varRef = StextFactory.eINSTANCE.createElementReferenceExpression();
 		lr2_varRef.setValue(v1);
-		PrimitiveValueExpression lr2_value = _createValue("42");
+		PrimitiveValueExpression lr2_value = _createValue(42);
 		lr2_equals.setLeftOperand(lr2_varRef);
 		lr2_equals.setRightOperand(lr2_value);
 		((ReactionTrigger) lr2.getTrigger()).setGuardExpression(lr2_equals);
 		ReactionEffect lr2_eff = _createReactionEffect(lr2);
-		Assignment assign2 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("0"), lr2_eff); 
+		Assignment assign2 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(0), lr2_eff); 
 
 		// the third local reaction conforms to: "[x==0] / x=1;"
 		LocalReaction lr3 = _createLocalReaction(tsc.s1, null);
@@ -515,12 +516,12 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		lr3_equals.setOperator(RelationalOperator.EQUALS);
 		ElementReferenceExpression lr3_varRef = StextFactory.eINSTANCE.createElementReferenceExpression();
 		lr3_varRef.setValue(v1);
-		PrimitiveValueExpression lr3_value = _createValue("0");
+		PrimitiveValueExpression lr3_value = _createValue(0);
 		lr3_equals.setLeftOperand(lr3_varRef);
 		lr3_equals.setRightOperand(lr3_value);
 		((ReactionTrigger) lr3.getTrigger()).setGuardExpression(lr3_equals);
 		ReactionEffect lr3_eff = _createReactionEffect(lr3);
-		Assignment assign3 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("1"), lr3_eff); 
+		Assignment assign3 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(1), lr3_eff); 
 		
 		
 		ExecutionFlow flow = sequencer.transform(tsc.sc);
@@ -580,7 +581,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		LocalReaction lr1 = _createLocalReaction(tsc.s1, null);
 		_createRegularEventSpec(tsc.e1, (ReactionTrigger) lr1.getTrigger());
 		ReactionEffect lr1_eff = _createReactionEffect(lr1);
-		Assignment assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), lr1_eff); 
+		Assignment assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), lr1_eff); 
 
 		// the secont local reaction conforms to "e1 [x==42] / x=0;" 
 		LocalReaction lr2 = _createLocalReaction(tsc.s1, null);
@@ -589,12 +590,12 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		lr2_equals.setOperator(RelationalOperator.EQUALS);
 		ElementReferenceExpression lr2_varRef = StextFactory.eINSTANCE.createElementReferenceExpression();
 		lr2_varRef.setValue(v1);
-		PrimitiveValueExpression lr2_value = _createValue("42");
+		PrimitiveValueExpression lr2_value = _createValue(42);
 		lr2_equals.setLeftOperand(lr2_varRef);
 		lr2_equals.setRightOperand(lr2_value);
 		((ReactionTrigger) lr2.getTrigger()).setGuardExpression(lr2_equals);
 		ReactionEffect lr2_eff = _createReactionEffect(lr2);
-		Assignment assign2 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("0"), lr2_eff); 
+		Assignment assign2 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(0), lr2_eff); 
 
 		// the third local reaction conforms to: "[x==0] / x=1;"
 		LocalReaction lr3 = _createLocalReaction(tsc.s1, null);
@@ -602,12 +603,12 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		lr3_equals.setOperator(RelationalOperator.EQUALS);
 		ElementReferenceExpression lr3_varRef = StextFactory.eINSTANCE.createElementReferenceExpression();
 		lr3_varRef.setValue(v1);
-		PrimitiveValueExpression lr3_value = _createValue("0");
+		PrimitiveValueExpression lr3_value = _createValue(0);
 		lr3_equals.setLeftOperand(lr3_varRef);
 		lr3_equals.setRightOperand(lr3_value);
 		((ReactionTrigger) lr3.getTrigger()).setGuardExpression(lr3_equals);
 		ReactionEffect lr3_eff = _createReactionEffect(lr3);
-		Assignment assign3 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("1"), lr3_eff); 
+		Assignment assign3 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(1), lr3_eff); 
 		
 		
 		ExecutionFlow flow = sequencer.transform(tsc.sc);
@@ -657,7 +658,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		// add a simple entry action: "entry / x=42;" 
 		LocalReaction lr = _createEntryAction(tsc.s1);
 		ReactionEffect lr_eff = _createReactionEffect(lr);
-		Assignment assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), lr_eff); 
+		Assignment assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), lr_eff); 
 
 		
 		// TRANSFORM
@@ -682,7 +683,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		// add a simple entry action: "entry / x=42;" 
 		LocalReaction lr = _createExitAction(tsc.s1);
 		ReactionEffect lr_eff = _createReactionEffect(lr);
-		Assignment assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), lr_eff); 
+		Assignment assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), lr_eff); 
 
 		
 		// TRANSFORM
@@ -708,7 +709,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		LocalReaction lr = _createEntryAction(tsc.s1);
 		_createRegularEventSpec(tsc.e1, (ReactionTrigger) lr.getTrigger());
 		ReactionEffect lr_eff = _createReactionEffect(lr);
-		Assignment assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), lr_eff); 
+		Assignment assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), lr_eff); 
 
 		
 		// TRANSFORM
@@ -751,15 +752,15 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 					LocalReaction lr1 = _createLocalReaction(s1, null);
 					_createRegularEventSpec(e1, (ReactionTrigger) lr1.getTrigger());
 					ReactionEffect lr1_eff = _createReactionEffect(lr1);
-					Assignment assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue("42"), lr1_eff); 
+					Assignment assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), lr1_eff); 
 
 					Region r_s1 = _createRegion("r", s1); {
 						State s3 = _createState("s3", r_s1); {
-							_createEntryAssignment(v1, s3, "2");
+							_createEntryAssignment(v1, s3, 2);
 							
 							Region r_s3 = _createRegion("r", s3); {
 								State s4 = _createState("s4", r_s3);
-								_createEntryAssignment(v1, s4, "3");
+								_createEntryAssignment(v1, s4, 3);
 
 								State s5 = _createState("s5", r_s3);
 							}
@@ -825,5 +826,95 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 
 	}
 
-	
+
+	/**
+	 * A final state must be transformed into a execution state with name '_final_'. and must include parent reactions.
+	 */
+	@Test public void testFinalState() {
+		
+		Statechart sc = _createStatechart("sc"); {  
+			
+			InterfaceScope s_scope = _createInterfaceScope("Interface", sc);
+			VariableDefinition v1 = _createVariableDefinition("v1", Type.INTEGER, s_scope);
+			EventDefinition e1 = _createEventDefinition("e1", s_scope);
+			
+
+			Region r = _createRegion("r", sc); {
+				State s1 = _createState("s1", r); {
+					// a local reaction: "e1 / x=42;" 
+					LocalReaction lr1 = _createLocalReaction(s1, null);
+					_createRegularEventSpec(e1, (ReactionTrigger) lr1.getTrigger());
+					ReactionEffect lr1_eff = _createReactionEffect(lr1);
+					Assignment assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), lr1_eff); 
+
+					Region r_s1 = _createRegion("r", s1); {
+						State s3 = _createState("s3", r_s1); {
+							_createEntryAssignment(v1, s3, 2);
+							
+							Region r_s3 = _createRegion("r", s3); {
+								State s4 = _createState("s4", r_s3);
+								_createEntryAssignment(v1, s4, 3);
+
+								FinalState fs = _createFinalState(r_s3);
+
+								Transition t_s4_fs = _createTransition(findState(sc, "s4"), fs);
+								_createRegularEventSpec(e1, (ReactionTrigger) t_s4_fs.getTrigger());
+							
+							}
+						}
+					}
+				}		
+				State s2 = _createState("s2", r); {
+					Region r_s1 = _createRegion("r", s2); {
+						_createState("s6", r_s1);
+					}
+				}
+			}
+
+
+			
+			Transition t_s3_s6 =_createTransition(findState(sc, "s3"), findState(sc, "s6"));
+			_createRegularEventSpec(e1, (ReactionTrigger) t_s3_s6.getTrigger());
+		
+		}
+		
+
+		ExecutionFlow flow = sequencer.transform(sc);
+		 
+		
+		ExecutionState _s1 = flow.getStates().get(0);
+		assertEquals("sc.r.s1", _s1.getName());
+
+		ExecutionState _s3 = flow.getStates().get(1);
+		assertEquals("sc.r.s1.r.s3", _s3.getName());
+
+		ExecutionState _s4 = flow.getStates().get(2);
+		assertEquals("sc.r.s1.r.s3.r.s4", _s4.getName());
+		
+		ExecutionState _fs = flow.getStates().get(3);
+		assertEquals("sc.r.s1.r.s3.r._final_", _fs.getName());
+		
+		ExecutionState _s6 = flow.getStates().get(5);
+		assertEquals("sc.r.s2.r.s6", _s6.getName());
+		
+			
+		Cycle cycle = _fs.getCycle();
+		
+		Sequence _seq = (Sequence) cycle.getSteps().get(0);
+		
+		// first entry is the s1 local reaction
+		If _if = (If) _seq.getSteps().get(0);
+		assertCall(_if.getThenStep(), _s1.getReactions().get(0).getEffect());
+		
+		// second entry is the s3 cycle with the transition reaction
+		cycle = (Cycle) _seq.getSteps().get(1);
+		_if = (If) cycle.getSteps().get(0);
+		assertCall(_if.getThenStep(), _s3.getReactions().get(0).getEffect());
+		assertTrue(_s3.getReactions().get(0).isTransition());
+		assertEquals(1,	cycle.getSteps().size());
+		assertNull( _if.getElseStep() );
+
+	}
+
+
 }

+ 23 - 5
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/SCTTestUtil.java

@@ -19,9 +19,11 @@ import org.yakindu.sct.model.sgraph.Vertex;
 import org.yakindu.sct.model.stext.stext.AlwaysEvent;
 import org.yakindu.sct.model.stext.stext.Assignment;
 import org.yakindu.sct.model.stext.stext.AssignmentOperator;
+import org.yakindu.sct.model.stext.stext.BoolLiteral;
 import org.yakindu.sct.model.stext.stext.EventDefinition;
 import org.yakindu.sct.model.stext.stext.EventSpec;
 import org.yakindu.sct.model.stext.stext.Expression;
+import org.yakindu.sct.model.stext.stext.IntLiteral;
 import org.yakindu.sct.model.stext.stext.InterfaceScope;
 import org.yakindu.sct.model.stext.stext.InternalScope;
 import org.yakindu.sct.model.stext.stext.LocalReaction;
@@ -212,13 +214,13 @@ public class SCTTestUtil {
 	}
 	
 	
-	public static void _createExitAssignment(VariableDefinition v1, State s1, String value) {
+	public static void _createExitAssignment(VariableDefinition v1, State s1, int value) {
 		LocalReaction exitAction = _createExitAction(s1);
 		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(value), (ReactionEffect) exitAction.getEffect());
 	}
 
 
-	public static void _createEntryAssignment(VariableDefinition v1, State s1, String value) {
+	public static void _createEntryAssignment(VariableDefinition v1, State s1, int value) {
 		LocalReaction entryAction = _createEntryAction(s1);
 		_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(value), (ReactionEffect) entryAction.getEffect());
 	}
@@ -235,13 +237,29 @@ public class SCTTestUtil {
 		return assignment;
 	}
 	
-	public static PrimitiveValueExpression _createValue(String s) {
+//	public static PrimitiveValueExpression _createValue(String s) {
+//		PrimitiveValueExpression assignment = StextFactory.eINSTANCE.createPrimitiveValueExpression();
+//		assignment.setValue(s);
+//		return assignment;
+//	}
+//	
+
+	public static PrimitiveValueExpression _createValue(int i) {
 		PrimitiveValueExpression assignment = StextFactory.eINSTANCE.createPrimitiveValueExpression();
-		assignment.setValue(s);
+		IntLiteral intLit = StextFactory.eINSTANCE.createIntLiteral();
+		intLit.setValue(i);
+		assignment.setValue(intLit);
+		return assignment;
+	}
+	
+	public static PrimitiveValueExpression _createValue(boolean b) {
+		PrimitiveValueExpression assignment = StextFactory.eINSTANCE.createPrimitiveValueExpression();
+		BoolLiteral boolLit = StextFactory.eINSTANCE.createBoolLiteral();
+		boolLit.setValue(b);
+		assignment.setValue(boolLit);
 		return assignment;
 	}
 	
-
 	
 	public static State findState(Statechart sc, final String name) {
 		Collection<EObject> states = Collections2.filter(EcoreUtil2.eAllContentsAsList(sc), new Predicate<Object>() {