[generator] AbstractGenerator binding can be overridden
Change-Id: Iab7427a5b598d49b60265761d7a48e1a336484c4
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/Main.java b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/Main.java
index 1a023e5..00a4344 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/Main.java
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/Main.java
@@ -79,6 +79,13 @@
if (isTerminateOnError() && ret!=GENERATOR_OK)
System.exit(ret);
}
+
+ /**
+ * @return the unique {@link GlobalSettings}
+ */
+ public static GlobalGeneratorSettings getSettings() {
+ return (GlobalGeneratorSettings) getInstance().getGeneratorSettings();
+ }
@Inject
private MainGen mainGenerator;
@@ -95,11 +102,13 @@
@Inject
protected IDataConfiguration dataConfig;
+ private Root genModelResult = null;
+
/**
- * @return the unique {@link GlobalSettings}
+ * The resulting genmodel of {@linkplain #Main.runGenerator} if available.
*/
- public static GlobalGeneratorSettings getSettings() {
- return (GlobalGeneratorSettings) getInstance().getGeneratorSettings();
+ public Root getGenModel() {
+ return genModelResult;
}
/**
@@ -146,7 +155,7 @@
return GENERATOR_ERROR;
}
- Root genModel = createGeneratorModel(getSettings().isGenerateAsLibrary(), getSettings().getGeneratorModelPath());
+ Root genModel = createGeneratorModel(getSettings().isGenerateAsLibrary(), getSettings().getGeneratorModelPath());
if (diagnostician.isFailed() || genModel==null) {
logger.logInfo("errors during build of generator model");
logger.logError("-- terminating", null);
@@ -187,6 +196,9 @@
logger.logError("-- terminating", null);
return GENERATOR_ERROR;
}
+
+ genModelResult = genModel;
+
logger.logInfo("-- finished code generation");
}
finally {
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorModule.java b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorModule.java
index 8bee757..3eaa133 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorModule.java
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorModule.java
@@ -34,10 +34,14 @@
public void configure(Binder binder) {
super.configure(binder);
- binder.bind(AbstractGenerator.class).to(Main.class);
binder.bind(GenericProtocolClassGenerator.class).to(ProtocolClassGen.class);
binder.bind(GenericActorClassGenerator.class).to(ActorClassGen.class);
}
+
+ @Override
+ public Class<? extends AbstractGenerator> bindAbstractGenerator() {
+ return Main.class;
+ }
@Override
public Class<? extends ILanguageExtension> bindILanguageExtension() {
diff --git a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/setup/GeneratorModule.java b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/setup/GeneratorModule.java
index 14fea06..a2eba36 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/setup/GeneratorModule.java
+++ b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/setup/GeneratorModule.java
@@ -37,14 +37,19 @@
public void configure(Binder binder) {
super.configure(binder);
- binder.bind(AbstractGenerator.class).to(Main.class);
binder.bind(ProcedureHelpers.class).to(CppProcedureHelpers.class);
binder.bind(GenericProtocolClassGenerator.class).to(ProtocolClassGen.class);
binder.bind(GenericActorClassGenerator.class).to(ActorClassGen.class);
binder.bind(ImportUriResolver.class).to(ModelLocatorUriResolver.class);
}
-
+
+ @Override
+ public Class<? extends AbstractGenerator> bindAbstractGenerator() {
+ return Main.class;
+ }
+
+ @Override
public Class<? extends ILanguageExtension> bindILanguageExtension() {
return CppExtensions.class;
}
diff --git a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/GeneratorModule.java b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/GeneratorModule.java
index e4becc5..4d0bcfd 100644
--- a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/GeneratorModule.java
+++ b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/GeneratorModule.java
@@ -29,10 +29,13 @@
public void configure(Binder binder) {
super.configure(binder);
- binder.bind(AbstractGenerator.class).to(Main.class);
-
binder.bind(GlobalGeneratorSettings.class).to(GlobalSettings.class);
}
+
+ @Override
+ public Class<? extends AbstractGenerator> bindAbstractGenerator() {
+ return Main.class;
+ }
@Override
public Class<? extends ILanguageExtension> bindILanguageExtension() {
diff --git a/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/base/IncrementalGenerationFileIo.java b/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/base/IncrementalGenerationFileIo.java
index 8c227ac..c291ab6 100644
--- a/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/base/IncrementalGenerationFileIo.java
+++ b/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/base/IncrementalGenerationFileIo.java
@@ -56,6 +56,7 @@
* then the file stored in the {@code infopath} is copied to {@code path} while preserving the file data.
* In the other case the key is stored and the file is stored to {@code infopath} and {@code path}.
*/
+ @Override
public void generateFile(String desc, String path, String infopath, String file, CharSequence contents) {
long oldCRC = 0;
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/setup/GeneratorModule.java b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/setup/GeneratorModule.java
index 9dcad33..522c31e 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/setup/GeneratorModule.java
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/setup/GeneratorModule.java
@@ -37,14 +37,17 @@
public void configure(Binder binder) {
super.configure(binder);
- binder.bind(AbstractGenerator.class).to(Main.class);
binder.bind(GenericProtocolClassGenerator.class).to(ProtocolClassGen.class);
binder.bind(GenericActorClassGenerator.class).to(ActorClassGen.class);
binder.bind(ImportUriResolver.class).to(ModelLocatorUriResolver.class);
binder.bind(GlobalGeneratorSettings.class).to(GlobalSettings.class);
-
+ }
+
+ @Override
+ public Class<? extends AbstractGenerator> bindAbstractGenerator() {
+ return Main.class;
}
@Override
diff --git a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGeneratorBaseModule.java b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGeneratorBaseModule.java
index 95e9f10..c2d502a 100644
--- a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGeneratorBaseModule.java
+++ b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGeneratorBaseModule.java
@@ -70,6 +70,8 @@
binder.bind(IMessageIdGenerator.class).to(GenericProtocolClassGenerator.class);
binder.bind(IIfItemIdGenerator.class).to(GenericActorClassGenerator.class);
+ if(bindAbstractGenerator() != null)
+ binder.bind(AbstractGenerator.class).to(bindAbstractGenerator());
binder.bind(IDetailCodeTranslator.class).to(AbstractGenerator.class);
binder.bind(ILanguageExtensionBase.class).to(ILanguageExtension.class);
@@ -84,6 +86,12 @@
binder.bind(EValidator.Registry.class).toInstance(EValidator.Registry.INSTANCE);
binder.bind(org.eclipse.emf.ecore.util.Diagnostician.class).to(GenerationEMFDiagnostician.class).asEagerSingleton();
}
+
+ /**
+ * Abstract method that retrieves a class to which {@link AbstractGenerator} is bound
+ * @return a Class extending {@link AbstractGenerator}
+ */
+ public abstract Class<? extends AbstractGenerator> bindAbstractGenerator();
/**
* Abstract method that retrieves a class to which {@link ILanguageExtension} is bound