Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrik Rentz-Reichert2013-03-28 08:57:24 +0000
committerHenrik Rentz-Reichert2013-03-28 08:57:24 +0000
commit4659b0189bee81cc7f225801f4e7ac95c22d3de3 (patch)
treece68f9a439b1a4acc031b0d0438e613ccc8e2582
parent11d755e6ad0b733e747669afc9ff0a72def956ce (diff)
downloadorg.eclipse.etrice-4659b0189bee81cc7f225801f4e7ac95c22d3de3.tar.gz
org.eclipse.etrice-4659b0189bee81cc7f225801f4e7ac95c22d3de3.tar.xz
org.eclipse.etrice-4659b0189bee81cc7f225801f4e7ac95c22d3de3.zip
[generator.java] bug 404533: [generator.java] BehaviorManual annotation should be handled
https://bugs.eclipse.org/bugs/show_bug.cgi?id=404533
-rw-r--r--plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ActorClassGen.xtend76
-rw-r--r--plugins/org.eclipse.etrice.generator.java/xtend-gen/org/eclipse/etrice/generator/java/gen/ActorClassGen.java233
2 files changed, 187 insertions, 122 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 09ae2b916..bd64d9c8d 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
@@ -14,17 +14,17 @@ package org.eclipse.etrice.generator.java.gen
import com.google.inject.Inject
import com.google.inject.Singleton
-import org.eclipse.etrice.core.room.ActorClass
import org.eclipse.etrice.core.genmodel.base.ILogger
import org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass
import org.eclipse.etrice.core.genmodel.etricegen.Root
-import org.eclipse.xtext.generator.JavaIoFileSystemAccess
-import static extension org.eclipse.etrice.core.room.util.RoomHelpers.*
-import org.eclipse.etrice.generator.base.AbstractGenerator
-import org.eclipse.etrice.generator.generic.RoomExtensions
-import org.eclipse.etrice.generator.generic.ProcedureHelpers
-import org.eclipse.etrice.generator.generic.GenericActorClassGenerator
+import org.eclipse.etrice.generator.base.AbstractGenerator
import org.eclipse.etrice.generator.base.IDataConfiguration
+import org.eclipse.etrice.generator.generic.GenericActorClassGenerator
+import org.eclipse.etrice.generator.generic.ProcedureHelpers
+import org.eclipse.etrice.generator.generic.RoomExtensions
+import org.eclipse.xtext.generator.JavaIoFileSystemAccess
+
+import static extension org.eclipse.etrice.core.room.util.RoomHelpers.*
@Singleton
class ActorClassGen extends GenericActorClassGenerator {
@@ -42,15 +42,20 @@ class ActorClassGen extends GenericActorClassGenerator {
def doGenerate(Root root) {
for (xpac: root.xpActorClasses) {
- var path = xpac.actorClass.generationTargetPath+xpac.actorClass.getPath
+ val manualBehavior = xpac.actorClass.isBehaviorAnnotationPresent("BehaviorManual")
+ val path = xpac.actorClass.generationTargetPath+xpac.actorClass.getPath
var file = xpac.actorClass.getJavaFileName
+ if (manualBehavior)
+ file = "Abstract"+file
logger.logInfo("generating ActorClass implementation '"+file+"' in '"+path+"'")
fileAccess.setOutputPath(path)
- fileAccess.generateFile(file, root.generate(xpac, xpac.actorClass))
+ fileAccess.generateFile(file, root.generate(xpac, manualBehavior))
}
}
- def generate(Root root, ExpandedActorClass xpac, ActorClass ac) {
+ def generate(Root root, ExpandedActorClass xpac, boolean manualBehavior) {
+ val ac = xpac.actorClass
+ val clsname = if (manualBehavior) "Abstract"+ac.name else ac.name
val ctor = ac.operations.filter(op|op.constructor).head
val dtor = ac.operations.filter(op|op.destructor).head
val models = root.getReferencedModels(ac)
@@ -81,7 +86,7 @@ class ActorClassGen extends GenericActorClassGenerator {
«ac.userCode(1)»
- public «IF ac.^abstract»abstract «ENDIF»class «ac.name» extends «IF ac.base!=null»«ac.base.name»«ELSE»ActorClassBase«ENDIF» {
+ public «IF manualBehavior || ac.^abstract»abstract «ENDIF»class «clsname» extends «IF ac.base!=null»«ac.base.name»«ELSE»ActorClassBase«ENDIF» {
«ac.userCode(2)»
@@ -111,7 +116,7 @@ class ActorClassGen extends GenericActorClassGenerator {
«ac.operationsImplementation»
//--------------------- construction
- public «ac.name»(IRTObject parent, String name) {
+ public «clsname»(IRTObject parent, String name) {
super(parent, name);
setClassName("«ac.name»");
@@ -173,28 +178,41 @@ class ActorClassGen extends GenericActorClassGenerator {
//--------------------- lifecycle functions
«IF !ac.overridesStop()»
- public void stop(){
- stopUser();
- super.stop();
- }
+ «IF manualBehavior»
+ public abstract void stop();
+ «ELSE»
+ public void stop(){
+ stopUser();
+ super.stop();
+ }
+ «ENDIF»
«ENDIF»
«IF dtor!=null»
- public void destroy(){
- «ac.name.destructorCall»;
- super.destroy();
- }
+ «IF manualBehavior»
+ public abstract void destroy();
+ «ELSE»
+ public void destroy(){
+ «ac.name.destructorCall»;
+ super.destroy();
+ }
+ «ENDIF»
«ENDIF»
- «IF ac.hasNonEmptyStateMachine»
- «xpac.genStateMachine()»
- «ELSEIF !xpac.hasStateMachine()»
- //--------------------- no state machine
- public void receiveEvent(InterfaceItemBase ifitem, int evt, Object data) {
- handleSystemEvent(ifitem, evt, data);
- }
-
- public void executeInitTransition() {}
+ «IF manualBehavior»
+ public abstract void receiveEvent(InterfaceItemBase ifitem, int evt, Object data);
+ public abstract void executeInitTransition();
+ «ELSE»
+ «IF ac.hasNonEmptyStateMachine»
+ «xpac.genStateMachine()»
+ «ELSEIF !xpac.hasStateMachine()»
+ //--------------------- no state machine
+ public void receiveEvent(InterfaceItemBase ifitem, int evt, Object data) {
+ handleSystemEvent(ifitem, evt, data);
+ }
+
+ public void executeInitTransition() {}
+ «ENDIF»
«ENDIF»
};
'''
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 57eff487b..0604bbb67 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
@@ -69,28 +69,44 @@ public class ActorClassGen extends GenericActorClassGenerator {
for (final ExpandedActorClass xpac : _xpActorClasses) {
{
ActorClass _actorClass = xpac.getActorClass();
- String _generationTargetPath = this._roomExtensions.getGenerationTargetPath(_actorClass);
+ final boolean manualBehavior = RoomHelpers.isBehaviorAnnotationPresent(_actorClass, "BehaviorManual");
ActorClass _actorClass_1 = xpac.getActorClass();
- String _path = this._roomExtensions.getPath(_actorClass_1);
- String path = (_generationTargetPath + _path);
+ String _generationTargetPath = this._roomExtensions.getGenerationTargetPath(_actorClass_1);
ActorClass _actorClass_2 = xpac.getActorClass();
- String file = this._javaExtensions.getJavaFileName(_actorClass_2);
- String _plus = ("generating ActorClass implementation \'" + file);
- String _plus_1 = (_plus + "\' in \'");
- String _plus_2 = (_plus_1 + path);
- String _plus_3 = (_plus_2 + "\'");
- this.logger.logInfo(_plus_3);
- this.fileAccess.setOutputPath(path);
+ String _path = this._roomExtensions.getPath(_actorClass_2);
+ final String path = (_generationTargetPath + _path);
ActorClass _actorClass_3 = xpac.getActorClass();
- CharSequence _generate = this.generate(root, xpac, _actorClass_3);
+ String file = this._javaExtensions.getJavaFileName(_actorClass_3);
+ if (manualBehavior) {
+ String _plus = ("Abstract" + file);
+ file = _plus;
+ }
+ String _plus_1 = ("generating ActorClass implementation \'" + file);
+ String _plus_2 = (_plus_1 + "\' in \'");
+ String _plus_3 = (_plus_2 + path);
+ String _plus_4 = (_plus_3 + "\'");
+ this.logger.logInfo(_plus_4);
+ this.fileAccess.setOutputPath(path);
+ CharSequence _generate = this.generate(root, xpac, manualBehavior);
this.fileAccess.generateFile(file, _generate);
}
}
}
- public CharSequence generate(final Root root, final ExpandedActorClass xpac, final ActorClass ac) {
+ public CharSequence generate(final Root root, final ExpandedActorClass xpac, final boolean manualBehavior) {
CharSequence _xblockexpression = null;
{
+ final ActorClass ac = xpac.getActorClass();
+ String _xifexpression = null;
+ if (manualBehavior) {
+ String _name = ac.getName();
+ String _plus = ("Abstract" + _name);
+ _xifexpression = _plus;
+ } else {
+ String _name_1 = ac.getName();
+ _xifexpression = _name_1;
+ }
+ final String clsname = _xifexpression;
EList<StandardOperation> _operations = ac.getOperations();
final Function1<StandardOperation,Boolean> _function = new Function1<StandardOperation,Boolean>() {
public Boolean apply(final StandardOperation op) {
@@ -146,8 +162,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
{
for(final RoomModel model : models) {
_builder.append("import ");
- String _name = model.getName();
- _builder.append(_name, "");
+ String _name_2 = model.getName();
+ _builder.append(_name_2, "");
_builder.append(".*;");
_builder.newLineIfNotEmpty();
}
@@ -160,8 +176,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
String _package_1 = this._roomExtensions.getPackage(pc);
_builder.append(_package_1, "");
_builder.append(".");
- String _name_1 = pc.getName();
- _builder.append(_name_1, "");
+ String _name_3 = pc.getName();
+ _builder.append(_name_3, "");
_builder.append(".*;");
_builder.newLineIfNotEmpty();
}
@@ -174,22 +190,27 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.newLine();
_builder.append("public ");
{
- boolean _isAbstract = ac.isAbstract();
- if (_isAbstract) {
+ boolean _or = false;
+ if (manualBehavior) {
+ _or = true;
+ } else {
+ boolean _isAbstract = ac.isAbstract();
+ _or = (manualBehavior || _isAbstract);
+ }
+ if (_or) {
_builder.append("abstract ");
}
}
_builder.append("class ");
- String _name_2 = ac.getName();
- _builder.append(_name_2, "");
+ _builder.append(clsname, "");
_builder.append(" extends ");
{
ActorClass _base = ac.getBase();
boolean _notEquals = (!Objects.equal(_base, null));
if (_notEquals) {
ActorClass _base_1 = ac.getBase();
- String _name_3 = _base_1.getName();
- _builder.append(_name_3, "");
+ String _name_4 = _base_1.getName();
+ _builder.append(_name_4, "");
} else {
_builder.append("ActorClassBase");
}
@@ -214,8 +235,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
String _portClassName = this._roomExtensions.getPortClassName(ep);
_builder.append(_portClassName, " ");
_builder.append(" ");
- String _name_4 = ep.getName();
- _builder.append(_name_4, " ");
+ String _name_5 = ep.getName();
+ _builder.append(_name_5, " ");
_builder.append(" = null;");
_builder.newLineIfNotEmpty();
}
@@ -233,8 +254,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
String _portClassName_1 = this._roomExtensions.getPortClassName(sap);
_builder.append(_portClassName_1, " ");
_builder.append(" ");
- String _name_5 = sap.getName();
- _builder.append(_name_5, " ");
+ String _name_6 = sap.getName();
+ _builder.append(_name_6, " ");
_builder.append(" = null;");
_builder.newLineIfNotEmpty();
}
@@ -253,8 +274,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.append(_portClassName_2, " ");
_builder.append(" ");
SPPRef _spp = svc.getSpp();
- String _name_6 = _spp.getName();
- _builder.append(_name_6, " ");
+ String _name_7 = _spp.getName();
+ _builder.append(_name_7, " ");
_builder.append(" = null;");
_builder.newLineIfNotEmpty();
}
@@ -282,8 +303,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
for(final Attribute a : _dynConfigReadAttributes_1) {
_builder.append("\t");
_builder.append("private DynConfigLock lock_");
- String _name_7 = a.getName();
- _builder.append(_name_7, " ");
+ String _name_8 = a.getName();
+ _builder.append(_name_8, " ");
_builder.append(";");
_builder.newLineIfNotEmpty();
}
@@ -298,8 +319,7 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.newLine();
_builder.append("\t");
_builder.append("public ");
- String _name_8 = ac.getName();
- _builder.append(_name_8, " ");
+ _builder.append(clsname, " ");
_builder.append("(IRTObject parent, String name) {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
@@ -462,19 +482,19 @@ public class ActorClassGen extends GenericActorClassGenerator {
}
_builder.newLine();
{
- boolean _or = false;
+ boolean _or_1 = false;
List<Attribute> _dynConfigReadAttributes_2 = this.dataConfigExt.getDynConfigReadAttributes(ac);
boolean _isEmpty_1 = _dynConfigReadAttributes_2.isEmpty();
boolean _not_1 = (!_isEmpty_1);
if (_not_1) {
- _or = true;
+ _or_1 = true;
} else {
List<Attribute> _dynConfigWriteAttributes = this.dataConfigExt.getDynConfigWriteAttributes(ac);
boolean _isEmpty_2 = _dynConfigWriteAttributes.isEmpty();
boolean _not_2 = (!_isEmpty_2);
- _or = (_not_1 || _not_2);
+ _or_1 = (_not_1 || _not_2);
}
- if (_or) {
+ if (_or_1) {
{
List<Attribute> _dynConfigReadAttributes_3 = this.dataConfigExt.getDynConfigReadAttributes(ac);
for(final Attribute a_1 : _dynConfigReadAttributes_3) {
@@ -557,20 +577,28 @@ public class ActorClassGen extends GenericActorClassGenerator {
boolean _overridesStop = this._roomExtensions.overridesStop(ac);
boolean _not_3 = (!_overridesStop);
if (_not_3) {
- _builder.append("\t");
- _builder.append("public void stop(){");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("\t");
- _builder.append("stopUser();");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("\t");
- _builder.append("super.stop();");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("}");
- _builder.newLine();
+ {
+ if (manualBehavior) {
+ _builder.append("\t");
+ _builder.append("public abstract void stop();");
+ _builder.newLine();
+ } else {
+ _builder.append("\t");
+ _builder.append("public void stop(){");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("\t");
+ _builder.append("stopUser();");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("\t");
+ _builder.append("super.stop();");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("}");
+ _builder.newLine();
+ }
+ }
}
}
_builder.append("\t");
@@ -578,55 +606,74 @@ public class ActorClassGen extends GenericActorClassGenerator {
{
boolean _notEquals_2 = (!Objects.equal(dtor, null));
if (_notEquals_2) {
- _builder.append("\t");
- _builder.append("public void destroy(){");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("\t");
- String _name_31 = ac.getName();
- String _destructorCall = this._procedureHelpers.destructorCall(_name_31);
- _builder.append(_destructorCall, " ");
- _builder.append(";");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.append("\t");
- _builder.append("super.destroy();");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("}");
- _builder.newLine();
+ {
+ if (manualBehavior) {
+ _builder.append("\t");
+ _builder.append("public abstract void destroy();");
+ _builder.newLine();
+ } else {
+ _builder.append("\t");
+ _builder.append("public void destroy(){");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("\t");
+ String _name_31 = ac.getName();
+ String _destructorCall = this._procedureHelpers.destructorCall(_name_31);
+ _builder.append(_destructorCall, " ");
+ _builder.append(";");
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t");
+ _builder.append("\t");
+ _builder.append("super.destroy();");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("}");
+ _builder.newLine();
+ }
+ }
}
}
_builder.newLine();
{
- boolean _hasNonEmptyStateMachine = RoomHelpers.hasNonEmptyStateMachine(ac);
- if (_hasNonEmptyStateMachine) {
+ if (manualBehavior) {
_builder.append("\t");
- CharSequence _genStateMachine = this._stateMachineGen.genStateMachine(xpac);
- _builder.append(_genStateMachine, " ");
- _builder.newLineIfNotEmpty();
+ _builder.append("public abstract void receiveEvent(InterfaceItemBase ifitem, int evt, Object data);");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("public abstract void executeInitTransition();");
+ _builder.newLine();
} else {
- boolean _hasStateMachine = xpac.hasStateMachine();
- boolean _not_4 = (!_hasStateMachine);
- if (_not_4) {
- _builder.append("\t");
- _builder.append("//--------------------- no state machine");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("public void receiveEvent(InterfaceItemBase ifitem, int evt, Object data) {");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("\t");
- _builder.append("handleSystemEvent(ifitem, evt, data);");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("}");
- _builder.newLine();
- _builder.append("\t");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("public void executeInitTransition() {}");
- _builder.newLine();
+ {
+ boolean _hasNonEmptyStateMachine = RoomHelpers.hasNonEmptyStateMachine(ac);
+ if (_hasNonEmptyStateMachine) {
+ _builder.append("\t");
+ CharSequence _genStateMachine = this._stateMachineGen.genStateMachine(xpac);
+ _builder.append(_genStateMachine, " ");
+ _builder.newLineIfNotEmpty();
+ } else {
+ boolean _hasStateMachine = xpac.hasStateMachine();
+ boolean _not_4 = (!_hasStateMachine);
+ if (_not_4) {
+ _builder.append("\t");
+ _builder.append("//--------------------- no state machine");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("public void receiveEvent(InterfaceItemBase ifitem, int evt, Object data) {");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("\t");
+ _builder.append("handleSystemEvent(ifitem, evt, data);");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("}");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("public void executeInitTransition() {}");
+ _builder.newLine();
+ }
+ }
}
}
}

Back to the top