ソースを参照

renames generator configuration feature from 'Optimize' to 'FunctionInlining' and added property 'inlineChoices'.

terfloth@itemis.de 14 年 前
コミット
4979f90f30

+ 2 - 1
plugins/org.yakindu.sct.generator.core/library/CoreFeatureTypeLibrary.xmi

@@ -10,11 +10,12 @@
   <types name="licenseHeader" optional="true">
     <parameters name="licenseText"/>
   </types>
-  <types name="Optimize" optional="true">
+  <types name="FunctionInlining" optional="true">
     <parameters name="inlineReactions" optional="true" parameterType="BOOLEAN"/>
     <parameters name="inlineEntryActions" optional="true" parameterType="BOOLEAN"/>
     <parameters name="inlineExitActions" optional="true" parameterType="BOOLEAN"/>
     <parameters name="inlineEnterSequences" optional="true" parameterType="BOOLEAN"/>
     <parameters name="inlineExitSequences" optional="true" parameterType="BOOLEAN"/>
+    <parameters name="inlineChoices" optional="true" parameterType="BOOLEAN"/>
   </types>
 </sgen:FeatureTypeLibrary>

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

@@ -27,13 +27,14 @@ public interface ICoreFeatureConstants {
 	public static final String DEBUG_FEATURE = "Debug";
 	public static final String DEBUG_FEATURE_DUMP_SEXEC = "dumpSexec";
 
-	public static final String OPTIMIZE_FEATURE = "Optimize";
+	public static final String FUNCTION_INLINING_FEATURE = "FunctionInlining";
 
-	public static final String OPTIMIZE_FEATURE_INLINE_REACTIONS = "inlineReactions";
-	public static final String OPTIMIZE_FEATURE_INLINE_ENTRY_ACTIONS = "inlineEntryActions";
-	public static final String OPTIMIZE_FEATURE_INLINE_ENTER_SEQUENCES = "inlineEnterSequences";
-	public static final String OPTIMIZE_FEATURE_INLINE_EXIT_ACTIONS = "inlineExitActions";
-	public static final String OPTIMIZE_FEATURE_INLINE_EXIT_SEQUENCES = "inlineExitSequences";
+	public static final String FUNCTION_INLINING_FEATURE_INLINE_REACTIONS = "inlineReactions";
+	public static final String FUNCTION_INLINING_FEATURE_INLINE_ENTRY_ACTIONS = "inlineEntryActions";
+	public static final String FUNCTION_INLINING_FEATURE_INLINE_ENTER_SEQUENCES = "inlineEnterSequences";
+	public static final String FUNCTION_INLINING_FEATURE_INLINE_EXIT_ACTIONS = "inlineExitActions";
+	public static final String FUNCTION_INLINING_FEATURE_INLINE_EXIT_SEQUENCES = "inlineExitSequences";
+	public static final String FUNCTION_INLINING_FEATURE_INLINE_CHOICES = "inlineChoices";
 
 	public static final String LICENSE_HEADER = "licenseHeader";
 	public static final String LICENSE_TEXT = "licenseText";

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

@@ -116,15 +116,16 @@ public abstract class AbstractSExecModelGenerator implements ISCTGenerator {
 		ExecutionFlow flow = sequencer.transform(statechart);
 		Assert.isNotNull(flow, "Error creation ExecutionFlow");
 
-		FeatureConfiguration optimizeConfig = entry.getFeatureConfiguration(OPTIMIZE_FEATURE);
+		FeatureConfiguration optimizeConfig = entry.getFeatureConfiguration(FUNCTION_INLINING_FEATURE);
 		
 		FlowOptimizer optimizer = injector.getInstance(FlowOptimizer.class);
 		
-		optimizer.inlineReactions( getBoolValue(optimizeConfig, OPTIMIZE_FEATURE_INLINE_REACTIONS, false) );
-		optimizer.inlineExitActions( getBoolValue(optimizeConfig, OPTIMIZE_FEATURE_INLINE_EXIT_ACTIONS, false) );
-		optimizer.inlineEntryActions( getBoolValue(optimizeConfig, OPTIMIZE_FEATURE_INLINE_ENTRY_ACTIONS, false) );
-		optimizer.inlineEnterSequences( getBoolValue(optimizeConfig, OPTIMIZE_FEATURE_INLINE_ENTER_SEQUENCES, false) );
-		optimizer.inlineExitSequences( getBoolValue(optimizeConfig, OPTIMIZE_FEATURE_INLINE_EXIT_SEQUENCES, false) );
+		optimizer.inlineReactions( getBoolValue(optimizeConfig, FUNCTION_INLINING_FEATURE_INLINE_REACTIONS, true) );
+		optimizer.inlineExitActions( getBoolValue(optimizeConfig, FUNCTION_INLINING_FEATURE_INLINE_EXIT_ACTIONS, true) );
+		optimizer.inlineEntryActions( getBoolValue(optimizeConfig, FUNCTION_INLINING_FEATURE_INLINE_ENTRY_ACTIONS, true) );
+		optimizer.inlineEnterSequences( getBoolValue(optimizeConfig, FUNCTION_INLINING_FEATURE_INLINE_ENTER_SEQUENCES, true) );
+		optimizer.inlineExitSequences( getBoolValue(optimizeConfig, FUNCTION_INLINING_FEATURE_INLINE_EXIT_SEQUENCES, true) );
+		optimizer.inlineChoices( getBoolValue(optimizeConfig, FUNCTION_INLINING_FEATURE_INLINE_CHOICES, true) );
 		
 		flow = optimizer.transform(flow);
 

+ 7 - 3
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/FlowOptimizer.xtend

@@ -30,6 +30,7 @@ class FlowOptimizer {
 	boolean _inlineExitActions      def inlineExitActions(boolean b)    {_inlineExitActions = b}
 	boolean _inlineEnterSequences   def inlineEnterSequences(boolean b) {_inlineEnterSequences = b}
 	boolean _inlineExitSequences    def inlineExitSequences(boolean b)  {_inlineExitSequences = b}
+	boolean _inlineChoices          def inlineChoices(boolean b)        {_inlineChoices = b}
 	
 	
 	
@@ -43,10 +44,13 @@ class FlowOptimizer {
 		if (_inlineExitActions)   flow.states.forEach( state | state.exitAction.inline )
 		if (_inlineEnterSequences) flow.states.forEach( state | state.enterSequence.inline )
 		if (_inlineExitSequences)  flow.states.forEach( state | state.exitSequence.inline )
+
 				
-		flow.nodes.forEach( node | { node.reactions.forEach( r | { r.check.inline r.effect.inline }) node })
-		flow.nodes.forEach( node | node.reactSequence.inline )
-		
+		if (_inlineChoices) {
+			flow.nodes.forEach( node | { node.reactions.forEach( r | { r.check.inline r.effect.inline }) node })
+			flow.nodes.forEach( node | node.reactSequence.inline )
+		}
+
 		flow
 	}
 	

+ 46 - 35
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/FlowOptimizer.java

@@ -73,6 +73,13 @@ public class FlowOptimizer {
     return __inlineExitSequences;
   }
   
+  private boolean _inlineChoices;
+  
+  public boolean inlineChoices(final boolean b) {
+    boolean __inlineChoices = this._inlineChoices = b;
+    return __inlineChoices;
+  }
+  
   public ExecutionFlow transform(final ExecutionFlow flow) {
     ExecutionFlow _xblockexpression = null;
     {
@@ -126,41 +133,45 @@ public class FlowOptimizer {
           };
         IterableExtensions.<ExecutionState>forEach(_states_3, _function_3);
       }
-      EList<ExecutionNode> _nodes = flow.getNodes();
-      final Function1<ExecutionNode,ExecutionNode> _function_4 = new Function1<ExecutionNode,ExecutionNode>() {
-          public ExecutionNode apply(final ExecutionNode node) {
-            ExecutionNode _xblockexpression_1 = null;
-            {
-              EList<Reaction> _reactions = node.getReactions();
-              final Function1<Reaction,Step> _function_5 = new Function1<Reaction,Step>() {
-                  public Step apply(final Reaction r) {
-                    Step _xblockexpression_2 = null;
-                    {
-                      Check _check = r.getCheck();
-                      FlowOptimizer.this.inline(_check);
-                      Step _effect = r.getEffect();
-                      Step _inline_4 = FlowOptimizer.this.inline(_effect);
-                      _xblockexpression_2 = (_inline_4);
-                    }
-                    return _xblockexpression_2;
-                  }
-                };
-              IterableExtensions.<Reaction>forEach(_reactions, _function_5);
-              _xblockexpression_1 = (node);
-            }
-            return _xblockexpression_1;
-          }
-        };
-      IterableExtensions.<ExecutionNode>forEach(_nodes, _function_4);
-      EList<ExecutionNode> _nodes_1 = flow.getNodes();
-      final Function1<ExecutionNode,Step> _function_6 = new Function1<ExecutionNode,Step>() {
-          public Step apply(final ExecutionNode node_1) {
-            Sequence _reactSequence = node_1.getReactSequence();
-            Step _inline_5 = FlowOptimizer.this.inline(_reactSequence);
-            return _inline_5;
-          }
-        };
-      IterableExtensions.<ExecutionNode>forEach(_nodes_1, _function_6);
+      if (this._inlineChoices) {
+        {
+          EList<ExecutionNode> _nodes = flow.getNodes();
+          final Function1<ExecutionNode,ExecutionNode> _function_4 = new Function1<ExecutionNode,ExecutionNode>() {
+              public ExecutionNode apply(final ExecutionNode node) {
+                ExecutionNode _xblockexpression_1 = null;
+                {
+                  EList<Reaction> _reactions = node.getReactions();
+                  final Function1<Reaction,Step> _function_5 = new Function1<Reaction,Step>() {
+                      public Step apply(final Reaction r) {
+                        Step _xblockexpression_2 = null;
+                        {
+                          Check _check = r.getCheck();
+                          FlowOptimizer.this.inline(_check);
+                          Step _effect = r.getEffect();
+                          Step _inline_4 = FlowOptimizer.this.inline(_effect);
+                          _xblockexpression_2 = (_inline_4);
+                        }
+                        return _xblockexpression_2;
+                      }
+                    };
+                  IterableExtensions.<Reaction>forEach(_reactions, _function_5);
+                  _xblockexpression_1 = (node);
+                }
+                return _xblockexpression_1;
+              }
+            };
+          IterableExtensions.<ExecutionNode>forEach(_nodes, _function_4);
+          EList<ExecutionNode> _nodes_1 = flow.getNodes();
+          final Function1<ExecutionNode,Step> _function_6 = new Function1<ExecutionNode,Step>() {
+              public Step apply(final ExecutionNode node_1) {
+                Sequence _reactSequence = node_1.getReactSequence();
+                Step _inline_5 = FlowOptimizer.this.inline(_reactSequence);
+                return _inline_5;
+              }
+            };
+          IterableExtensions.<ExecutionNode>forEach(_nodes_1, _function_6);
+        }
+      }
       _xblockexpression = (flow);
     }
     return _xblockexpression;