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

Generation of not inlined EntryNode react methods

benjamin.schwertfeger@gmail.com 14 лет назад
Родитель
Сommit
8e9c53f533

+ 7 - 2
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/templates/Naming.ext

@@ -48,8 +48,9 @@ cached String functionName(Step step) :
 	(step.isEntryAction()) ? step.entryActionFunctionName() : ( 
 	(step.isExitAction()) ? step.exitActionFunctionName() : (
 	(step.isEnterSequence()) ? step.enterSequenceFunctionName() : ( 
-	(step.isExitSequence()) ? step.exitSequenceFunctionName() : 
-	" !! unknown function type !!" )))));
+	(step.isExitSequence()) ? step.exitSequenceFunctionName() : ( 
+	(step.isReactSequence()) ? step.reactSequenceFunctionName() :
+	" !! unknown function type !!" ))))));
 
 
 ExecutionState state(Step this) : (ExecutionState) this.eContainer;
@@ -99,6 +100,9 @@ String enterSequenceFunctionName(Step this) :
 String exitSequenceFunctionName(Step this) :  
 	  this.stName() + "_exitSequence_" + this.getStateName();
 
+String reactSequenceFunctionName(Step this) :  
+	  this.stName() + "_react_" + this.getStateName();
+
 /* for some reason, this is handled completely different */ 
 String reactFunctionName(Reaction this) :  
 	  this.stName() + "_react_" + this.getStateName();
@@ -138,6 +142,7 @@ String reactFunction(ExecutionNode this) :
 
 String getStateName(Step this) : this.eContainer.getStateName(); 
 String getStateName(emf::EObject this) : (this.eContainer != null)?this.eContainer.getStateName():"unkown";
+String getStateName(ExecutionEntry this) : this.simpleName;
 String getStateName(ExecutionState this) : this.simpleName;
 String getStateName(ExecutionRegion this) : 
 	if (ExecutionState.isInstance(superScope)) 

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

@@ -72,7 +72,7 @@ class SequenceBuilder {
 	def dispatch void defineStateEnterSequence(Entry e) {
 		val execEntry = e.create
 		val seq = sexec.factory.createSequence
-		seq.name = "reactSequence"
+		seq.name = "react"
 		seq.comment = "Default react sequence for "+switch (e.kind) {
 				case EntryKind::INITIAL: "initial "
 				case EntryKind::DEEP_HISTORY: "deep history "

+ 5 - 1
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SexecElementMapping.xtend

@@ -110,7 +110,11 @@ import org.yakindu.sct.model.sexec.ExecutionEntry
 
 	def ExecutionEntry create r : sexecFactory.createExecutionEntry create(Entry entry){
 		if (entry != null) {
-			r.simpleName =   {if (!entry.name?.empty) entry.name else "Default"} + "_"
+			val region = entry.eContainer as Region
+			val regionName = region.name.toFirstUpper
+			val stateName = if(region.eContainer instanceof State) {(region.eContainer as State).name.toFirstUpper}
+			val entryName = {if (!entry.name?.empty) entry.name else "Default"}
+			r.simpleName = {if (regionName!= null)regionName else ""}+"_"+{if (stateName!= null)stateName else ""}+"_"+entryName
 			r.name = entry.fullyQualifiedName.toString.replaceAll(" ", "")	
 			r.sourceElement = entry	
 			r.reactSequence = sexecFactory.createSequence

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

@@ -129,7 +129,7 @@ public class SequenceBuilder {
       SexecFactory _factory = this.sexec.factory();
       Sequence _createSequence = _factory.createSequence();
       final Sequence seq = _createSequence;
-      seq.setName("reactSequence");
+      seq.setName("react");
       String _switchResult = null;
       EntryKind _kind = e.getKind();
       final EntryKind __valOfSwitchOver = _kind;

+ 41 - 7
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/SexecElementMapping.java

@@ -6,6 +6,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 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.naming.IQualifiedNameProvider;
 import org.eclipse.xtext.naming.QualifiedName;
@@ -40,6 +41,7 @@ import org.yakindu.sct.model.sgraph.Region;
 import org.yakindu.sct.model.sgraph.RegularState;
 import org.yakindu.sct.model.sgraph.SGraphFactory;
 import org.yakindu.sct.model.sgraph.Scope;
+import org.yakindu.sct.model.sgraph.State;
 import org.yakindu.sct.model.sgraph.Statechart;
 import org.yakindu.sct.model.sgraph.Statement;
 import org.yakindu.sct.model.sgraph.Transition;
@@ -296,18 +298,50 @@ public class SexecElementMapping {
     boolean _operator_notEquals = ObjectExtensions.operator_notEquals(entry, null);
     if (_operator_notEquals) {
       {
+        EObject _eContainer = entry.eContainer();
+        final Region region = ((Region) _eContainer);
+        String _name = region.getName();
+        String _firstUpper = StringExtensions.toFirstUpper(_name);
+        final String regionName = _firstUpper;
         String _xifexpression = null;
-        String _name = entry.getName();
-        boolean _isEmpty = _name==null?false:_name.isEmpty();
+        EObject _eContainer_1 = region.eContainer();
+        if ((_eContainer_1 instanceof org.yakindu.sct.model.sgraph.State)) {
+          EObject _eContainer_2 = region.eContainer();
+          String _name_1 = ((State) _eContainer_2).getName();
+          String _firstUpper_1 = StringExtensions.toFirstUpper(_name_1);
+          _xifexpression = _firstUpper_1;
+        }
+        final String stateName = _xifexpression;
+        String _xifexpression_1 = null;
+        String _name_2 = entry.getName();
+        boolean _isEmpty = _name_2==null?false:_name_2.isEmpty();
         boolean _operator_not = BooleanExtensions.operator_not(_isEmpty);
         if (_operator_not) {
-          String _name_1 = entry.getName();
-          _xifexpression = _name_1;
+          String _name_3 = entry.getName();
+          _xifexpression_1 = _name_3;
+        } else {
+          _xifexpression_1 = "Default";
+        }
+        final String entryName = _xifexpression_1;
+        String _xifexpression_2 = null;
+        boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(regionName, null);
+        if (_operator_notEquals_1) {
+          _xifexpression_2 = regionName;
+        } else {
+          _xifexpression_2 = "";
+        }
+        String _operator_plus = StringExtensions.operator_plus(_xifexpression_2, "_");
+        String _xifexpression_3 = null;
+        boolean _operator_notEquals_2 = ObjectExtensions.operator_notEquals(stateName, null);
+        if (_operator_notEquals_2) {
+          _xifexpression_3 = stateName;
         } else {
-          _xifexpression = "Default";
+          _xifexpression_3 = "";
         }
-        String _operator_plus = StringExtensions.operator_plus(_xifexpression, "_");
-        r.setSimpleName(_operator_plus);
+        String _operator_plus_1 = StringExtensions.operator_plus(_operator_plus, _xifexpression_3);
+        String _operator_plus_2 = StringExtensions.operator_plus(_operator_plus_1, "_");
+        String _operator_plus_3 = StringExtensions.operator_plus(_operator_plus_2, entryName);
+        r.setSimpleName(_operator_plus_3);
         QualifiedName _fullyQualifiedName = this.qfnProvider.getFullyQualifiedName(entry);
         String _string = _fullyQualifiedName.toString();
         String _replaceAll = _string.replaceAll(" ", "");