Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/TransitionChainVisitor.java')
-rw-r--r--plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/TransitionChainVisitor.java46
1 files changed, 25 insertions, 21 deletions
diff --git a/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/TransitionChainVisitor.java b/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/TransitionChainVisitor.java
index 1354d593d..2e4a17115 100644
--- a/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/TransitionChainVisitor.java
+++ b/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/TransitionChainVisitor.java
@@ -16,13 +16,15 @@ import org.eclipse.etrice.core.fsm.fSM.CPBranchTransition;
import org.eclipse.etrice.core.fsm.fSM.ContinuationTransition;
import org.eclipse.etrice.core.fsm.fSM.GuardedTransition;
import org.eclipse.etrice.core.fsm.fSM.InitialTransition;
+import org.eclipse.etrice.core.fsm.fSM.RefinedTransition;
import org.eclipse.etrice.core.fsm.fSM.State;
-import org.eclipse.etrice.core.fsm.fSM.Transition;
+import org.eclipse.etrice.core.fsm.fSM.TransitionBase;
import org.eclipse.etrice.core.fsm.util.FSMHelpers;
-import org.eclipse.etrice.core.genmodel.fsm.fsmgen.ExpandedModelComponent;
-import org.eclipse.etrice.core.genmodel.fsm.fsmgen.ITransitionChainVisitor;
-import org.eclipse.etrice.core.genmodel.fsm.fsmgen.TransitionChain;
+import org.eclipse.etrice.core.genmodel.fsm.FsmGenExtensions;
+import org.eclipse.etrice.core.genmodel.fsm.fsmgen.GraphContainer;
+import org.eclipse.etrice.core.genmodel.fsm.fsmgen.Link;
import org.eclipse.etrice.generator.fsm.base.CodegenHelpers;
+import org.eclipse.etrice.generator.fsm.generic.ILanguageExtensionBase.TypedDataKind;
/**
* Implementation of the {@link org.eclipse.etrice.core.genmodel.fsm.fsmgen.ITransitionChainVisitor ITransitionChainVisitor} interface.
@@ -36,12 +38,11 @@ public class TransitionChainVisitor implements ITransitionChainVisitor {
private FSMHelpers fsmHelpers = new FSMHelpers();
// Initialized in constructor
- private ExpandedModelComponent xpac;
+ private GraphContainer gc;
private ILanguageExtensionBase langExt;
private CodegenHelpers codegenHelpers;
private IDetailCodeTranslator translationProvider;
- private TransitionChain tc = null;
private boolean dataDriven = false;
/**
@@ -52,42 +53,45 @@ public class TransitionChainVisitor implements ITransitionChainVisitor {
* @param languageExt
*/
protected TransitionChainVisitor(
- ExpandedModelComponent xpac,
+ GraphContainer gc,
ILanguageExtensionBase languageExt,
CodegenHelpers codegenHelpers,
IDetailCodeTranslator translationProvider
) {
- this.xpac = xpac;
+ this.gc = gc;
this.langExt = languageExt;
this.codegenHelpers = codegenHelpers;
this.translationProvider = translationProvider;
}
- protected void init(TransitionChain tc) {
- this.tc = tc;
-
- if (tc.getTransition() instanceof GuardedTransition) {
+ protected void init(TransitionBase tr) {
+ while (tr instanceof RefinedTransition) {
+ tr = ((RefinedTransition) tr).getTarget();
+ }
+ if (tr instanceof GuardedTransition) {
dataDriven = true;
}
- else if (tc.getTransition() instanceof InitialTransition) {
+ else if (tr instanceof InitialTransition) {
dataDriven = true;
}
}
// ITransitionChainVisitor interface
- public String genActionOperationCall(Transition tr) {
+ public String genActionOperationCall(TransitionBase tr) {
boolean noIfItem = dataDriven;
- for(TransitionChain tc : xpac.getChains(tr))
- noIfItem |= tc.getTransition() instanceof InitialTransition;
+ Link l = FsmGenExtensions.getLinkFor(gc, tr);
+ for (Link ch : l.getChainHeads()) {
+ noIfItem |= ch.getTransition() instanceof InitialTransition;
+ }
if (fsmHelpers.hasDetailCode(tr.getAction())) {
if (noIfItem)
return codegenHelpers.getActionCodeOperationName(tr)+"("+langExt.selfPointer(false)+");\n";
else {
String dataArg = "";
- if(xpac.getData(tr) != null)
- dataArg = langExt.generateArglistAndTypedData(tc.getData())[0];
+ if (l.getCommonData() != null)
+ dataArg = langExt.generateArglistAndTypedData(l.getCommonData())[TypedDataKind.COMMA_SEPARATED_PARAM_IN_CALL.ordinal()];
return codegenHelpers.getActionCodeOperationName(tr)+"("+langExt.selfPointer(true)+"ifitem"+dataArg+");\n";
}
}
@@ -129,9 +133,9 @@ public class TransitionChainVisitor implements ITransitionChainVisitor {
return "return " + codegenHelpers.getGenStateId(state) + " + STATE_MAX;";
}
- public String genTypedData(TransitionChain tc) {
- String[] result = langExt.generateArglistAndTypedData(tc.getData());
- return result[1];
+ public String genTypedData(TransitionBase tr) {
+ Link l = FsmGenExtensions.getLinkFor(gc, tr);
+ return langExt.generateArglistAndTypedData(l.getCommonData())[TypedDataKind.DECLARATION_AND_INITIALIZATION.ordinal()];
}
}

Back to the top