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

Local reaction also includes reaction of execution flow (YAKHMI-110)

benjamin.schwertfeger@gmail.com 14 лет назад
Родитель
Сommit
303032261c
15 измененных файлов с 282 добавлено и 117 удалено
  1. 1 3
      plugins/org.yakindu.sct.model.sexec/model/sexec.ecore
  2. 0 1
      plugins/org.yakindu.sct.model.sexec/model/sexec.genmodel
  3. 1 18
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/ExecutionFlow.java
  4. 29 30
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SexecPackage.java
  5. 160 24
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionFlowImpl.java
  6. 1 11
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SexecPackageImpl.java
  7. 1 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/ModelSequencer.xtend
  8. 11 2
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/ReactionBuilder.xtend
  9. 1 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecSwitch.java
  10. 1 0
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/ModelSequencer.java
  11. 21 8
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/ReactionBuilder.java
  12. 2 2
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerStateReactionTest.java
  13. 26 16
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerStateTest.java
  14. 6 2
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencertDeclarationsTest.java
  15. 21 0
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/SCTTestUtil.java

+ 1 - 3
plugins/org.yakindu.sct.model.sexec/model/sexec.ecore

@@ -6,7 +6,7 @@
   <eClassifiers xsi:type="ecore:EClass" name="MappedElement">
     <eStructuralFeatures xsi:type="ecore:EReference" name="sourceElement" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ExecutionFlow" eSuperTypes="../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//ScopedElement #//ExecutionScope">
+  <eClassifiers xsi:type="ecore:EClass" name="ExecutionFlow" eSuperTypes="../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//ScopedElement #//ExecutionScope #//ExecutionNode">
     <eStructuralFeatures xsi:type="ecore:EReference" name="states" upperBound="-1"
         eType="#//ExecutionState" containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="nodes" upperBound="-1"
@@ -15,8 +15,6 @@
         eType="#//ExecutionRegion" containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="historyVector" eType="#//StateVector"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="reactions" upperBound="-1"
-        eType="#//Reaction" containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ExecutionNode" eSuperTypes="#//MappedElement ../../org.yakindu.base.types/model/base.ecore#//NamedElement">
     <eStructuralFeatures xsi:type="ecore:EReference" name="reactions" upperBound="-1"

+ 0 - 1
plugins/org.yakindu.sct.model.sexec/model/sexec.genmodel

@@ -15,7 +15,6 @@
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionFlow/nodes"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionFlow/regions"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionFlow/historyVector"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionFlow/reactions"/>
     </genClasses>
     <genClasses ecoreClass="sexec.ecore#//ExecutionNode">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionNode/reactions"/>

+ 1 - 18
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/ExecutionFlow.java

