Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrik Rentz-Reichert2013-11-14 11:26:35 +0000
committerHenrik Rentz-Reichert2013-11-15 09:47:35 +0000
commitaf42471511f758e47a5962345e91d5a1f5fe266c (patch)
treed55f732b54c06b81ce3d9ee051268693615906e8 /plugins/org.eclipse.etrice.generator.java
parent88ef1ceb04743522dca1198378771480754d3657 (diff)
downloadorg.eclipse.etrice-af42471511f758e47a5962345e91d5a1f5fe266c.tar.gz
org.eclipse.etrice-af42471511f758e47a5962345e91d5a1f5fe266c.tar.xz
org.eclipse.etrice-af42471511f758e47a5962345e91d5a1f5fe266c.zip
Bug 392072: enums as Primitive Types that can be used as Attributes for Operations and Messages
https://bugs.eclipse.org/392072 Change-Id: I6e16a691df0d720956652529f912eaed1d58097b
Diffstat (limited to 'plugins/org.eclipse.etrice.generator.java')
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ActorClassGen.xtend13
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.xtend9
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/DataClassGen.xtend3
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/EnumerationTypeGen.xtend55
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Initialization.xtend5
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/JavaExtensions.xtend24
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/MainGen.xtend2
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ProtocolClassGen.xtend6
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/VariableServiceGen.xtend7
-rw-r--r--plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ActorClassGen.java18
-rw-r--r--plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.java15
-rw-r--r--plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/EnumerationTypeGen.java96
-rw-r--r--plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/Initialization.java7
-rw-r--r--plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/JavaExtensions.java27
-rw-r--r--plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/MainGen.java5
-rw-r--r--plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ProtocolClassGen.java4
16 files changed, 266 insertions, 30 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 e3beaecd9..6d8d6ef6a 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
@@ -25,13 +25,13 @@ import org.eclipse.etrice.generator.generic.RoomExtensions
import static extension org.eclipse.etrice.core.room.util.RoomHelpers.*
import org.eclipse.etrice.core.room.ReferenceType
-import org.eclipse.etrice.core.room.PrimitiveType
import org.eclipse.etrice.core.room.Attribute
import org.eclipse.etrice.generator.java.Main
import org.eclipse.etrice.core.genmodel.builder.GenmodelConstants
import org.eclipse.etrice.core.genmodel.etricegen.WiredActorClass
import org.eclipse.etrice.core.room.ActorClass
import java.util.HashMap
+import org.eclipse.etrice.generator.generic.TypeHelpers
@Singleton
class ActorClassGen extends GenericActorClassGenerator {
@@ -45,6 +45,7 @@ class ActorClassGen extends GenericActorClassGenerator {
@Inject extension ProcedureHelpers
@Inject extension Initialization
@Inject extension StateMachineGen
+ @Inject extension TypeHelpers
def doGenerate(Root root) {
val HashMap<ActorClass, WiredActorClass> ac2wired = new HashMap<ActorClass, WiredActorClass>
@@ -98,11 +99,9 @@ class ActorClassGen extends GenericActorClassGenerator {
«FOR model : models»
import «model.name».*;
«ENDFOR»
-
«FOR pc : root.getReferencedProtocolClasses(ac)»
import «pc.package».«pc.name».*;
«ENDFOR»
-
«FOR sub : ac.actorRefs.filter(r|r.refType==ReferenceType.OPTIONAL)»
import «sub.type.package».«sub.type.name»Interface;
«ENDFOR»
@@ -336,7 +335,7 @@ class ActorClassGen extends GenericActorClassGenerator {
«ENDIF»
«IF !ac.attributes.empty»
«FOR att : ac.attributes»
- «IF att.type.type instanceof PrimitiveType»
+ «IF att.type.type.enumerationOrPrimitive»
«genSavePrimitive(att)»
«ELSE»
««« DataClass and ExternalType (the latter one has to implement Serializable)
@@ -360,7 +359,7 @@ class ActorClassGen extends GenericActorClassGenerator {
«ENDIF»
«IF !ac.attributes.empty»
«FOR att : ac.attributes»
- «IF att.type.type instanceof PrimitiveType»
+ «IF att.type.type.enumerationOrPrimitive»
«genLoadPrimitive(att)»
«ELSE»
««« DataClass and ExternalType (the latter one has to implement Serializable)
@@ -376,7 +375,7 @@ class ActorClassGen extends GenericActorClassGenerator {
}
private def genSavePrimitive(Attribute att) {
- val type = (att.type.type as PrimitiveType).targetName
+ val type = att.type.type.typeName
val method = type.saveMethod
if (att.size>1)
@@ -400,7 +399,7 @@ class ActorClassGen extends GenericActorClassGenerator {
}
private def genLoadPrimitive(Attribute att) {
- val type = (att.type.type as PrimitiveType).targetName
+ val type = att.type.type.typeName
val method = type.loadMethod
if (att.size>1)
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.xtend
index 44884708f..5fafc639e 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.xtend
@@ -27,6 +27,7 @@ import org.eclipse.etrice.generator.generic.ProcedureHelpers
import org.eclipse.etrice.generator.generic.RoomExtensions
import org.eclipse.etrice.generator.generic.TypeHelpers
import static extension org.eclipse.etrice.core.room.util.RoomHelpers.*
+import org.eclipse.etrice.core.room.EnumerationType
class ConfigGenAddon {
@@ -63,6 +64,10 @@ class ConfigGenAddon {
if(value != null)
initGen.genAttributeInitializer(a, toValueLiteral(aType, value), invokes)
}
+ EnumerationType: {
+ // TODO-Enum
+ ""
+ }
DataClass:
'''
«FOR e : (aType as DataClass).allAttributes»
@@ -135,6 +140,10 @@ class ConfigGenAddon {
«ENDIF»
'''
}
+ EnumerationType: {
+ // TODO-Enum
+ ""
+ }
}
}
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/DataClassGen.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/DataClassGen.xtend
index ff893d71b..98e867194 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/DataClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/DataClassGen.xtend
@@ -53,7 +53,8 @@ class DataClassGen {
import java.io.Serializable;
«var models = root.getReferencedModels(dc)»
- «FOR model : models»import «model.name».*;
+ «FOR model : models»
+ import «model.name».*;
«ENDFOR»
«dc.userCode(1)»
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/EnumerationTypeGen.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/EnumerationTypeGen.xtend
new file mode 100644
index 000000000..abedb1908
--- /dev/null
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/EnumerationTypeGen.xtend
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2013 protos software gmbh (http://www.protos.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * CONTRIBUTORS:
+ * Henrik Rentz-Reichert (initial contribution)
+ *
+ *******************************************************************************/
+
+package org.eclipse.etrice.generator.java.gen
+
+import org.eclipse.etrice.generator.base.IGeneratorFileIo
+import com.google.inject.Inject
+import org.eclipse.etrice.generator.generic.RoomExtensions
+import org.eclipse.etrice.core.genmodel.etricegen.Root
+import org.eclipse.etrice.core.room.EnumerationType
+
+import static extension org.eclipse.etrice.core.room.util.RoomHelpers.*
+
+/**
+ * @author Henrik Rentz-Reichert
+ *
+ */
+class EnumerationTypeGen {
+
+ @Inject IGeneratorFileIo fileIO
+ @Inject extension JavaExtensions
+ @Inject extension RoomExtensions
+
+ def doGenerate(Root root) {
+ for (et: root.usedEnumClasses) {
+ var path = et.generationTargetPath+et.getPath
+ var infopath = et.generationInfoPath+et.getPath
+ var file = et.getJavaFileName
+ fileIO.generateFile("generating Enumeration implementation", path, infopath, file, root.generate(et))
+ }
+ }
+
+ def generate(Root root, EnumerationType et) {
+ val type = et.targetType
+ '''
+ package «et.getPackage()»;
+
+ public interface «et.name» {
+ «FOR lit: et.literals»
+ static final «type» «lit.name» = «lit.literalValue»;
+ «ENDFOR»
+ }
+ '''
+ }
+
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Initialization.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Initialization.xtend
index ea073b7d2..4449f91a2 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Initialization.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Initialization.xtend
@@ -77,7 +77,10 @@ class Initialization {
else if(aType.primitive){
var value = getDataConfigValue(path, roomClass)
return if(value != null) attributeInit(path, languageExt.toValueLiteral(aType as PrimitiveType, value))
- }
+ }
+ else if(aType.enumeration) {
+ // TODO-Enum
+ }
}
def private attributeInit(Attribute a, String value){
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 a33c69f6d..8c6b80d7c 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
@@ -33,6 +33,10 @@ 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.util.RoomHelpers
+
+import static extension org.eclipse.etrice.core.room.util.RoomHelpers.*
@Singleton
class JavaExtensions implements ILanguageExtension {
@@ -81,7 +85,7 @@ class JavaExtensions implements ILanguageExtension {
}
def boolean needsInitialization(Attribute a){
- a.size > 0 || !typeHelpers.isPrimitive(a.type.type) || typeHelpers.typeName(a.type.type).equals("String")
+ a.size > 0 || !typeHelpers.isEnumerationOrPrimitive(a.type.type) || typeHelpers.typeName(a.type.type).equals("String")
}
override String accessLevelPrivate() {"private "}
@@ -193,6 +197,8 @@ class JavaExtensions implements ILanguageExtension {
switch dt {
PrimitiveType:
toValueLiteral(dt, dt.defaultValueLiteral)
+ EnumerationType:
+ RoomHelpers::getDefaultValue(dt)
ExternalType:
"new "+(dt as ExternalType).targetName+"()"
default:
@@ -222,15 +228,19 @@ class JavaExtensions implements ILanguageExtension {
if (data==null)
return newArrayList("", "", "")
- var typeName = data.getRefType().getType().getName();
+ var typeName = data.refType.type.getName();
var castTypeName = typeName;
- if (data.getRefType().getType() instanceof PrimitiveType) {
- typeName = (data.getRefType().getType() as PrimitiveType).getTargetName();
- val ct = (data.getRefType().getType() as PrimitiveType).getCastName();
+ if (data.refType.type instanceof PrimitiveType) {
+ typeName = (data.refType.type as PrimitiveType).getTargetName()
+ val ct = (data.refType.type as PrimitiveType).getCastName()
if (ct!=null && !ct.isEmpty())
- castTypeName = ct;
+ castTypeName = ct
}
-
+ else if (data.refType.type instanceof EnumerationType) {
+ typeName = (data.refType.type as EnumerationType).targetType
+ castTypeName = (data.refType.type as EnumerationType).javaCastType
+ }
+
val typedData = typeName+" "+data.getName() + " = ("+castTypeName+") generic_data;\n";
val dataArg = ", "+data.getName();
val typedArgList = ", "+typeName+" "+data.getName();
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/MainGen.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/MainGen.xtend
index 3295db6da..e6edc1372 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/MainGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/MainGen.xtend
@@ -24,6 +24,7 @@ import org.eclipse.etrice.generator.generic.PrepareFileSystem
class MainGen implements IGenerator {
@Inject DataClassGen dataClassGen
+ @Inject EnumerationTypeGen enumTypeGen
@Inject ProtocolClassGen protocolClassGen
@Inject ActorClassGen actorClassGen
@Inject OptionalActorInterfaceGen optionalActorInterfaceGen
@@ -43,6 +44,7 @@ class MainGen implements IGenerator {
def void doGenerate(Root e) {
dataClassGen.doGenerate(e)
+ enumTypeGen.doGenerate(e)
protocolClassGen.doGenerate(e)
actorClassGen.doGenerate(e)
optionalActorInterfaceGen.doGenerate(e)
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 fde3e5a42..ce7d93095 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
@@ -19,7 +19,6 @@ import org.eclipse.etrice.core.genmodel.etricegen.Root
import org.eclipse.etrice.core.room.CommunicationType
import org.eclipse.etrice.core.room.DataClass
import org.eclipse.etrice.core.room.Message
-import org.eclipse.etrice.core.room.PrimitiveType
import org.eclipse.etrice.core.room.ProtocolClass
import org.eclipse.etrice.generator.base.IGeneratorFileIo
import org.eclipse.etrice.generator.generic.GenericProtocolClassGenerator
@@ -81,7 +80,8 @@ class ProtocolClassGen extends GenericProtocolClassGenerator {
«pc.userCode(1)»
«var models = root.getReferencedModels(pc)»
- «FOR model : models»import «model.name».*;
+ «FOR model : models»
+ import «model.name».*;
«ENDFOR»
public class «pc.name» {
@@ -273,7 +273,7 @@ class ProtocolClassGen extends GenericProtocolClassGenerator {
«IF m.data==null»
getPeerMsgReceiver().receive(new EventMessage(getPeerAddress(), «dir»_«m.name»));
«ELSE»
- getPeerMsgReceiver().receive(new EventWithDataMessage(getPeerAddress(), «dir»_«m.name», «m.data.name»«IF (!m.data.refType.ref && !(m.data.refType.type instanceof PrimitiveType))».deepCopy()«ENDIF»));
+ getPeerMsgReceiver().receive(new EventWithDataMessage(getPeerAddress(), «dir»_«m.name», «m.data.name»«IF (!m.data.refType.ref && !(m.data.refType.type.enumerationOrPrimitive))».deepCopy()«ENDIF»));
«ENDIF»
«ENDIF»
}
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/VariableServiceGen.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/VariableServiceGen.xtend
index 510b92894..1a65d6c48 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/VariableServiceGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/VariableServiceGen.xtend
@@ -145,6 +145,7 @@ class VariableServiceGen {
«FOR dc : getAllDataClasses(dataClasses)»
private void writeDataClass(String id, «dc.typeName» object, Map<String, Object> map){
«FOR a : dc.allAttributes»
+««« TODO-Enum
«IF a.type.type.primitive»
map.put(id+"/«a.name»", «IF a.size>0»toObjectArray(«ENDIF»object.«invokeGetter(a.name, null)»«IF a.size>0»)«ENDIF»);
«ELSE»
@@ -210,6 +211,8 @@ class VariableServiceGen {
def private CharSequence genGetAttributeValues(List<Attribute> path, ActorInstance ai){
val a = path.last
+
+ // TODO-Enum
if (a.type.type.primitive) {
'''
values.put("«ai.path»«path.toAbsolutePath('/')»", «IF a.size>0»toObjectArray(«ENDIF»«ai.varName».«path.invokeGetters(null)»«IF a.size>0»)«ENDIF»);
@@ -228,6 +231,8 @@ class VariableServiceGen {
def private CharSequence genSetAttributeValues1(List<Attribute> path, ActorInstance ai){
var a = path.last
var aVarName = path.toAbsolutePath("_")
+
+ // TODO-Enum
if(a.type.type.primitive){'''
id = "«ai.path»«path.toAbsolutePath("/")»";
«IF a.size==0»«a.type.type.typeName.toWrapper»«ELSE»«a.type.type.typeName»[]«ENDIF» «aVarName» = null;
@@ -253,6 +258,8 @@ class VariableServiceGen {
def private CharSequence genSetAttributeValues2(List<Attribute> path, ActorInstance ai){
var a = path.last
var aVarName = path.toAbsolutePath("_")
+
+ // TODO-Enum
if (a.type.type.primitive) {
val getters = if(path.size>1)path.take(path.size-1).invokeGetters(null)+"." else ""
'''
diff --git a/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ActorClassGen.java b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ActorClassGen.java
index 60e3fb8cf..c9b5f5737 100644
--- a/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ActorClassGen.java
+++ b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ActorClassGen.java
@@ -30,7 +30,6 @@ import org.eclipse.etrice.core.room.DetailCode;
import org.eclipse.etrice.core.room.InterfaceItem;
import org.eclipse.etrice.core.room.Message;
import org.eclipse.etrice.core.room.Port;
-import org.eclipse.etrice.core.room.PrimitiveType;
import org.eclipse.etrice.core.room.ProtocolClass;
import org.eclipse.etrice.core.room.RefableType;
import org.eclipse.etrice.core.room.ReferenceType;
@@ -48,6 +47,7 @@ import org.eclipse.etrice.generator.base.IGeneratorFileIo;
import org.eclipse.etrice.generator.generic.GenericActorClassGenerator;
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.generator.java.gen.ConfigGenAddon;
import org.eclipse.etrice.generator.java.gen.GlobalSettings;
@@ -92,6 +92,10 @@ public class ActorClassGen extends GenericActorClassGenerator {
@Extension
private StateMachineGen _stateMachineGen;
+ @Inject
+ @Extension
+ private TypeHelpers _typeHelpers;
+
public void doGenerate(final Root root) {
HashMap<ActorClass,WiredActorClass> _hashMap = new HashMap<ActorClass, WiredActorClass>();
final HashMap<ActorClass,WiredActorClass> ac2wired = _hashMap;
@@ -273,7 +277,6 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.newLineIfNotEmpty();
}
}
- _builder.newLine();
{
EList<ProtocolClass> _referencedProtocolClasses = root.getReferencedProtocolClasses(ac);
for(final ProtocolClass pc : _referencedProtocolClasses) {
@@ -287,7 +290,6 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.newLineIfNotEmpty();
}
}
- _builder.newLine();
{
EList<ActorRef> _actorRefs = ac.getActorRefs();
final Function1<ActorRef,Boolean> _function_2 = new Function1<ActorRef,Boolean>() {
@@ -1230,7 +1232,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
{
RefableType _type = att.getType();
DataType _type_1 = _type.getType();
- if ((_type_1 instanceof PrimitiveType)) {
+ boolean _isEnumerationOrPrimitive = this._typeHelpers.isEnumerationOrPrimitive(_type_1);
+ if (_isEnumerationOrPrimitive) {
String _genSavePrimitive = this.genSavePrimitive(att);
_builder.append(_genSavePrimitive, "");
_builder.newLineIfNotEmpty();
@@ -1293,7 +1296,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
{
RefableType _type = att.getType();
DataType _type_1 = _type.getType();
- if ((_type_1 instanceof PrimitiveType)) {
+ boolean _isEnumerationOrPrimitive = this._typeHelpers.isEnumerationOrPrimitive(_type_1);
+ if (_isEnumerationOrPrimitive) {
String _genLoadPrimitive = this.genLoadPrimitive(att);
_builder.append(_genLoadPrimitive, "");
_builder.newLineIfNotEmpty();
@@ -1343,7 +1347,7 @@ public class ActorClassGen extends GenericActorClassGenerator {
{
RefableType _type = att.getType();
DataType _type_1 = _type.getType();
- final String type = ((PrimitiveType) _type_1).getTargetName();
+ final String type = this._typeHelpers.typeName(_type_1);
final String method = this.getSaveMethod(type);
String _xifexpression = null;
int _size = att.getSize();
@@ -1435,7 +1439,7 @@ public class ActorClassGen extends GenericActorClassGenerator {
{
RefableType _type = att.getType();
DataType _type_1 = _type.getType();
- final String type = ((PrimitiveType) _type_1).getTargetName();
+ final String type = this._typeHelpers.typeName(_type_1);
final String method = this.getLoadMethod(type);
String _xifexpression = null;
int _size = att.getSize();
diff --git a/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.java b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.java
index 7364b033d..fb6b69fb8 100644
--- a/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.java
+++ b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.java
@@ -22,6 +22,7 @@ import org.eclipse.etrice.core.room.ActorClass;
import org.eclipse.etrice.core.room.Attribute;
import org.eclipse.etrice.core.room.DataClass;
import org.eclipse.etrice.core.room.DataType;
+import org.eclipse.etrice.core.room.EnumerationType;
import org.eclipse.etrice.core.room.InterfaceItem;
import org.eclipse.etrice.core.room.PortClass;
import org.eclipse.etrice.core.room.PrimitiveType;
@@ -137,6 +138,13 @@ public class ConfigGenAddon {
}
}
if (!_matched) {
+ if (aType instanceof EnumerationType) {
+ final EnumerationType _enumerationType = (EnumerationType)aType;
+ _matched=true;
+ _switchResult = "";
+ }
+ }
+ if (!_matched) {
if (aType instanceof DataClass) {
final DataClass _dataClass = (DataClass)aType;
_matched=true;
@@ -442,6 +450,13 @@ public class ConfigGenAddon {
_switchResult = _xblockexpression_1;
}
}
+ if (!_matched) {
+ if (aType instanceof EnumerationType) {
+ final EnumerationType _enumerationType = (EnumerationType)aType;
+ _matched=true;
+ _switchResult = "";
+ }
+ }
_xblockexpression = (_switchResult);
}
return _xblockexpression;
diff --git a/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/EnumerationTypeGen.java b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/EnumerationTypeGen.java
new file mode 100644
index 000000000..fd15bcea1
--- /dev/null
+++ b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/EnumerationTypeGen.java
@@ -0,0 +1,96 @@
+/**
+ * Copyright (c) 2013 protos software gmbh (http://www.protos.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * CONTRIBUTORS:
+ * Henrik Rentz-Reichert (initial contribution)
+ */
+package org.eclipse.etrice.generator.java.gen;
+
+import com.google.inject.Inject;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.etrice.core.genmodel.etricegen.Root;
+import org.eclipse.etrice.core.room.EnumLiteral;
+import org.eclipse.etrice.core.room.EnumerationType;
+import org.eclipse.etrice.core.room.util.RoomHelpers;
+import org.eclipse.etrice.generator.base.IGeneratorFileIo;
+import org.eclipse.etrice.generator.generic.RoomExtensions;
+import org.eclipse.etrice.generator.java.gen.JavaExtensions;
+import org.eclipse.xtend2.lib.StringConcatenation;
+import org.eclipse.xtext.xbase.lib.Extension;
+
+/**
+ * @author Henrik Rentz-Reichert
+ */
+@SuppressWarnings("all")
+public class EnumerationTypeGen {
+ @Inject
+ private IGeneratorFileIo fileIO;
+
+ @Inject
+ @Extension
+ private JavaExtensions _javaExtensions;
+
+ @Inject
+ @Extension
+ private RoomExtensions _roomExtensions;
+
+ public void doGenerate(final Root root) {
+ EList<EnumerationType> _usedEnumClasses = root.getUsedEnumClasses();
+ for (final EnumerationType et : _usedEnumClasses) {
+ {
+ String _generationTargetPath = this._roomExtensions.getGenerationTargetPath(et);
+ String _path = this._roomExtensions.getPath(et);
+ String path = (_generationTargetPath + _path);
+ String _generationInfoPath = this._roomExtensions.getGenerationInfoPath(et);
+ String _path_1 = this._roomExtensions.getPath(et);
+ String infopath = (_generationInfoPath + _path_1);
+ String file = this._javaExtensions.getJavaFileName(et);
+ CharSequence _generate = this.generate(root, et);
+ this.fileIO.generateFile("generating Enumeration implementation", path, infopath, file, _generate);
+ }
+ }
+ }
+
+ public CharSequence generate(final Root root, final EnumerationType et) {
+ CharSequence _xblockexpression = null;
+ {
+ final String type = RoomHelpers.getTargetType(et);
+ StringConcatenation _builder = new StringConcatenation();
+ _builder.append("package ");
+ String _package = this._roomExtensions.getPackage(et);
+ _builder.append(_package, "");
+ _builder.append(";");
+ _builder.newLineIfNotEmpty();
+ _builder.newLine();
+ _builder.append("public interface ");
+ String _name = et.getName();
+ _builder.append(_name, "");
+ _builder.append(" {");
+ _builder.newLineIfNotEmpty();
+ {
+ EList<EnumLiteral> _literals = et.getLiterals();
+ for(final EnumLiteral lit : _literals) {
+ _builder.append("\t");
+ _builder.append("static final ");
+ _builder.append(type, " ");
+ _builder.append(" ");
+ String _name_1 = lit.getName();
+ _builder.append(_name_1, " ");
+ _builder.append(" = ");
+ long _literalValue = lit.getLiteralValue();
+ _builder.append(_literalValue, " ");
+ _builder.append(";");
+ _builder.newLineIfNotEmpty();
+ }
+ }
+ _builder.append("}");
+ _builder.newLine();
+ _xblockexpression = (_builder);
+ }
+ return _xblockexpression;
+ }
+}
diff --git a/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/Initialization.java b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/Initialization.java
index 87d62e77e..02ed3ce38 100644
--- a/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/Initialization.java
+++ b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/Initialization.java
@@ -189,6 +189,13 @@ public class Initialization {
_xifexpression_2 = _attributeInit;
}
return _xifexpression_2;
+ } else {
+ CharSequence _xifexpression_3 = null;
+ boolean _isEnumeration = this.typeHelpers.isEnumeration(aType);
+ if (_isEnumeration) {
+ _xifexpression_3 = null;
+ }
+ _xifexpression_1 = _xifexpression_3;
}
_xifexpression = _xifexpression_1;
}
diff --git a/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/JavaExtensions.java b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/JavaExtensions.java
index 0a062b2ba..562933b94 100644
--- a/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/JavaExtensions.java
+++ b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/JavaExtensions.java
@@ -19,12 +19,14 @@ 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.EnumerationType;
import org.eclipse.etrice.core.room.ExternalType;
import org.eclipse.etrice.core.room.Message;
import org.eclipse.etrice.core.room.PrimitiveType;
import org.eclipse.etrice.core.room.RefableType;
import org.eclipse.etrice.core.room.RoomClass;
import org.eclipse.etrice.core.room.VarDecl;
+import org.eclipse.etrice.core.room.util.RoomHelpers;
import org.eclipse.etrice.generator.generic.ILanguageExtension;
import org.eclipse.etrice.generator.generic.TypeHelpers;
import org.eclipse.xtend2.lib.StringConcatenation;
@@ -159,8 +161,8 @@ public class JavaExtensions implements ILanguageExtension {
} else {
RefableType _type = a.getType();
DataType _type_1 = _type.getType();
- boolean _isPrimitive = this.typeHelpers.isPrimitive(_type_1);
- boolean _not = (!_isPrimitive);
+ boolean _isEnumerationOrPrimitive = this.typeHelpers.isEnumerationOrPrimitive(_type_1);
+ boolean _not = (!_isEnumerationOrPrimitive);
_or_1 = (_greaterThan || _not);
}
if (_or_1) {
@@ -451,6 +453,14 @@ public class JavaExtensions implements ILanguageExtension {
}
}
if (!_matched) {
+ if (dt instanceof EnumerationType) {
+ final EnumerationType _enumerationType = (EnumerationType)dt;
+ _matched=true;
+ String _defaultValue = RoomHelpers.getDefaultValue(_enumerationType);
+ _switchResult = _defaultValue;
+ }
+ }
+ if (!_matched) {
if (dt instanceof ExternalType) {
final ExternalType _externalType = (ExternalType)dt;
_matched=true;
@@ -540,6 +550,19 @@ public class JavaExtensions implements ILanguageExtension {
if (_and) {
castTypeName = ct;
}
+ } else {
+ RefableType _refType_4 = data.getRefType();
+ DataType _type_4 = _refType_4.getType();
+ if ((_type_4 instanceof EnumerationType)) {
+ RefableType _refType_5 = data.getRefType();
+ DataType _type_5 = _refType_5.getType();
+ String _targetType = RoomHelpers.getTargetType(((EnumerationType) _type_5));
+ typeName = _targetType;
+ RefableType _refType_6 = data.getRefType();
+ DataType _type_6 = _refType_6.getType();
+ String _javaCastType = RoomHelpers.getJavaCastType(((EnumerationType) _type_6));
+ castTypeName = _javaCastType;
+ }
}
String _plus = (typeName + " ");
String _name = data.getName();
diff --git a/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/MainGen.java b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/MainGen.java
index 4d748445f..13533b9af 100644
--- a/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/MainGen.java
+++ b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/MainGen.java
@@ -19,6 +19,7 @@ import org.eclipse.etrice.core.genmodel.etricegen.Root;
import org.eclipse.etrice.generator.generic.PrepareFileSystem;
import org.eclipse.etrice.generator.java.gen.ActorClassGen;
import org.eclipse.etrice.generator.java.gen.DataClassGen;
+import org.eclipse.etrice.generator.java.gen.EnumerationTypeGen;
import org.eclipse.etrice.generator.java.gen.NodeGen;
import org.eclipse.etrice.generator.java.gen.NodeRunnerGen;
import org.eclipse.etrice.generator.java.gen.OptionalActorFactoryGen;
@@ -34,6 +35,9 @@ public class MainGen implements IGenerator {
private DataClassGen dataClassGen;
@Inject
+ private EnumerationTypeGen enumTypeGen;
+
+ @Inject
private ProtocolClassGen protocolClassGen;
@Inject
@@ -66,6 +70,7 @@ public class MainGen implements IGenerator {
public void doGenerate(final Root e) {
this.dataClassGen.doGenerate(e);
+ this.enumTypeGen.doGenerate(e);
this.protocolClassGen.doGenerate(e);
this.actorClassGen.doGenerate(e);
this.optionalActorInterfaceGen.doGenerate(e);
diff --git a/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ProtocolClassGen.java b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ProtocolClassGen.java
index 3ccec30ae..c2724788e 100644
--- a/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ProtocolClassGen.java
+++ b/plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ProtocolClassGen.java
@@ -26,7 +26,6 @@ import org.eclipse.etrice.core.room.Message;
import org.eclipse.etrice.core.room.MessageHandler;
import org.eclipse.etrice.core.room.PortClass;
import org.eclipse.etrice.core.room.PortOperation;
-import org.eclipse.etrice.core.room.PrimitiveType;
import org.eclipse.etrice.core.room.ProtocolClass;
import org.eclipse.etrice.core.room.RefableType;
import org.eclipse.etrice.core.room.RoomModel;
@@ -793,7 +792,8 @@ public class ProtocolClassGen extends GenericProtocolClassGenerator {
VarDecl _data_3 = m.getData();
RefableType _refType_1 = _data_3.getRefType();
DataType _type = _refType_1.getType();
- boolean _not_1 = (!(_type instanceof PrimitiveType));
+ boolean _isEnumerationOrPrimitive = this._typeHelpers.isEnumerationOrPrimitive(_type);
+ boolean _not_1 = (!_isEnumerationOrPrimitive);
_and = (_not && _not_1);
}
if (_and) {

Back to the top