diff options
author | Jan Belle | 2018-08-29 09:41:30 +0000 |
---|---|---|
committer | Jan Belle | 2018-08-31 09:11:08 +0000 |
commit | 99a2c70b13dc3713b7e63c1e1b15ce1e46085815 (patch) | |
tree | 3d775f801d558855c85880dc4f7408986524016e /plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator | |
parent | 0c4faa4761c9085523c8f51dac59106eb2fbda48 (diff) | |
download | org.eclipse.etrice-99a2c70b13dc3713b7e63c1e1b15ce1e46085815.tar.gz org.eclipse.etrice-99a2c70b13dc3713b7e63c1e1b15ce1e46085815.tar.xz org.eclipse.etrice-99a2c70b13dc3713b7e63c1e1b15ce1e46085815.zip |
[generator] Refactor generators to implement common generator interface
* migrated to new generator options implementation
Change-Id: I086b384d502fcd1576256a2afaf08df2538b3670
Diffstat (limited to 'plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator')
11 files changed, 126 insertions, 129 deletions
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 00a434446..37404735f 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 @@ -12,17 +12,19 @@ package org.eclipse.etrice.generator.c; -import org.eclipse.emf.common.EMFPlugin; -import org.eclipse.etrice.core.etmap.ETMapStandaloneSetup; +import java.util.List; + +import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.etrice.core.etmap.util.ETMapUtil; -import org.eclipse.etrice.core.etphys.ETPhysStandaloneSetup; import org.eclipse.etrice.core.genmodel.etricegen.Root; import org.eclipse.etrice.generator.base.AbstractGenerator; -import org.eclipse.etrice.generator.base.GlobalGeneratorSettings; import org.eclipse.etrice.generator.base.IDataConfiguration; +import org.eclipse.etrice.generator.base.args.Arguments; +import org.eclipse.etrice.generator.base.logging.Loglevel; import org.eclipse.etrice.generator.c.gen.MainGen; import org.eclipse.etrice.generator.c.gen.Validator; import org.eclipse.etrice.generator.c.setup.GeneratorModule; +import org.eclipse.etrice.generator.c.setup.GeneratorOptions; import com.google.inject.Inject; @@ -65,28 +67,15 @@ import com.google.inject.Inject; */ public class Main extends AbstractGenerator { - /** - * print usage message to output/console - */ - protected void printUsage() { - output.println(this.getClass().getName()+getCommonOptions() - +" <list of model file paths>"); - output.println(getCommonOptionDescriptions()); + public static int run(String[] args) { + return createAndRunGenerator(new GeneratorModule(), args); } - + public static void main(String[] args) { - int ret = createAndRunGenerator(new GeneratorModule(), args); - if (isTerminateOnError() && ret!=GENERATOR_OK) - System.exit(ret); + int ret = run(args); + System.exit(ret); } - /** - * @return the unique {@link GlobalSettings} - */ - public static GlobalGeneratorSettings getSettings() { - return (GlobalGeneratorSettings) getInstance().getGeneratorSettings(); - } - @Inject private MainGen mainGenerator; @@ -110,101 +99,54 @@ public class Main extends AbstractGenerator { public Root getGenModel() { return genModelResult; } - - /** - * setup the eTrice mapping model plug-in - */ - protected void setupMappingModel() { - if (!EMFPlugin.IS_ECLIPSE_RUNNING) { - ETMapStandaloneSetup.doSetup(); - } - } - - /** - * setup the eTrice mapping model plug-in - */ - protected void setupPhysicalModel() { - if (!EMFPlugin.IS_ECLIPSE_RUNNING) - ETPhysStandaloneSetup.doSetup(); - } - protected int runGenerator() { - setupRoomModel(); - dataConfig.doSetup(); - setupMappingModel(); - setupPhysicalModel(); + protected int runGenerator(List<Resource> resources, Arguments arguments) { + + if (!dataConfig.setResources(getResourceSet(), logger)) { + logger.logError("configuration errors"); + return GENERATOR_ERROR; + } + + Root genModel = createGeneratorModel(resources, arguments); + if (diagnostician.isFailed() || genModel==null) { + logger.logError("errors during build of generator model"); + return GENERATOR_ERROR; + } + + if (!validator.validate(genModel)) { + logger.logError("validation failed during build of generator model"); + return GENERATOR_ERROR; + } - try { - activateModelLocator(); - - if (!loadModels(getSettings().getInputModelURIs())) { - logger.logInfo("loading of models failed"); - logger.logError("-- terminating", null); - return GENERATOR_ERROR; - } - - if (!validateModels()) { - logger.logInfo("validation failed"); - logger.logError("-- terminating", null); - return GENERATOR_ERROR; - } - - if (!dataConfig.setResources(getResourceSet(), logger)) { - logger.logInfo("configuration errors"); - logger.logError("-- terminating", null); - return GENERATOR_ERROR; - } - - Root genModel = createGeneratorModel(getSettings().isGenerateAsLibrary(), getSettings().getGeneratorModelPath()); - if (diagnostician.isFailed() || genModel==null) { - logger.logInfo("errors during build of generator model"); - logger.logError("-- terminating", null); - return GENERATOR_ERROR; - } - - if (!validator.validate(genModel)) { - logger.logInfo("validation failed during build of generator model"); - logger.logError("-- terminating", null); - return GENERATOR_ERROR; - } - - ETMapUtil.processModels(genModel, getResourceSet(), diagnostician); - if (getSettings().isDebugMode()) { - logger.logInfo("-- begin dump of mappings"); - logger.logInfo(ETMapUtil.dumpMappings()); - logger.logInfo("-- end dump of mappings"); - } - if (diagnostician.isFailed() || genModel==null) { - logger.logInfo("errors in mapping"); - logger.logError("-- terminating", null); - return GENERATOR_ERROR; - } - - logger.logInfo("-- starting code generation"); - mainGenerator.doGenerate(genModel.eResource()); - - if (getSettings().isGenerateDocumentation()) { - mainDocGenerator.doGenerate(genModel.eResource()); - } - - if(getSettings().isGenerateDataInstrumentation()){ - gnuPlotGenerator.doGenerate(genModel); - } - - if (diagnostician.isFailed()) { - logger.logInfo("errors during code generation"); - logger.logError("-- terminating", null); - return GENERATOR_ERROR; - } - - genModelResult = genModel; - - logger.logInfo("-- finished code generation"); + ETMapUtil.processModels(genModel, getResourceSet(), diagnostician); + if (Loglevel.DEBUG.compareTo(logger.getLoglevel()) >= 0) { + logger.logDebug("-- begin dump of mappings"); + logger.logDebug(ETMapUtil.dumpMappings()); + logger.logDebug("-- end dump of mappings"); } - finally { - deactivateModelLocator(); + if (diagnostician.isFailed() || genModel==null) { + logger.logError("errors in mapping"); + return GENERATOR_ERROR; } + logger.logInfo("-- starting code generation"); + mainGenerator.doGenerate(genModel.eResource()); + + if (arguments.get(GeneratorOptions.DOCUMENTATION)) { + mainDocGenerator.doGenerate(genModel.eResource()); + } + + if(arguments.get(GeneratorOptions.DATA_INSTR)){ + gnuPlotGenerator.doGenerate(genModel); + } + + if (diagnostician.isFailed()) { + logger.logError("errors during code generation"); + return GENERATOR_ERROR; + } + + genModelResult = genModel; + return GENERATOR_OK; } } diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend index 79a399520..499bcffe1 100644 --- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend +++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend @@ -19,17 +19,18 @@ import org.eclipse.etrice.core.fsm.fSM.ComponentCommunicationType import org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass import org.eclipse.etrice.core.genmodel.etricegen.Root import org.eclipse.etrice.core.genmodel.fsm.FsmGenExtensions -import org.eclipse.etrice.core.genmodel.fsm.ILogger import org.eclipse.etrice.core.room.CommunicationType import org.eclipse.etrice.core.room.Operation import org.eclipse.etrice.core.room.ProtocolClass import org.eclipse.etrice.core.room.RoomModel import org.eclipse.etrice.generator.c.Main -import org.eclipse.etrice.generator.fsm.base.IGeneratorFileIo import org.eclipse.etrice.generator.generic.GenericActorClassGenerator import org.eclipse.etrice.generator.generic.ILanguageExtension import org.eclipse.etrice.generator.generic.ProcedureHelpers import org.eclipse.etrice.generator.generic.RoomExtensions +import org.eclipse.etrice.generator.base.io.IGeneratorFileIO +import org.eclipse.etrice.generator.c.setup.GeneratorOptionsHelper +import org.eclipse.etrice.generator.base.logging.ILogger @Singleton class ActorClassGen extends GenericActorClassGenerator { @@ -38,9 +39,10 @@ class ActorClassGen extends GenericActorClassGenerator { @Inject protected extension CExtensions @Inject protected extension ProcedureHelpers @Inject protected extension StateMachineGen + @Inject protected extension GeneratorOptionsHelper @Inject protected ILanguageExtension langExt - @Inject protected IGeneratorFileIo fileIO + @Inject protected IGeneratorFileIO fileIO @Inject protected ILogger logger def doGenerate(Root root) { diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/DataClassGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/DataClassGen.xtend index 7024481e3..ef31db721 100644 --- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/DataClassGen.xtend +++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/DataClassGen.xtend @@ -16,19 +16,19 @@ package org.eclipse.etrice.generator.c.gen import com.google.inject.Inject import com.google.inject.Singleton import org.eclipse.etrice.core.genmodel.etricegen.Root -import org.eclipse.etrice.core.genmodel.fsm.ILogger import org.eclipse.etrice.core.room.DataClass import org.eclipse.etrice.core.room.Operation import org.eclipse.etrice.core.room.RoomModel import org.eclipse.etrice.core.room.util.RoomHelpers -import org.eclipse.etrice.generator.fsm.base.IGeneratorFileIo +import org.eclipse.etrice.generator.base.io.IGeneratorFileIO import org.eclipse.etrice.generator.generic.ProcedureHelpers import org.eclipse.etrice.generator.generic.RoomExtensions +import org.eclipse.etrice.generator.base.logging.ILogger @Singleton class DataClassGen { - @Inject IGeneratorFileIo fileIO + @Inject IGeneratorFileIO fileIO @Inject extension RoomHelpers @Inject extension CExtensions @Inject extension RoomExtensions diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/EnumerationTypeGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/EnumerationTypeGen.xtend index afdd44e88..5d350b496 100644 --- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/EnumerationTypeGen.xtend +++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/EnumerationTypeGen.xtend @@ -12,11 +12,11 @@ package org.eclipse.etrice.generator.c.gen -import org.eclipse.etrice.generator.fsm.base.IGeneratorFileIo import com.google.inject.Inject import org.eclipse.etrice.generator.generic.RoomExtensions import org.eclipse.etrice.core.genmodel.etricegen.Root import org.eclipse.etrice.core.room.EnumerationType +import org.eclipse.etrice.generator.base.io.IGeneratorFileIO import org.eclipse.etrice.generator.generic.TypeHelpers /** @@ -25,7 +25,7 @@ import org.eclipse.etrice.generator.generic.TypeHelpers */ class EnumerationTypeGen { - @Inject IGeneratorFileIo fileIO + @Inject IGeneratorFileIO fileIO @Inject extension CExtensions @Inject extension RoomExtensions @Inject extension TypeHelpers diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/NodeGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/NodeGen.xtend index a48c066f8..deb4f2b5c 100644 --- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/NodeGen.xtend +++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/NodeGen.xtend @@ -30,8 +30,6 @@ import org.eclipse.etrice.core.genmodel.etricegen.InterfaceItemInstance import org.eclipse.etrice.core.genmodel.etricegen.PortInstance import org.eclipse.etrice.core.genmodel.etricegen.Root import org.eclipse.etrice.core.genmodel.etricegen.SubSystemInstance -import org.eclipse.etrice.core.genmodel.fsm.IDiagnostician -import org.eclipse.etrice.core.genmodel.fsm.ILogger import org.eclipse.etrice.core.room.CommunicationType import org.eclipse.etrice.core.room.EnumerationType import org.eclipse.etrice.core.room.Port @@ -40,12 +38,14 @@ import org.eclipse.etrice.core.room.ProtocolClass import org.eclipse.etrice.core.room.SAP import org.eclipse.etrice.core.room.SPP import org.eclipse.etrice.core.room.util.RoomHelpers +import org.eclipse.etrice.generator.base.io.IGeneratorFileIO +import org.eclipse.etrice.generator.base.logging.ILogger import org.eclipse.etrice.generator.c.Main -import org.eclipse.etrice.generator.fsm.base.IGeneratorFileIo import org.eclipse.etrice.generator.fsm.base.IntelligentSeparator import org.eclipse.etrice.generator.generic.ProcedureHelpers import org.eclipse.etrice.generator.generic.RoomExtensions import org.eclipse.etrice.generator.generic.TypeHelpers +import org.eclipse.etrice.generator.c.setup.GeneratorOptionsHelper @Singleton class NodeGen { @@ -55,10 +55,10 @@ class NodeGen { @Inject extension RoomExtensions @Inject extension TypeHelpers @Inject extension ProcedureHelpers helpers + @Inject protected extension GeneratorOptionsHelper - @Inject IGeneratorFileIo fileIO + @Inject IGeneratorFileIO fileIO @Inject Initialization attrInitGenAddon - @Inject IDiagnostician diagnostician @Inject ILogger logger; def doGenerate(Root root) { diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/NodeRunnerGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/NodeRunnerGen.xtend index e54711c4d..98490915d 100644 --- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/NodeRunnerGen.xtend +++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/NodeRunnerGen.xtend @@ -22,6 +22,7 @@ import org.eclipse.etrice.generator.generic.RoomExtensions import org.eclipse.etrice.core.etmap.util.ETMapUtil import org.eclipse.etrice.core.common.base.util.BaseHelpers import org.eclipse.etrice.generator.c.Main +import org.eclipse.etrice.generator.c.setup.GeneratorOptionsHelper @Singleton class NodeRunnerGen { @@ -30,6 +31,7 @@ class NodeRunnerGen { @Inject extension JavaIoFileSystemAccess fileAccess @Inject extension CExtensions @Inject extension RoomExtensions + @Inject protected extension GeneratorOptionsHelper def doGenerate(Root root) { var first = true diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend index 143a1b249..a233ec690 100644 --- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend +++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend @@ -16,27 +16,29 @@ package org.eclipse.etrice.generator.c.gen import com.google.inject.Inject import com.google.inject.Singleton import org.eclipse.etrice.core.genmodel.etricegen.Root -import org.eclipse.etrice.core.genmodel.fsm.ILogger import org.eclipse.etrice.core.room.CommunicationType import org.eclipse.etrice.core.room.Operation import org.eclipse.etrice.core.room.ProtocolClass import org.eclipse.etrice.core.room.RoomModel +import org.eclipse.etrice.generator.base.io.IGeneratorFileIO +import org.eclipse.etrice.generator.base.logging.ILogger import org.eclipse.etrice.generator.base.AbstractGenerator import org.eclipse.etrice.generator.c.Main -import org.eclipse.etrice.generator.fsm.base.IGeneratorFileIo import org.eclipse.etrice.generator.generic.GenericProtocolClassGenerator import org.eclipse.etrice.generator.generic.ProcedureHelpers import org.eclipse.etrice.generator.generic.RoomExtensions import org.eclipse.etrice.generator.generic.TypeHelpers +import org.eclipse.etrice.generator.c.setup.GeneratorOptionsHelper @Singleton class ProtocolClassGen extends GenericProtocolClassGenerator { - @Inject IGeneratorFileIo fileIO + @Inject IGeneratorFileIO fileIO @Inject extension CExtensions @Inject extension RoomExtensions @Inject extension ProcedureHelpers @Inject extension TypeHelpers + @Inject protected extension GeneratorOptionsHelper @Inject ILogger logger def doGenerate(Root root) { diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/StateMachineGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/StateMachineGen.xtend index abdeb3fac..d338dbc5f 100644 --- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/StateMachineGen.xtend +++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/StateMachineGen.xtend @@ -22,11 +22,13 @@ import org.eclipse.etrice.generator.generic.RoomExtensions import static extension org.eclipse.etrice.core.genmodel.fsm.FsmGenExtensions.* import org.eclipse.etrice.core.genmodel.fsm.fsmgen.GraphContainer import org.eclipse.etrice.core.fsm.fSM.State +import org.eclipse.etrice.generator.c.setup.GeneratorOptionsHelper @Singleton class StateMachineGen extends GenericStateMachineGenerator { @Inject extension RoomExtensions + @Inject protected extension GeneratorOptionsHelper def genHeaderConstants(ExpandedActorClass xpac) { val ac = xpac.actorClass 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 3eaa133a8..9794e2dc9 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 @@ -14,6 +14,7 @@ package org.eclipse.etrice.generator.c.setup; import org.eclipse.etrice.generator.base.AbstractGenerator; import org.eclipse.etrice.generator.base.AbstractGeneratorBaseModule; +import org.eclipse.etrice.generator.base.AbstractGeneratorOptions; import org.eclipse.etrice.generator.base.IDataConfiguration; import org.eclipse.etrice.generator.base.ITranslationProvider; import org.eclipse.etrice.generator.c.Main; @@ -30,12 +31,14 @@ import com.google.inject.Binder; public class GeneratorModule extends AbstractGeneratorBaseModule { -// @Override + @Override public void configure(Binder binder) { super.configure(binder); binder.bind(GenericProtocolClassGenerator.class).to(ProtocolClassGen.class); binder.bind(GenericActorClassGenerator.class).to(ActorClassGen.class); + + binder.bind(AbstractGeneratorOptions.class).to(GeneratorOptions.class); } @Override diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorOptions.java b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorOptions.java new file mode 100644 index 000000000..14f436d44 --- /dev/null +++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorOptions.java @@ -0,0 +1,22 @@ +/******************************************************************************* +* Copyright (c) 2018 protos software gmbh (http://www.protos.de). +* All rights reserved. +* +* This program and the accompanying materials are made +* available under the terms of the Eclipse Public License 2.0 +* which is available at https://www.eclipse.org/legal/epl-2.0/ +* +* SPDX-License-Identifier: EPL-2.0 +* +* CONTRIBUTORS: +* Jan Belle (initial contribution) +* + *******************************************************************************/ + +package org.eclipse.etrice.generator.c.setup; + +import org.eclipse.etrice.generator.base.AbstractGeneratorOptions; + +public class GeneratorOptions extends AbstractGeneratorOptions { + +} diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorOptionsHelper.java b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorOptionsHelper.java new file mode 100644 index 000000000..36c5d9029 --- /dev/null +++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorOptionsHelper.java @@ -0,0 +1,22 @@ +/******************************************************************************* +* Copyright (c) 2018 protos software gmbh (http://www.protos.de). +* All rights reserved. +* +* This program and the accompanying materials are made +* available under the terms of the Eclipse Public License 2.0 +* which is available at https://www.eclipse.org/legal/epl-2.0/ +* +* SPDX-License-Identifier: EPL-2.0 +* +* CONTRIBUTORS: +* Jan Belle (initial contribution) +* + *******************************************************************************/ + +package org.eclipse.etrice.generator.c.setup; + +import org.eclipse.etrice.generator.base.AbstractGeneratorOptionsHelper; + +public class GeneratorOptionsHelper extends AbstractGeneratorOptionsHelper { + +} |