diff options
author | Henrik Rentz-Reichert | 2013-11-14 11:26:35 +0000 |
---|---|---|
committer | Henrik Rentz-Reichert | 2013-11-15 09:47:35 +0000 |
commit | af42471511f758e47a5962345e91d5a1f5fe266c (patch) | |
tree | d55f732b54c06b81ce3d9ee051268693615906e8 /plugins/org.eclipse.etrice.generator.java | |
parent | 88ef1ceb04743522dca1198378771480754d3657 (diff) | |
download | org.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')
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) { |