diff options
author | Juergen Haug | 2013-11-19 15:55:55 +0000 |
---|---|---|
committer | Henrik Rentz-Reichert | 2013-11-25 11:40:18 +0000 |
commit | d9871bb6cfbd3b146f6c0da07136192291bedd24 (patch) | |
tree | 81122d4facdf5cfc027ef4d35e44f2a01c1f4196 /plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen | |
parent | 475da5253481df1a63b0ebf52071729c2bd86881 (diff) | |
download | org.eclipse.etrice-d9871bb6cfbd3b146f6c0da07136192291bedd24.tar.gz org.eclipse.etrice-d9871bb6cfbd3b146f6c0da07136192291bedd24.tar.xz org.eclipse.etrice-d9871bb6cfbd3b146f6c0da07136192291bedd24.zip |
[core,gen] added enum room init + enum config support for java,c
Change-Id: Ie721bfedc211b210c111f5d67fcecb899aff7409
Diffstat (limited to 'plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen')
4 files changed, 92 insertions, 75 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 c85bdf765..c1bb1afcb 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 @@ -464,7 +464,7 @@ class ActorClassGen extends GenericActorClassGenerator { val type = att.type.type.typeName val method = type.saveMethod - if (att.size>1) + if (att.size>0) "for ("+type+" v: "+att.name+") output."+method+"(v);" else "output."+method+"("+att.name+");" @@ -488,7 +488,7 @@ class ActorClassGen extends GenericActorClassGenerator { val type = att.type.type.typeName val method = type.loadMethod - if (att.size>1) + if (att.size>0) "for (int i=0; i<"+att.name+".length; ++i) "+att.name+"[i] = input."+method+"();" else att.name+" = input."+method+"();" 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 5fafc639e..e1524d3d3 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 @@ -65,8 +65,9 @@ class ConfigGenAddon { initGen.genAttributeInitializer(a, toValueLiteral(aType, value), invokes) } EnumerationType: { - // TODO-Enum - "" + var value = typeHelpers.getAttrInstanceConfigValue(path, instance) + if(value != null) + initGen.genAttributeInitializer(a, value, invokes) } DataClass: ''' 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 4449f91a2..8f7256c14 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 @@ -9,7 +9,6 @@ * Henrik Rentz-Reichert (initial contribution) * *******************************************************************************/ - package org.eclipse.etrice.generator.java.gen import com.google.inject.Inject @@ -26,6 +25,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 @Singleton class Initialization { @@ -34,8 +34,8 @@ class Initialization { @Inject extension RoomExtensions @Inject extension JavaExtensions languageExt @Inject extension ProcedureHelpers procedureHelpers - - def attributeInitialization(List<Attribute> attribs, EObject roomClass, boolean useClassDefaultsOnly) { + + def attributeInitialization(List<Attribute> attribs, EObject roomClass, boolean useClassDefaultsOnly) { ''' // initialize attributes «FOR a : attribs» @@ -44,84 +44,95 @@ class Initialization { «ENDFOR» ''' } - - def private attributeClassInit(Attribute a, EObject roomClass, boolean useClassDefaultsOnly){ + + def private attributeClassInit(Attribute a, EObject roomClass, boolean useClassDefaultsOnly) { var aType = a.type.type - if(a.type.ref){ - if(a.defaultValueLiteral != null) - attributeInit(a, a.defaultValueLiteral) - else if(languageExt.needsInitialization(a)) - attributeInit(a, languageExt.nullPointer) - } - else{ - if(aType.primitive){ + + switch (aType) { + case (a.type.ref): + if (a.defaultValueLiteral != null) + attributeInit(a, a.defaultValueLiteral) + else if (languageExt.needsInitialization(a)) + attributeInit(a, languageExt.nullPointer) + PrimitiveType: { + var value = getDataConfigValue(new ArrayList<Attribute>.union(a), roomClass) + if(value == null) value = a.defaultValueLiteral + if(value != null) attributeInit(a, languageExt.toValueLiteral(aType, value)) else if(!useClassDefaultsOnly || + languageExt.needsInitialization(a)) attributeInit(a, languageExt.defaultValue(aType)) + } + EnumerationType: { var value = getDataConfigValue(new ArrayList<Attribute>.union(a), roomClass) if(value == null) value = a.defaultValueLiteral - if(value != null) attributeInit(a, languageExt.toValueLiteral(aType as PrimitiveType, value)) - else if(!useClassDefaultsOnly || languageExt.needsInitialization(a)) attributeInit(a, languageExt.defaultValue(aType)) - } else - attributeInit(a, languageExt.defaultValue(aType)) + if(value != null) attributeInit(a, languageExt.toEnumLiteral(aType, value)) else if(!useClassDefaultsOnly || + languageExt.needsInitialization(a)) attributeInit(a, languageExt.defaultValue(aType)) + } } } - - def private CharSequence attributeInitPrimitiveRec(List<Attribute> path, EObject roomClass){ + + def private CharSequence attributeInitPrimitiveRec(List<Attribute> path, EObject roomClass) { var a = path.last var aType = a.type.type - if(aType.dataClass){ - return ''' - «FOR e : (aType as DataClass).allAttributes» - «attributeInitPrimitiveRec(path.union(e), roomClass)» - «ENDFOR» - ''' - } - 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 + + switch (aType) { + DataClass: + return ''' + «FOR e : (aType as DataClass).allAttributes» + «attributeInitPrimitiveRec(path.union(e), roomClass)» + «ENDFOR» + ''' + PrimitiveType: { + var value = getDataConfigValue(path, roomClass) + return if(value != null) attributeInit(path, languageExt.toValueLiteral(aType, value)) + } + EnumerationType: { + var value = getDataConfigValue(path, roomClass) + return if(value != null) attributeInit(path, languageExt.toEnumLiteral(aType, value)) + } } } - - def private attributeInit(Attribute a, String value){ + + def private attributeInit(Attribute a, String value) { attributeInit(new ArrayList<Attribute>.union(a), value) } - - def private attributeInit(List<Attribute> path, String value){ - val getter = if(path.size == 1) "this" else procedureHelpers.invokeGetters(path.take(path.size-1), null).toString - return genAttributeInitializer(path.last, value, getter) + + def private attributeInit(List<Attribute> path, String value) { + val getter = if(path.size == 1) "this" else procedureHelpers.invokeGetters(path.take(path.size - 1), null). + toString + return genAttributeInitializer(path.last, value, getter) } - - def genAttributeInitializer(Attribute a, String value, String invokes){ + + def genAttributeInitializer(Attribute a, String value, String invokes) { var aType = a.type.type + // special treatment of char array with single character ('x') ''' - «IF a.size == 0 || (a.size > 0 && "char".equals(aType.typeName) && !value.matches("'.'|\\(char\\).*"))» - «invokes».«procedureHelpers.invokeSetter(a.name, null, value)»; - «ELSEIF !value.trim.startsWith('{') || "char".equals(aType.typeName)» - { - «aType.typeName»[] array = new «aType.typeName»[«a.size»]; - «IF !(a.type.ref && aType.primitive)» - for (int i=0;i<«a.size»;i++){ - array[i] = «value»; - } - «ENDIF» - «invokes».«procedureHelpers.invokeSetter(a.name, null, "array")»; - } - «ELSE» - «invokes».«procedureHelpers.invokeSetter(a.name,null, '''new «aType.typeName»[] «value»''')»; - «ENDIF» - ''' + «IF a.size == 0 || (a.size > 0 && "char".equals(aType.typeName) && !value.matches("'.'|\\(char\\).*"))» + «invokes».«procedureHelpers.invokeSetter(a.name, null, value)»; + «ELSEIF !value.trim.startsWith('{') || "char".equals(aType.typeName)» + { + «aType.typeName»[] array = new «aType.typeName»[«a.size»]; + «IF !(a.type.ref && aType.primitive)» + for (int i=0;i<«a.size»;i++){ + array[i] = «value»; + } + «ENDIF» + «invokes».«procedureHelpers.invokeSetter(a.name, null, "array")»; + } + «ELSE» + «invokes».«procedureHelpers.invokeSetter(a.name, null, '''new «aType.typeName»[] «value»''')»; + «ENDIF» + ''' } - - def private getDataConfigValue(List<Attribute> path, EObject roomClass){ - return switch roomClass{ + + def private getDataConfigValue(List<Attribute> path, EObject roomClass) { + return switch roomClass { ActorClass: typeHelpers.getAttrClassConfigValue(path, roomClass, false) PortClass: typeHelpers.getAttrClassConfigValue(path, roomClass) - DataClass: null + DataClass: + null } } - -}
\ No newline at end of file + +} 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 8c6b80d7c..1564142e8 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 @@ -152,15 +152,20 @@ class JavaExtensions implements ILanguageExtension { "super."+method+"("+args+");" } - override toValueLiteral(PrimitiveType type, String value) { - switch(type.targetName){ - case !typeHelpers.isCharacterType(type) && value.contains(','): { - var singleValues = value.replace('{', '').replace('}', '').trim.split(',') - '''{ «FOR v: singleValues SEPARATOR ', '»«castValue(type, v.trim)»«ENDFOR» }'''.toString - } - default: - castValue(type, value) - } + override toValueLiteral(PrimitiveType type, String value){ + if(!typeHelpers.isCharacterType(type) && (value.contains(',') || value.contains('{'))) { + var singleValues = value.replace('{', '').replace('}', '').trim.split(',') + '''{ «FOR v: singleValues SEPARATOR ', '»«castValue(type, v.trim)»«ENDFOR» }'''.toString + }else + castValue(type, value) + } + + override toEnumLiteral(EnumerationType type, String value){ + if(value.contains(',') || value.contains('{')) { + var singleValues = value.replace('{', '').replace('}', '').trim.split(',') + '''{ «FOR v: singleValues SEPARATOR ', '»«v.trim»«ENDFOR» }'''.toString + } else + value } def private castValue(PrimitiveType type, String value){ |