Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuergen Haug2013-11-19 15:55:55 +0000
committerHenrik Rentz-Reichert2013-11-25 11:40:18 +0000
commitd9871bb6cfbd3b146f6c0da07136192291bedd24 (patch)
tree81122d4facdf5cfc027ef4d35e44f2a01c1f4196 /plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen
parent475da5253481df1a63b0ebf52071729c2bd86881 (diff)
downloadorg.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
Diffstat (limited to 'plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen')
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ActorClassGen.xtend4
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.xtend5
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Initialization.xtend135
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/JavaExtensions.xtend23
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){

Back to the top