diff options
author | Henrik Rentz-Reichert | 2014-02-24 08:26:07 +0000 |
---|---|---|
committer | Henrik Rentz-Reichert | 2014-02-24 08:26:49 +0000 |
commit | 1f81f9e363e580b505f77ccfb92dd98b000e34b4 (patch) | |
tree | ad1211e7d697af3bb6f18328d3bb9cd879612e59 /plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice | |
parent | 947660dfd751a29e72ace1652364b156a3a9b08e (diff) | |
download | org.eclipse.etrice-1f81f9e363e580b505f77ccfb92dd98b000e34b4.tar.gz org.eclipse.etrice-1f81f9e363e580b505f77ccfb92dd98b000e34b4.tar.xz org.eclipse.etrice-1f81f9e363e580b505f77ccfb92dd98b000e34b4.zip |
Bug 428336: [core.room] import dependency loader incorrect for different path representations of the same model resource
https://bugs.eclipse.org/428336
Implemented an extensible model resolution machanism
Diffstat (limited to 'plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice')
2 files changed, 64 insertions, 85 deletions
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/Main.java b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/Main.java index b6c5980a3..d577eb9f9 100644 --- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/Main.java +++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/Main.java @@ -15,16 +15,12 @@ package org.eclipse.etrice.generator.java; import java.util.Iterator; import org.eclipse.emf.common.EMFPlugin; -import org.eclipse.emf.ecore.EObject; import org.eclipse.etrice.core.etmap.ETMapStandaloneSetup; -import org.eclipse.etrice.core.etmap.eTMap.MappingModel; import org.eclipse.etrice.core.etmap.util.ETMapUtil; import org.eclipse.etrice.core.etphys.ETPhysStandaloneSetup; -import org.eclipse.etrice.core.etphys.eTPhys.PhysicalModel; import org.eclipse.etrice.core.genmodel.etricegen.Root; import org.eclipse.etrice.generator.base.AbstractGenerator; import org.eclipse.etrice.generator.base.IDataConfiguration; -import org.eclipse.etrice.generator.base.IResourceURIAcceptor; import org.eclipse.etrice.generator.java.gen.GlobalSettings; import org.eclipse.etrice.generator.java.gen.Validator; import org.eclipse.etrice.generator.java.setup.GeneratorModule; @@ -131,88 +127,71 @@ public class Main extends AbstractGenerator { setupMappingModel(); setupPhysicalModel(); - 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"); - fileAccess.setOutputPath("src-gen/"); - mainGenerator.doGenerate(genModel.eResource(), fileAccess); - - if (getSettings().isGenerateDocumentation()) { - mainDocGenerator.doGenerate(genModel.eResource(), fileAccess); - } - - if (diagnostician.isFailed()) { - logger.logInfo("errors during code generation"); - logger.logError("-- terminating", null); - return GENERATOR_ERROR; - } - logger.logInfo("-- finished code generation"); - - return GENERATOR_OK; - } - - /* (non-Javadoc) - * @see org.eclipse.etrice.generator.base.AbstractGenerator#addReferencedModels(org.eclipse.emf.ecore.resource.Resource, java.util.List) - */ - @Override - protected void addReferencedModels(EObject root, IResourceURIAcceptor acceptor) { - super.addReferencedModels(root, acceptor); - - if (root instanceof PhysicalModel) { - for (org.eclipse.etrice.core.etphys.eTPhys.Import imp : ((PhysicalModel)root).getImports()) { - String importURI = uriResolver.resolve(imp); - acceptor.addResourceURI(importURI); + try { + activateModelLocator(); + + if (!loadModels(getSettings().getInputModelURIs())) { + logger.logInfo("loading of models failed"); + logger.logError("-- terminating", null); + return GENERATOR_ERROR; } - } - else if (root instanceof MappingModel) { - for (org.eclipse.etrice.core.etmap.eTMap.Import imp : ((MappingModel)root).getImports()) { - String importURI = uriResolver.resolve(imp); - acceptor.addResourceURI(importURI); + + 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"); + fileAccess.setOutputPath("src-gen/"); + mainGenerator.doGenerate(genModel.eResource(), fileAccess); + + if (getSettings().isGenerateDocumentation()) { + mainDocGenerator.doGenerate(genModel.eResource(), fileAccess); + } + + if (diagnostician.isFailed()) { + logger.logInfo("errors during code generation"); + logger.logError("-- terminating", null); + return GENERATOR_ERROR; + } + logger.logInfo("-- finished code generation"); } - else { - dataConfig.addReferencedModels(acceptor, root); + finally { + deactivateModelLocator(); } + + return GENERATOR_OK; } } 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 ecc113388..42547d9ae 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 @@ -12,7 +12,7 @@ package org.eclipse.etrice.generator.java.setup; -import org.eclipse.etrice.core.scoping.NormalizingUriResolver; +import org.eclipse.etrice.core.scoping.ModelLocatorUriResolver; import org.eclipse.etrice.generator.base.AbstractGenerator; import org.eclipse.etrice.generator.base.AbstractGeneratorBaseModule; import org.eclipse.etrice.generator.base.GlobalGeneratorSettings; @@ -42,7 +42,7 @@ public class GeneratorModule extends AbstractGeneratorBaseModule { binder.bind(AbstractGenerator.class).to(Main.class); binder.bind(IGenerator.class).to(MainGen.class); - binder.bind(ImportUriResolver.class).to(NormalizingUriResolver.class); + binder.bind(ImportUriResolver.class).to(ModelLocatorUriResolver.class); binder.bind(GlobalGeneratorSettings.class).to(GlobalSettings.class); } |