@@ -21,7 +21,6 @@ import org.yakindu.sct.model.sgraph.ScopedElement;
  *   <li>{@link org.yakindu.sct.model.sexec.ExecutionFlow#getNodes <em>Nodes</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.ExecutionFlow#getRegions <em>Regions</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.ExecutionFlow#getHistoryVector <em>History Vector</em>}</li>
- *   <li>{@link org.yakindu.sct.model.sexec.ExecutionFlow#getReactions <em>Reactions</em>}</li>
  * </ul>
  * </p>
  *
@@ -29,7 +28,7 @@ import org.yakindu.sct.model.sgraph.ScopedElement;
  * @model
  * @generated
  */
-public interface ExecutionFlow extends ScopedElement, ExecutionScope {
+public interface ExecutionFlow extends ScopedElement, ExecutionScope, ExecutionNode {
 	/**
 	 * Returns the value of the '<em><b>States</b></em>' containment reference list.
 	 * The list contents are of type {@link org.yakindu.sct.model.sexec.ExecutionState}.
@@ -104,20 +103,4 @@ public interface ExecutionFlow extends ScopedElement, ExecutionScope {
 	 */
 	void setHistoryVector(StateVector value);
 
-	/**
-	 * Returns the value of the '<em><b>Reactions</b></em>' containment reference list.
-	 * The list contents are of type {@link org.yakindu.sct.model.sexec.Reaction}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Reactions</em>' containment reference list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Reactions</em>' containment reference list.
-	 * @see org.yakindu.sct.model.sexec.SexecPackage#getExecutionFlow_Reactions()
-	 * @model containment="true"
-	 * @generated
-	 */
-	EList<Reaction> getReactions();
-
 } // ExecutionFlow

+ 29 - 30
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SexecPackage.java

@@ -182,49 +182,67 @@ public interface SexecPackage extends EPackage {
 	int EXECUTION_FLOW__EXIT_SEQUENCE = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 6;
 
 	/**
-	 * The feature id for the '<em><b>States</b></em>' containment reference list.
+	 * The feature id for the '<em><b>Reactions</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__STATES = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 7;
+	int EXECUTION_FLOW__REACTIONS = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 7;
 
 	/**
-	 * The feature id for the '<em><b>Nodes</b></em>' containment reference list.
+	 * The feature id for the '<em><b>Simple Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__NODES = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 8;
+	int EXECUTION_FLOW__SIMPLE_NAME = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 8;
 
 	/**
-	 * The feature id for the '<em><b>Regions</b></em>' containment reference list.
+	 * The feature id for the '<em><b>React Sequence</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__REGIONS = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 9;
+	int EXECUTION_FLOW__REACT_SEQUENCE = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 9;
 
 	/**
-	 * The feature id for the '<em><b>History Vector</b></em>' containment reference.
+	 * The feature id for the '<em><b>States</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__HISTORY_VECTOR = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 10;
+	int EXECUTION_FLOW__STATES = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 10;
 
 	/**
-	 * The feature id for the '<em><b>Reactions</b></em>' containment reference list.
+	 * The feature id for the '<em><b>Nodes</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__REACTIONS = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 11;
+	int EXECUTION_FLOW__NODES = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>Regions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_FLOW__REGIONS = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 12;
+
+	/**
+	 * The feature id for the '<em><b>History Vector</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_FLOW__HISTORY_VECTOR = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 13;
 
 	/**
 	 * The number of structural features of the '<em>Execution Flow</em>' class.
@@ -233,7 +251,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW_FEATURE_COUNT = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 12;
+	int EXECUTION_FLOW_FEATURE_COUNT = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 14;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionNodeImpl <em>Execution Node</em>}' class.
@@ -2216,17 +2234,6 @@ public interface SexecPackage extends EPackage {
 	 */
 	EReference getExecutionFlow_HistoryVector();
 
-	/**
-	 * Returns the meta object for the containment reference list '{@link org.yakindu.sct.model.sexec.ExecutionFlow#getReactions <em>Reactions</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference list '<em>Reactions</em>'.
-	 * @see org.yakindu.sct.model.sexec.ExecutionFlow#getReactions()
-	 * @see #getExecutionFlow()
-	 * @generated
-	 */
-	EReference getExecutionFlow_Reactions();
-
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.ExecutionNode <em>Execution Node</em>}'.
 	 * <!-- begin-user-doc -->
@@ -3183,14 +3190,6 @@ public interface SexecPackage extends EPackage {
 		 */
 		EReference EXECUTION_FLOW__HISTORY_VECTOR = eINSTANCE.getExecutionFlow_HistoryVector();
 
-		/**
-		 * The meta object literal for the '<em><b>Reactions</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EReference EXECUTION_FLOW__REACTIONS = eINSTANCE.getExecutionFlow_Reactions();
-
 		/**
 		 * The meta object literal for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionNodeImpl <em>Execution Node</em>}' class.
 		 * <!-- begin-user-doc -->

+ 160 - 24
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionFlowImpl.java

@@ -46,11 +46,13 @@ import org.yakindu.sct.model.sgraph.impl.ScopedElementImpl;
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getSuperScope <em>Super Scope</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getEnterSequence <em>Enter Sequence</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getExitSequence <em>Exit Sequence</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getReactions <em>Reactions</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getSimpleName <em>Simple Name</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getReactSequence <em>React Sequence</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getStates <em>States</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getNodes <em>Nodes</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getRegions <em>Regions</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getHistoryVector <em>History Vector</em>}</li>
- *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getReactions <em>Reactions</em>}</li>
  * </ul>
  * </p>
  *
@@ -137,6 +139,46 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 	 */
 	protected Sequence exitSequence;
 
+	/**
+	 * The cached value of the '{@link #getReactions() <em>Reactions</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getReactions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Reaction> reactions;
+
+	/**
+	 * The default value of the '{@link #getSimpleName() <em>Simple Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSimpleName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SIMPLE_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSimpleName() <em>Simple Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSimpleName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String simpleName = SIMPLE_NAME_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getReactSequence() <em>React Sequence</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getReactSequence()
+	 * @generated
+	 * @ordered
+	 */
+	protected Sequence reactSequence;
+
 	/**
 	 * The cached value of the '{@link #getStates() <em>States</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -177,16 +219,6 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 	 */
 	protected StateVector historyVector;
 
-	/**
-	 * The cached value of the '{@link #getReactions() <em>Reactions</em>}' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getReactions()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<Reaction> reactions;
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -557,6 +589,70 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 		return reactions;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSimpleName() {
+		return simpleName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSimpleName(String newSimpleName) {
+		String oldSimpleName = simpleName;
+		simpleName = newSimpleName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_FLOW__SIMPLE_NAME, oldSimpleName, simpleName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Sequence getReactSequence() {
+		return reactSequence;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetReactSequence(Sequence newReactSequence, NotificationChain msgs) {
+		Sequence oldReactSequence = reactSequence;
+		reactSequence = newReactSequence;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_FLOW__REACT_SEQUENCE, oldReactSequence, newReactSequence);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setReactSequence(Sequence newReactSequence) {
+		if (newReactSequence != reactSequence) {
+			NotificationChain msgs = null;
+			if (reactSequence != null)
+				msgs = ((InternalEObject)reactSequence).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_FLOW__REACT_SEQUENCE, null, msgs);
+			if (newReactSequence != null)
+				msgs = ((InternalEObject)newReactSequence).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_FLOW__REACT_SEQUENCE, null, msgs);
+			msgs = basicSetReactSequence(newReactSequence, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_FLOW__REACT_SEQUENCE, newReactSequence, newReactSequence));
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -594,6 +690,10 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				return basicSetEnterSequence(null, msgs);
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				return basicSetExitSequence(null, msgs);
+			case SexecPackage.EXECUTION_FLOW__REACTIONS:
+				return ((InternalEList<?>)getReactions()).basicRemove(otherEnd, msgs);
+			case SexecPackage.EXECUTION_FLOW__REACT_SEQUENCE:
+				return basicSetReactSequence(null, msgs);
 			case SexecPackage.EXECUTION_FLOW__STATES:
 				return ((InternalEList<?>)getStates()).basicRemove(otherEnd, msgs);
 			case SexecPackage.EXECUTION_FLOW__NODES:
@@ -602,8 +702,6 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				return ((InternalEList<?>)getRegions()).basicRemove(otherEnd, msgs);
 			case SexecPackage.EXECUTION_FLOW__HISTORY_VECTOR:
 				return basicSetHistoryVector(null, msgs);
-			case SexecPackage.EXECUTION_FLOW__REACTIONS:
-				return ((InternalEList<?>)getReactions()).basicRemove(otherEnd, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -632,6 +730,12 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				return getEnterSequence();
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				return getExitSequence();
+			case SexecPackage.EXECUTION_FLOW__REACTIONS:
+				return getReactions();
+			case SexecPackage.EXECUTION_FLOW__SIMPLE_NAME:
+				return getSimpleName();
+			case SexecPackage.EXECUTION_FLOW__REACT_SEQUENCE:
+				return getReactSequence();
 			case SexecPackage.EXECUTION_FLOW__STATES:
 				return getStates();
 			case SexecPackage.EXECUTION_FLOW__NODES:
@@ -640,8 +744,6 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				return getRegions();
 			case SexecPackage.EXECUTION_FLOW__HISTORY_VECTOR:
 				return getHistoryVector();
-			case SexecPackage.EXECUTION_FLOW__REACTIONS:
-				return getReactions();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -677,6 +779,16 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				setExitSequence((Sequence)newValue);
 				return;
+			case SexecPackage.EXECUTION_FLOW__REACTIONS:
+				getReactions().clear();
+				getReactions().addAll((Collection<? extends Reaction>)newValue);
+				return;
+			case SexecPackage.EXECUTION_FLOW__SIMPLE_NAME:
+				setSimpleName((String)newValue);
+				return;
+			case SexecPackage.EXECUTION_FLOW__REACT_SEQUENCE:
+				setReactSequence((Sequence)newValue);
+				return;
 			case SexecPackage.EXECUTION_FLOW__STATES:
 				getStates().clear();
 				getStates().addAll((Collection<? extends ExecutionState>)newValue);
@@ -692,10 +804,6 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 			case SexecPackage.EXECUTION_FLOW__HISTORY_VECTOR:
 				setHistoryVector((StateVector)newValue);
 				return;
-			case SexecPackage.EXECUTION_FLOW__REACTIONS:
-				getReactions().clear();
-				getReactions().addAll((Collection<? extends Reaction>)newValue);
-				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -729,6 +837,15 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				setExitSequence((Sequence)null);
 				return;
+			case SexecPackage.EXECUTION_FLOW__REACTIONS:
+				getReactions().clear();
+				return;
+			case SexecPackage.EXECUTION_FLOW__SIMPLE_NAME:
+				setSimpleName(SIMPLE_NAME_EDEFAULT);
+				return;
+			case SexecPackage.EXECUTION_FLOW__REACT_SEQUENCE:
+				setReactSequence((Sequence)null);
+				return;
 			case SexecPackage.EXECUTION_FLOW__STATES:
 				getStates().clear();
 				return;
@@ -741,9 +858,6 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 			case SexecPackage.EXECUTION_FLOW__HISTORY_VECTOR:
 				setHistoryVector((StateVector)null);
 				return;
-			case SexecPackage.EXECUTION_FLOW__REACTIONS:
-				getReactions().clear();
-				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -770,6 +884,12 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				return enterSequence != null;
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				return exitSequence != null;
+			case SexecPackage.EXECUTION_FLOW__REACTIONS:
+				return reactions != null && !reactions.isEmpty();
+			case SexecPackage.EXECUTION_FLOW__SIMPLE_NAME:
+				return SIMPLE_NAME_EDEFAULT == null ? simpleName != null : !SIMPLE_NAME_EDEFAULT.equals(simpleName);
+			case SexecPackage.EXECUTION_FLOW__REACT_SEQUENCE:
+				return reactSequence != null;
 			case SexecPackage.EXECUTION_FLOW__STATES:
 				return states != null && !states.isEmpty();
 			case SexecPackage.EXECUTION_FLOW__NODES:
@@ -778,8 +898,6 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				return regions != null && !regions.isEmpty();
 			case SexecPackage.EXECUTION_FLOW__HISTORY_VECTOR:
 				return historyVector != null;
-			case SexecPackage.EXECUTION_FLOW__REACTIONS:
-				return reactions != null && !reactions.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
@@ -813,6 +931,14 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				default: return -1;
 			}
 		}
+		if (baseClass == ExecutionNode.class) {
+			switch (derivedFeatureID) {
+				case SexecPackage.EXECUTION_FLOW__REACTIONS: return SexecPackage.EXECUTION_NODE__REACTIONS;
+				case SexecPackage.EXECUTION_FLOW__SIMPLE_NAME: return SexecPackage.EXECUTION_NODE__SIMPLE_NAME;
+				case SexecPackage.EXECUTION_FLOW__REACT_SEQUENCE: return SexecPackage.EXECUTION_NODE__REACT_SEQUENCE;
+				default: return -1;
+			}
+		}
 		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
 	}
 
@@ -845,6 +971,14 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				default: return -1;
 			}
 		}
+		if (baseClass == ExecutionNode.class) {
+			switch (baseFeatureID) {
+				case SexecPackage.EXECUTION_NODE__REACTIONS: return SexecPackage.EXECUTION_FLOW__REACTIONS;
+				case SexecPackage.EXECUTION_NODE__SIMPLE_NAME: return SexecPackage.EXECUTION_FLOW__SIMPLE_NAME;
+				case SexecPackage.EXECUTION_NODE__REACT_SEQUENCE: return SexecPackage.EXECUTION_FLOW__REACT_SEQUENCE;
+				default: return -1;
+			}
+		}
 		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
 	}
 
@@ -860,6 +994,8 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 		StringBuffer result = new StringBuffer(super.toString());
 		result.append(" (name: ");
 		result.append(name);
+		result.append(", simpleName: ");
+		result.append(simpleName);
 		result.append(')');
 		return result.toString();
 	}

+ 1 - 11
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SexecPackageImpl.java

@@ -396,15 +396,6 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		return (EReference)executionFlowEClass.getEStructuralFeatures().get(3);
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EReference getExecutionFlow_Reactions() {
-		return (EReference)executionFlowEClass.getEStructuralFeatures().get(4);
-	}
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1197,7 +1188,6 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		createEReference(executionFlowEClass, EXECUTION_FLOW__NODES);
 		createEReference(executionFlowEClass, EXECUTION_FLOW__REGIONS);
 		createEReference(executionFlowEClass, EXECUTION_FLOW__HISTORY_VECTOR);
-		createEReference(executionFlowEClass, EXECUTION_FLOW__REACTIONS);
 
 		executionNodeEClass = createEClass(EXECUTION_NODE);
 		createEReference(executionNodeEClass, EXECUTION_NODE__REACTIONS);
@@ -1347,6 +1337,7 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		// Add supertypes to classes
 		executionFlowEClass.getESuperTypes().add(theSGraphPackage.getScopedElement());
 		executionFlowEClass.getESuperTypes().add(this.getExecutionScope());
+		executionFlowEClass.getESuperTypes().add(this.getExecutionNode());
 		executionNodeEClass.getESuperTypes().add(this.getMappedElement());
 		executionNodeEClass.getESuperTypes().add(theBasePackage.getNamedElement());
 		executionStateEClass.getESuperTypes().add(this.getExecutionNode());
@@ -1390,7 +1381,6 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		initEReference(getExecutionFlow_Nodes(), this.getExecutionNode(), null, "nodes", null, 0, -1, ExecutionFlow.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getExecutionFlow_Regions(), this.getExecutionRegion(), null, "regions", null, 0, -1, ExecutionFlow.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getExecutionFlow_HistoryVector(), this.getStateVector(), null, "historyVector", null, 0, 1, ExecutionFlow.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getExecutionFlow_Reactions(), this.getReaction(), null, "reactions", null, 0, -1, ExecutionFlow.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(executionNodeEClass, ExecutionNode.class, "ExecutionNode", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getExecutionNode_Reactions(), this.getReaction(), null, "reactions", null, 0, -1, ExecutionNode.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+ 1 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/ModelSequencer.xtend

@@ -138,6 +138,7 @@ class ModelSequencer {
 		sc.mapChoiceTransitions(ef)
 		
 		sc.defineEntryReactions(ef)
+		ef.defineStatechartReaction(sc)
 		ef.defineRegularStateReactions(sc)
 		ef.definePseudoStateReactions(sc)
 		

+ 11 - 2
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/ReactionBuilder.xtend

@@ -18,6 +18,7 @@ import org.yakindu.sct.model.sgraph.Choice
 import org.yakindu.sct.model.sexec.ExecutionNode
 import org.yakindu.sct.model.sexec.Step
 import org.yakindu.sct.model.sgraph.FinalState
+import org.eclipse.xtext.EcoreUtil2
 
 class ReactionBuilder {
 	@Inject extension SexecElementMapping mapping
@@ -26,6 +27,13 @@ class ReactionBuilder {
 	@Inject extension StatechartExtensions sct
 	@Inject extension TraceExtensions trace
 	
+	def defineStatechartReaction(ExecutionFlow flow, Statechart sc) {
+		val reaction = flow.createReactionSequence(null)
+		
+		flow.reactSequence = reaction
+		return flow
+	}
+
 	def defineRegularStateReactions(ExecutionFlow flow, Statechart sc) {
 		
 		val states = sc.allRegularStates
@@ -76,11 +84,11 @@ class ReactionBuilder {
 	def Sequence defineCycle(RegularState state) {
 	
 		val execState = state.create
-		val stateReaction = execState.createReactionSequence(null)
 		val parents = state.parentStates		
 		execState.reactSequence = parents.fold(null, [r, s | {
 			s.create.createReactionSequence(r)
 		}])
+		execState.reactSequence = (EcoreUtil2::getRootContainer(execState) as ExecutionFlow).createReactionSequence(execState.reactSequence)
 		
 		execState.reactSequence.name = 'react'
 		execState.reactSequence.comment = 'The reactions of state ' + state.name + '.'
@@ -90,7 +98,8 @@ class ReactionBuilder {
 
 	def Sequence createReactionSequence(ExecutionNode state, Step localStep) {	
 		val cycle = sexec.factory.createSequence
-				
+		cycle.name = "react"
+		
 		val localReactions = state.reactions.filter(r | ! r.transition).toList
 		var localSteps = sexec.factory.createSequence
 		localSteps.steps.addAll(localReactions.map(lr | {

+ 1 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecSwitch.java

@@ -117,6 +117,7 @@ public class SexecSwitch<T> extends Switch<T> {
 				T result = caseExecutionFlow(executionFlow);
 				if (result == null) result = caseScopedElement(executionFlow);
 				if (result == null) result = caseExecutionScope(executionFlow);
+				if (result == null) result = caseExecutionNode(executionFlow);
 				if (result == null) result = caseMappedElement(executionFlow);
 				if (result == null) result = caseNamedElement(executionFlow);
 				if (result == null) result = defaultCase(theEObject);

+ 1 - 0
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/ModelSequencer.java

@@ -106,6 +106,7 @@ public class ModelSequencer {
       this.behaviorMapping.mapLocalReactions(sc, ef);
       this.behaviorMapping.mapChoiceTransitions(sc, ef);
       this.reactBuilder.defineEntryReactions(sc, ef);
+      this.reactBuilder.defineStatechartReaction(ef, sc);
       this.reactBuilder.defineRegularStateReactions(ef, sc);
       this.reactBuilder.definePseudoStateReactions(ef, sc);
       this.retargetDeclRefs(ef);

+ 21 - 8
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/ReactionBuilder.java

@@ -4,6 +4,7 @@ import com.google.inject.Inject;
 import java.util.List;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.xtext.xbase.lib.BooleanExtensions;
 import org.eclipse.xtext.xbase.lib.CollectionExtensions;
 import org.eclipse.xtext.xbase.lib.Functions.Function1;
@@ -67,6 +68,15 @@ public class ReactionBuilder {
   @Inject
   private TraceExtensions trace;
   
+  public ExecutionFlow defineStatechartReaction(final ExecutionFlow flow, final Statechart sc) {
+    {
+      Sequence _createReactionSequence = this.createReactionSequence(flow, null);
+      final Sequence reaction = _createReactionSequence;
+      flow.setReactSequence(reaction);
+      return flow;
+    }
+  }
+  
   public ExecutionFlow defineRegularStateReactions(final ExecutionFlow flow, final Statechart sc) {
     {
       List<RegularState> _allRegularStates = this.sct.allRegularStates(sc);
@@ -193,28 +203,30 @@ public class ReactionBuilder {
     {
       ExecutionState _create = this.mapping.create(state);
       final ExecutionState execState = _create;
-      Sequence _createReactionSequence = this.createReactionSequence(execState, null);
-      final Sequence stateReaction = _createReactionSequence;
       List<RegularState> _parentStates = this.sgraph.parentStates(state);
       final List<RegularState> parents = _parentStates;
       final Function2<Sequence,RegularState,Sequence> _function = new Function2<Sequence,RegularState,Sequence>() {
           public Sequence apply(final Sequence r , final RegularState s) {
             ExecutionState _create_1 = ReactionBuilder.this.mapping.create(s);
-            Sequence _createReactionSequence_1 = ReactionBuilder.this.createReactionSequence(_create_1, r);
-            return _createReactionSequence_1;
+            Sequence _createReactionSequence = ReactionBuilder.this.createReactionSequence(_create_1, r);
+            return _createReactionSequence;
           }
         };
       Sequence _fold = IterableExtensions.<RegularState, Sequence>fold(parents, null, _function);
       execState.setReactSequence(_fold);
+      EObject _rootContainer = EcoreUtil.getRootContainer(execState);
       Sequence _reactSequence = execState.getReactSequence();
-      _reactSequence.setName("react");
+      Sequence _createReactionSequence_1 = this.createReactionSequence(((ExecutionFlow) _rootContainer), _reactSequence);
+      execState.setReactSequence(_createReactionSequence_1);
       Sequence _reactSequence_1 = execState.getReactSequence();
+      _reactSequence_1.setName("react");
+      Sequence _reactSequence_2 = execState.getReactSequence();
       String _name = state.getName();
       String _operator_plus = StringExtensions.operator_plus("The reactions of state ", _name);
       String _operator_plus_1 = StringExtensions.operator_plus(_operator_plus, ".");
-      _reactSequence_1.setComment(_operator_plus_1);
-      Sequence _reactSequence_2 = execState.getReactSequence();
-      return _reactSequence_2;
+      _reactSequence_2.setComment(_operator_plus_1);
+      Sequence _reactSequence_3 = execState.getReactSequence();
+      return _reactSequence_3;
     }
   }
   
@@ -223,6 +235,7 @@ public class ReactionBuilder {
       SexecFactory _factory = this.sexec.factory();
       Sequence _createSequence = _factory.createSequence();
       final Sequence cycle = _createSequence;
+      cycle.setName("react");
       EList<Reaction> _reactions = state.getReactions();
       final Function1<Reaction,Boolean> _function = new Function1<Reaction,Boolean>() {
           public Boolean apply(final Reaction r) {

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

@@ -280,8 +280,8 @@ public class ModelSequencerStateReactionTest extends ModelSequencerTest {
 		assertEquals(1, flow.getStates().size());
 		ExecutionState _s = flow.getStates().get(0);
 		assertEquals(s.getName(), _s.getSimpleName());
-		If _if = (If) flow.getStates().get(0).getReactSequence().getSteps()
-				.get(0);
+		If _if = (If) SCTTestUtil.flattenSequenceStepsAsList(
+				flow.getStates().get(0).getReactSequence()).get(0);
 
 		TypedElementReferenceExpression _ere = (TypedElementReferenceExpression) _if
 				.getCheck().getCondition();

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

@@ -27,6 +27,8 @@ import static org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil._creat
 import static org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil._createVariableDefinition;
 import static org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.findState;
 
+import java.util.List;
+
 import org.junit.Test;
 import org.yakindu.sct.model.sexec.Call;
 import org.yakindu.sct.model.sexec.EnterState;
@@ -665,7 +667,9 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		assertEquals(tsc.s2.getName(), s2.getSimpleName());
 		assertNotNull(s1.getReactSequence());
 
-		If _if = (If) s1.getReactSequence().getSteps().get(0);
+		Step step = s1.getReactSequence().getSteps().get(0);
+		If _if = (If) assertedSequence(assertedSequence(step).getSteps().get(0))
+				.getSteps().get(0);
 		assertNotNull(_if.getThenStep());
 		assertClass(Call.class, _if.getThenStep());
 		assertNull(_if.getElseStep());
@@ -684,7 +688,9 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		assertEquals(tsc.s3.getName(), s3.getSimpleName());
 		assertNotNull(s3.getReactSequence());
 
-		_if = (If) s3.getReactSequence().getSteps().get(0);
+		step = s3.getReactSequence().getSteps().get(0);
+		_if = (If) assertedSequence(assertedSequence(step).getSteps().get(0))
+				.getSteps().get(0);
 		assertNotNull(_if.getThenStep());
 		assertClass(Call.class, _if.getThenStep());
 		assertNotNull(_if.getElseStep());
@@ -751,7 +757,9 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 
 		assertNotNull(s1.getReactSequence());
 
-		If _if = (If) s1.getReactSequence().getSteps().get(0);
+		Step step = s1.getReactSequence().getSteps().get(0);
+		If _if = (If) assertedSequence(assertedSequence(step).getSteps().get(0))
+				.getSteps().get(0);
 		assertNotNull(_if.getThenStep());
 		assertClass(Call.class, _if.getThenStep());
 		assertNotNull(_if.getElseStep());
@@ -851,7 +859,9 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 
 		assertNotNull(s1.getReactSequence());
 
-		Sequence _seq = (Sequence) s1.getReactSequence().getSteps().get(0);
+		Step step = s1.getReactSequence().getSteps().get(0);
+		Sequence _seq = (Sequence) assertedSequence(
+				assertedSequence(step).getSteps().get(0)).getSteps().get(0);
 		assertEquals(3, _seq.getSteps().size());
 
 		// check first local reaction
@@ -907,7 +917,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 
 		assertEquals(0, s1.getReactions().size());
 		assertNotNull(s1.getReactSequence());
-		assertEquals(0, s1.getReactSequence().getSteps().size());
+		assertEquals(1, s1.getReactSequence().getSteps().size());
 	}
 
 	/** Exit action behaviors are not directly part of the states cycle steps */
@@ -932,7 +942,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 
 		assertEquals(0, s1.getReactions().size());
 		assertNotNull(s1.getReactSequence());
-		assertEquals(0, s1.getReactSequence().getSteps().size());
+		assertEquals(1, s1.getReactSequence().getSteps().size());
 	}
 
 	/**
@@ -965,7 +975,9 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 
 		Sequence _seq = (Sequence) s1.getReactSequence().getSteps().get(0);
 
-		If _lr1 = (If) _seq.getSteps().get(0);
+		If _lr1 = (If) assertedSequence(
+				assertedSequence(_seq.getSteps().get(0)).getSteps().get(0))
+				.getSteps().get(0);
 		assertClass(TypedElementReferenceExpression.class, _lr1.getCheck()
 				.getCondition());
 		assertSame(s1.getReactions().get(0).getCheck().getCondition(), _lr1
@@ -1057,15 +1069,14 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		Sequence _seq = (Sequence) cycle.getSteps().get(0);
 
 		// first entry is the s1 local reaction
-		If _if = (If) _seq.getSteps().get(0);
+		List<Step> steps = SCTTestUtil.flattenSequenceStepsAsList(_seq);
+		If _if = (If) steps.get(0);
 		assertCall(_if.getThenStep(), _s1.getReactions().get(0).getEffect());
 
 		// second entry is the s3 cycle with the transition reaction
-		cycle = (Sequence) _seq.getSteps().get(1);
-		_if = (If) cycle.getSteps().get(0);
+		_if = (If) steps.get(1);
 		assertCall(_if.getThenStep(), _s3.getReactions().get(0).getEffect());
 		assertTrue(_s3.getReactions().get(0).isTransition());
-		assertEquals(1, cycle.getSteps().size());
 
 		// third is the s4 cycle with the transition reaction
 		_seq = (Sequence) _if.getElseStep();
@@ -1168,15 +1179,14 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		Sequence _seq = (Sequence) cycle.getSteps().get(0);
 
 		// first entry is the s1 local reaction
-		If _if = (If) _seq.getSteps().get(0);
+		List<Step> steps = SCTTestUtil.flattenSequenceStepsAsList(_seq);
+		If _if = (If) steps.get(0);
 		assertCall(_if.getThenStep(), _s1.getReactions().get(0).getEffect());
 
 		// second entry is the s3 cycle with the transition reaction
-		cycle = (Sequence) _seq.getSteps().get(1);
-		_if = (If) cycle.getSteps().get(0);
+		_if = (If) steps.get(1);
 		assertCall(_if.getThenStep(), _s3.getReactions().get(0).getEffect());
 		assertTrue(_s3.getReactions().get(0).isTransition());
-		assertEquals(1, cycle.getSteps().size());
 		assertNotNull(_if.getElseStep());
 
 	}
@@ -1221,7 +1231,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 
 		// the transition s1 -> fs must includes the fs exit sequence call
 		Sequence cycle = _s1.getReactSequence();
-		If _if = (If) cycle.getSteps().get(0);
+		If _if = (If) SCTTestUtil.flattenSequenceStepsAsList(cycle).get(0);
 		assertCall(_if.getThenStep(), _s1.getReactions().get(0).getEffect());
 
 		Sequence _seq = (Sequence) _s1.getReactions().get(0).getEffect();

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

@@ -114,8 +114,10 @@ public class ModelSequencertDeclarationsTest extends ModelSequencerTest {
 
 		assertEquals(2, flow.getStates().size());
 		assertEquals(s1.getName(), flow.getStates().get(0).getSimpleName());
-		If _if = (If) flow.getStates().get(0).getReactSequence().getSteps()
+		Step step = flow.getStates().get(0).getReactSequence().getSteps()
 				.get(0);
+		If _if = (If) assertedSequence(assertedSequence(step).getSteps().get(0))
+				.getSteps().get(0);
 
 		TypedElementReferenceExpression _ere = (TypedElementReferenceExpression) _if
 				.getCheck().getCondition();
@@ -146,8 +148,10 @@ public class ModelSequencertDeclarationsTest extends ModelSequencerTest {
 		assertNotSame(_operation, _o1);
 		assertEquals(_operation.getName(), _o1.getName());
 
-		If _if = (If) flow.getStates().get(0).getReactSequence().getSteps()
+		Step step = flow.getStates().get(0).getReactSequence().getSteps()
 				.get(0);
+		If _if = (If) assertedSequence(assertedSequence(step).getSteps().get(0))
+				.getSteps().get(0);
 		Step thenSequence = assertedSequence(
 				((Call) _if.getThenStep()).getStep()).getSteps().get(1);
 		Execution call = (Execution) assertedSequence(thenSequence).getSteps()

+ 21 - 0
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/SCTTestUtil.java

@@ -1,12 +1,16 @@
 package org.yakindu.sct.model.sexec.transformation.test;
 
 import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.xtext.EcoreUtil2;
 import org.yakindu.base.base.NamedElement;
 import org.yakindu.base.types.Type;
 import org.yakindu.base.types.TypesFactory;
+import org.yakindu.sct.model.sexec.Sequence;
+import org.yakindu.sct.model.sexec.Step;
 import org.yakindu.sct.model.sgraph.Entry;
 import org.yakindu.sct.model.sgraph.EntryKind;
 import org.yakindu.sct.model.sgraph.FinalState;
@@ -51,6 +55,23 @@ public class SCTTestUtil {
 
 	public static Type TYPE_INTEGER = _createType("integer");
 
+	public static List<Step> flattenSequenceStepsAsList(Step step) {
+		return flattenSequenceStepsAsList(step, new LinkedList<Step>());
+	}
+
+	public static List<Step> flattenSequenceStepsAsList(Step step,
+			List<Step> result) {
+		if (step instanceof Sequence) {
+			Sequence sequence = (Sequence) step;
+			for (Step s : sequence.getSteps()) {
+				flattenSequenceStepsAsList(s, result);
+			}
+		} else {
+			result.add(step);
+		}
+		return result;
+	}
+
 	public static EventDefinition _createEventDefinition(String name,
 			Scope scope) {
 		EventDefinition e = StextFactory.eINSTANCE.createEventDefinition();