Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrik Rentz-Reichert2017-11-06 10:37:41 +0000
committerHenrik Rentz-Reichert2017-11-07 06:58:06 +0000
commit48d51b2b32f759e255f0cca154d2757c95d15e19 (patch)
treef1455e17e092e88c01feac4b6cf7f5ec2d2896ff /plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java
parentb09856b29bfcaea08e9e57b14da3744c0a201867 (diff)
downloadorg.eclipse.etrice-48d51b2b32f759e255f0cca154d2757c95d15e19.tar.gz
org.eclipse.etrice-48d51b2b32f759e255f0cca154d2757c95d15e19.tar.xz
org.eclipse.etrice-48d51b2b32f759e255f0cca154d2757c95d15e19.zip
Bug 511330 - [core.genmodel.fsm] introduce simplified generator model
for state machines * manually merged newfsmgen to newfsmgen_finalize because no rebase was possible due to structural changes * rebased on master * switch to Oxygen and Xtend 2.12 Change-Id: If9a8c7421f07fb8e8fa824b7bc6761b9142b7eaf
Diffstat (limited to 'plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java')
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ActorClassGen.xtend9
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/JavaExtensions.xtend49
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/NodeGen.xtend2
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ProtocolClassGen.xtend2
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/StateMachineGen.xtend52
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Validator.java2
6 files changed, 69 insertions, 47 deletions
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ActorClassGen.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ActorClassGen.xtend
index d573ba315..1bfae882e 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ActorClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ActorClassGen.xtend
@@ -32,6 +32,7 @@ import org.eclipse.etrice.generator.generic.ProcedureHelpers
import org.eclipse.etrice.generator.generic.RoomExtensions
import org.eclipse.etrice.generator.generic.TypeHelpers
import org.eclipse.etrice.generator.java.Main
+import static extension org.eclipse.etrice.core.genmodel.fsm.FsmGenExtensions.*
@Singleton
class ActorClassGen extends GenericActorClassGenerator {
@@ -279,7 +280,7 @@ class ActorClassGen extends GenericActorClassGenerator {
public abstract void executeInitTransition();
«ELSE»
«IF ac.hasNonEmptyStateMachine»
- «xpac.genStateMachine()»
+ «xpac.graphContainer.genStateMachine»
«IF ac.commType == ComponentCommunicationType::DATA_DRIVEN»
public void receiveEvent(InterfaceItemBase ifitem, int evt, Object generic_data) {
handleSystemEvent(ifitem, evt, generic_data);
@@ -295,7 +296,7 @@ class ActorClassGen extends GenericActorClassGenerator {
«ENDIF»
}
«ENDIF»
- «ELSEIF xpac.stateMachine.empty»
+ «ELSEIF xpac.graphContainer.graph.empty»
««« no state machine in the super classes
//--------------------- no state machine
public void receiveEvent(InterfaceItemBase ifitem, int evt, Object data) {
@@ -310,7 +311,7 @@ class ActorClassGen extends GenericActorClassGenerator {
@Override
public void saveObject(ObjectOutput output) throws IOException {
- «IF xpac.hasStateMachine()»
+ «IF !xpac.graphContainer.graph.empty»
// state and history
output.writeInt(getState());
for (int h: history) output.writeInt(h);
@@ -325,7 +326,7 @@ class ActorClassGen extends GenericActorClassGenerator {
@Override
public void loadObject(ObjectInput input) throws IOException, ClassNotFoundException {
- «IF xpac.hasStateMachine()»
+ «IF !xpac.graphContainer.graph.empty»
// state and history
setState(input.readInt());
for (int i=0; i<history.length; ++i) history[i] = input.readInt();
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/JavaExtensions.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/JavaExtensions.xtend
index 440c3e8d0..2de886d0c 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/JavaExtensions.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/JavaExtensions.xtend
@@ -20,8 +20,14 @@ package org.eclipse.etrice.generator.java.gen
import com.google.inject.Inject
import com.google.inject.Singleton
import java.util.List
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.etrice.core.etphys.eTPhys.NodeRef
+import org.eclipse.etrice.core.genmodel.etricegen.SubSystemInstance
+import org.eclipse.etrice.core.room.ActorClass
import org.eclipse.etrice.core.room.Attribute
import org.eclipse.etrice.core.room.DataType
+import org.eclipse.etrice.core.room.EnumLiteral
+import org.eclipse.etrice.core.room.EnumerationType
import org.eclipse.etrice.core.room.ExternalType
import org.eclipse.etrice.core.room.Message
import org.eclipse.etrice.core.room.PrimitiveType
@@ -30,22 +36,15 @@ import org.eclipse.etrice.core.room.VarDecl
import org.eclipse.etrice.generator.generic.ILanguageExtension
import org.eclipse.etrice.generator.generic.TypeHelpers
import org.eclipse.xtext.util.Pair
-import org.eclipse.etrice.core.genmodel.etricegen.SubSystemInstance
-import org.eclipse.etrice.core.etphys.eTPhys.NodeRef
-import org.eclipse.etrice.core.room.ActorClass
-import org.eclipse.etrice.core.room.EnumerationType
-
-import org.eclipse.etrice.core.room.EnumLiteral
-import org.eclipse.emf.ecore.EObject
@Singleton
class JavaExtensions implements ILanguageExtension {
-
+
@Inject TypeHelpers typeHelpers
override String getTypedDataDefinition(EObject msg) {
if (msg instanceof Message) {
- generateArglistAndTypedData((msg as Message).data).get(1)
+ generateArglistAndTypedData((msg as Message).data).get(TypedDataKind.DECLARATION_AND_INITIALIZATION.ordinal)
}
else {
""
@@ -171,7 +170,7 @@ class JavaExtensions implements ILanguageExtension {
v = v.substring(type.name.length+1)
for(EnumLiteral l : type.literals)
if(l.name.equals(v))
- return type.getName()+"."+l.getName()
+ return type.name+"."+l.name
}
def private castValue(PrimitiveType type, String value){
@@ -209,7 +208,7 @@ class JavaExtensions implements ILanguageExtension {
PrimitiveType:
toValueLiteral(dt, dt.defaultValueLiteral)
EnumerationType:
- getDefaultValue(dt)
+ dt.defaultValue
ExternalType:
"new "+(dt as ExternalType).targetName+"()"
default:
@@ -246,11 +245,11 @@ class JavaExtensions implements ILanguageExtension {
return newArrayList("", "", "")
val data = d as VarDecl
- var typeName = data.refType.type.getName();
- var castTypeName = typeName;
+ var typeName = data.refType.type.name
+ var castTypeName = typeName
if (data.refType.type instanceof PrimitiveType) {
- typeName = (data.refType.type as PrimitiveType).getTargetName()
- val ct = (data.refType.type as PrimitiveType).getCastName()
+ typeName = (data.refType.type as PrimitiveType).targetName
+ val ct = (data.refType.type as PrimitiveType).castName
if (ct!=null && !ct.isEmpty())
castTypeName = ct
}
@@ -259,16 +258,16 @@ class JavaExtensions implements ILanguageExtension {
castTypeName = (data.refType.type as EnumerationType).castType
}
- val typedData = typeName+" "+data.getName() + " = ("+castTypeName+") generic_data__et;\n";
- val dataArg = ", "+data.getName();
- val typedArgList = ", "+typeName+" "+data.getName();
+ val dataArg = ", " + GENERIC_DATA_NAME
+ val typedData = typeName + " " + GENERIC_DATA_NAME + " = ("+castTypeName+") generic_data__et;\n"
+ val typedArgList = ", " + typeName + " " + GENERIC_DATA_NAME
- return newArrayList(dataArg, typedData, typedArgList);
+ return newArrayList(dataArg, typedData, typedArgList)
}
override getTargetType(EnumerationType type) {
- if (type.getPrimitiveType()!=null)
- type.getPrimitiveType().getTargetName()
+ if (type.primitiveType!=null)
+ type.primitiveType.targetName
else
"int"
}
@@ -278,14 +277,14 @@ class JavaExtensions implements ILanguageExtension {
val cast = type.targetType
if (type.primitiveType==null)
- Long.toString(literal.getLiteralValue())
+ Long.toString(literal.literalValue)
else
- "(("+cast+")"+Long.toString(literal.getLiteralValue())+")"
+ "(("+cast+")"+Long.toString(literal.literalValue)+")"
}
override getCastType(EnumerationType type) {
- if (type.getPrimitiveType()!=null)
- type.getPrimitiveType().getCastName()
+ if (type.primitiveType!=null)
+ type.primitiveType.castName
else
"int"
}
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/NodeGen.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/NodeGen.xtend
index 793c38e3e..67e516e5d 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/NodeGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/NodeGen.xtend
@@ -22,7 +22,6 @@ import org.eclipse.etrice.core.etphys.eTPhys.ExecMode
import org.eclipse.etrice.core.etphys.eTPhys.PhysicalThread
import org.eclipse.etrice.core.genmodel.etricegen.ActorInstance
import org.eclipse.etrice.core.genmodel.etricegen.ActorInterfaceInstance
-import org.eclipse.etrice.core.genmodel.fsm.fsmgen.IDiagnostician
import org.eclipse.etrice.core.genmodel.etricegen.InstanceBase
import org.eclipse.etrice.core.genmodel.etricegen.Root
import org.eclipse.etrice.core.genmodel.etricegen.StructureInstance
@@ -43,6 +42,7 @@ import static extension org.eclipse.etrice.generator.fsm.base.Indexed.*
import com.google.common.collect.Lists
import com.google.common.collect.Sets
import org.eclipse.etrice.core.genmodel.builder.GenmodelConstants
+import org.eclipse.etrice.core.genmodel.fsm.IDiagnostician
@Singleton
class NodeGen {
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ProtocolClassGen.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ProtocolClassGen.xtend
index 9bb517b43..d59287f5a 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ProtocolClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ProtocolClassGen.xtend
@@ -14,7 +14,6 @@ package org.eclipse.etrice.generator.java.gen
import com.google.inject.Inject
import com.google.inject.Singleton
-import org.eclipse.etrice.core.genmodel.fsm.base.ILogger
import org.eclipse.etrice.core.genmodel.etricegen.Root
import org.eclipse.etrice.core.room.CommunicationType
import org.eclipse.etrice.core.room.DataClass
@@ -27,6 +26,7 @@ import org.eclipse.etrice.generator.generic.ProcedureHelpers
import org.eclipse.etrice.generator.generic.RoomExtensions
import org.eclipse.etrice.generator.generic.TypeHelpers
import org.eclipse.etrice.generator.java.Main
+import org.eclipse.etrice.core.genmodel.fsm.ILogger
@Singleton
class ProtocolClassGen extends GenericProtocolClassGenerator {
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/StateMachineGen.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/StateMachineGen.xtend
index f2e971d2c..b2910ad5a 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/StateMachineGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/StateMachineGen.xtend
@@ -13,37 +13,35 @@
package org.eclipse.etrice.generator.java.gen
import com.google.inject.Singleton
-import java.util.ArrayList
-import org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass
+import java.util.Comparator
import org.eclipse.etrice.core.fsm.fSM.State
+import org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass
+import org.eclipse.etrice.core.genmodel.fsm.fsmgen.GraphContainer
+import org.eclipse.etrice.core.genmodel.fsm.fsmgen.Node
import org.eclipse.etrice.generator.generic.GenericStateMachineGenerator
import org.eclipse.etrice.generator.java.Main
-import org.eclipse.etrice.core.genmodel.fsm.fsmgen.ExpandedModelComponent
+
+import static extension org.eclipse.etrice.core.genmodel.fsm.FsmGenExtensions.*
@Singleton
class StateMachineGen extends GenericStateMachineGenerator {
+ val nodeComparator = new NodeComparator
+
/**
* @param generateImplementation NOT used
*/
- override genExtra(ExpandedModelComponent xpac, boolean generateImplementation) {
- val states = new ArrayList<State>()
- var ac = xpac.modelComponent
+ override genExtra(GraphContainer gc, boolean generateImplementation) {
+ val orderedStateNodes = gc.graph.allStateNodes.toList.sortWith(nodeComparator)
-// it is crucial that we obey the order that is used for state IDs
-// that means we have to collect base classes first and each base class list with leaf states last
- while (ac!=null) {
- states.addAll(0, ac.allBaseStates.leafStatesLast)
- ac = ac.base
- }
'''
«IF Main::settings.generateMSCInstrumentation || Main::settings.generateWithVerboseOutput»
// state names
protected static final String stateStrings[] = {
"<no state>",
"<top>",
- «FOR state : states SEPARATOR ","»
- "«state.genStatePathName»"
+ «FOR node : orderedStateNodes SEPARATOR ","»
+ "«(node.stateGraphNode as State).genStatePathName»"
«ENDFOR»
};
@@ -54,7 +52,7 @@ class StateMachineGen extends GenericStateMachineGenerator {
««« history[i] = NO_STATE;
««« }
// history
- protected int history[] = {NO_STATE, NO_STATE«FOR state : states», NO_STATE«ENDFOR»};
+ protected int history[] = {NO_STATE, NO_STATE«FOR state : orderedStateNodes», NO_STATE«ENDFOR»};
private void setState(int new_state) {
«IF Main::settings.generateMSCInstrumentation»
@@ -84,4 +82,28 @@ class StateMachineGen extends GenericStateMachineGenerator {
def getHistorySize(ExpandedActorClass xpac) {
xpac.actorClass.getAllBaseStates().size+2
}
+
+ private static class NodeComparator implements Comparator<Node> {
+
+ // it is crucial that we obey the order that is used for state IDs
+ // that means we have to collect base classes first and each base class list with leaf states last
+ override int compare(Node o1, Node o2) {
+ if (o1.inheritanceLevel==o2.inheritanceLevel) {
+ if (o1.isLeaf && o2.isLeaf) {
+ return 0
+ }
+ if (o1.isLeaf) {
+ return 1
+ }
+ if (o2.isLeaf) {
+ return -1
+ }
+ return 0
+ }
+ else {
+ return Integer.compare(o1.inheritanceLevel, o1.inheritanceLevel)
+ }
+ }
+
+ }
}
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Validator.java b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Validator.java
index 7123338d1..9a4b5e5c0 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Validator.java
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Validator.java
@@ -13,7 +13,7 @@
package org.eclipse.etrice.generator.java.gen;
import org.eclipse.etrice.core.genmodel.etricegen.Root;
-import org.eclipse.etrice.core.genmodel.fsm.base.ILogger;
+import org.eclipse.etrice.core.genmodel.fsm.ILogger;
import com.google.inject.Inject;

Back to the top