Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrik Rentz-Reichert2012-03-27 15:34:08 +0000
committerHenrik Rentz-Reichert2012-03-27 15:34:08 +0000
commitde466282f7274e6f1f8f225dc65f835b657c6b1f (patch)
tree03873ef830f56542ae35d54601404651047c4d2a /plugins/org.eclipse.etrice.generator.java/src/org
parente6984416e967901acfff8f057624080662673ad2 (diff)
downloadorg.eclipse.etrice-de466282f7274e6f1f8f225dc65f835b657c6b1f.tar.gz
org.eclipse.etrice-de466282f7274e6f1f8f225dc65f835b657c6b1f.tar.xz
org.eclipse.etrice-de466282f7274e6f1f8f225dc65f835b657c6b1f.zip
[core.room, generator, generator.c, generator.java] introduced
possibility to define constructors and destructors for both, ActorClass and DataClass
Diffstat (limited to 'plugins/org.eclipse.etrice.generator.java/src/org')
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ActorClassGen.xtend30
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/DataClassGen.xtend17
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/JavaExtensions.xtend14
3 files changed, 57 insertions, 4 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 052396bf3..19261cbfc 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
@@ -19,6 +19,7 @@ import org.eclipse.etrice.generator.base.ILogger
import org.eclipse.etrice.generator.etricegen.ExpandedActorClass
import org.eclipse.etrice.generator.etricegen.Root
import org.eclipse.xtext.generator.JavaIoFileSystemAccess
+import static extension org.eclipse.etrice.core.room.util.RoomHelpers.*
import org.eclipse.etrice.generator.extensions.RoomExtensions
import org.eclipse.etrice.generator.generic.ProcedureHelpers
@@ -47,7 +48,11 @@ class ActorClassGen extends GenericActorClassGenerator {
}
}
- def generate(Root root, ExpandedActorClass xpac, ActorClass ac) {'''
+ def generate(Root root, ExpandedActorClass xpac, ActorClass ac) {
+ val ctor = ac.operations.filter(op|op.constructor).head
+ val dtor = ac.operations.filter(op|op.destructor).head
+
+ '''
package «ac.getPackage»;
import org.eclipse.etrice.runtime.java.messaging.Address;
@@ -77,10 +82,12 @@ class ActorClassGen extends GenericActorClassGenerator {
«FOR ep : ac.getEndPorts()»
protected «ep.getPortClassName()» «ep.name» = null;
«ENDFOR»
+
//--------------------- saps
«FOR sap : ac.strSAPs»
protected «sap.getPortClassName()» «sap.name» = null;
«ENDFOR»
+
//--------------------- services
«FOR svc : ac.serviceImplementations»
protected «svc.getPortClassName()» «svc.spp.name» = null;
@@ -90,7 +97,7 @@ class ActorClassGen extends GenericActorClassGenerator {
«genInterfaceItemConstants(xpac, ac)»
«helpers.attributes(ac.attributes)»
- «helpers.operationsImplementation(ac.operations, ac.name)»
+ «helpers.operationsImplementation(ac)»
//--------------------- construction
public «ac.name»(IRTObject parent, String name, Address[][] port_addr, Address[][] peer_addr){
@@ -107,14 +114,25 @@ class ActorClassGen extends GenericActorClassGenerator {
«FOR ep : ac.getEndPorts()»
«ep.name» = new «ep.getPortClassName()»(this, "«ep.name»", IFITEM_«ep.name», «IF ep.multiplicity==1»0, «ENDIF»port_addr[IFITEM_«ep.name»]«IF ep.multiplicity==1»[0]«ENDIF», peer_addr[IFITEM_«ep.name»]«IF ep.multiplicity==1»[0]«ENDIF»);
«ENDFOR»
+
// own saps
«FOR sap : ac.strSAPs»
«sap.name» = new «sap.getPortClassName()»(this, "«sap.name»", IFITEM_«sap.name», 0, port_addr[IFITEM_«sap.name»][0], peer_addr[IFITEM_«sap.name»][0]);
«ENDFOR»
+
// own service implementations
«FOR svc : ac.serviceImplementations»
«svc.spp.name» = new «svc.getPortClassName()»(this, "«svc.spp.name»", IFITEM_«svc.spp.name», port_addr[IFITEM_«svc.spp.name»], peer_addr[IFITEM_«svc.spp.name»]);
«ENDFOR»
+ «IF ctor!=null»
+
+ {
+ // user defined constructor body
+ «FOR l : ctor.detailCode.commands»
+ «l»
+ «ENDFOR»
+ }
+ «ENDIF»
}
@@ -135,7 +153,13 @@ class ActorClassGen extends GenericActorClassGenerator {
public void destroy(){
destroyUser();
- }
+ «IF dtor!=null»
+
+ «FOR l : dtor.detailCode.commands»
+ «l»
+ «ENDFOR»
+ «ENDIF»
+ }
«IF ac.hasNonEmptyStateMachine»
«stateMachineGen.genStateMachine(xpac, ac)»
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 faa4cc2b7..246c46116 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
@@ -18,6 +18,8 @@ import java.util.List
import org.eclipse.etrice.core.room.Attribute
import org.eclipse.etrice.core.room.DataClass
import org.eclipse.etrice.core.room.ComplexType
+import static extension org.eclipse.etrice.core.room.util.RoomHelpers.*
+
import org.eclipse.etrice.generator.base.ILogger
import org.eclipse.etrice.generator.etricegen.Root
import org.eclipse.xtext.generator.JavaIoFileSystemAccess
@@ -46,7 +48,11 @@ class DataClassGen {
}
}
- def generate(Root root, DataClass dc) {'''
+ def generate(Root root, DataClass dc) {
+ val ctor = dc.operations.filter(op|op.constructor).head
+ val dtor = dc.operations.filter(op|op.destructor).head
+
+ '''
package «dc.getPackage()»;
«var models = root.getReferencedModels(dc)»
@@ -71,6 +77,15 @@ class DataClassGen {
super();
«dc.attributes.attributeInitialization(true)»
+ «IF ctor!=null»
+
+ {
+ // user defined constructor body
+ «FOR l : ctor.detailCode.commands»
+ «l»
+ «ENDFOR»
+ }
+ «ENDIF»
}
// constructor using fields
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 bcf12edec..4ba14bc25 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
@@ -84,4 +84,18 @@ class JavaExtensions implements ILanguageExtension {
override String arrayDeclaration(String type, int size, String name) {
type+" "+name+"[]";
}
+
+ override String constructorName(String cls) {
+ cls
+ }
+ override String destructorName(String cls) {
+ cls+"_dtor"
+ }
+ override String constructorReturnType() {
+ ""
+ }
+ override String destructorReturnType() {
+ "void"
+ }
+
}

Back to the top