From 43bf2b58f264abc0e78bae77065690e0d3a553b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Spo=CC=88nemann?= Date: Mon, 9 Jan 2017 15:17:04 +0100 Subject: [PATCH] [generator] Some fixes: - XtextGeneratorLanguage was injecting its members incorrectly. - LanguageModule must bind the language to a provider to prevent Guice from injecting its members implicitly (masking the previous bug). - EMFGeneratorFragment2.updateBuildProperties() should do nothing when build.properties does not exist. --- .../xtext/generator/LanguageModule.xtend | 10 ++--- .../generator/XtextGeneratorLanguage.xtend | 4 +- .../ecore/EMFGeneratorFragment2.xtend | 30 +++++++------ .../xtext/xtext/generator/LanguageModule.java | 14 ++++--- .../generator/XtextGeneratorLanguage.java | 14 +++---- .../ecore/EMFGeneratorFragment2.java | 42 ++++++++++--------- 6 files changed, 61 insertions(+), 53 deletions(-) diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/LanguageModule.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/LanguageModule.xtend index 6421022c6..74905fcfa 100644 --- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/LanguageModule.xtend +++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/LanguageModule.xtend @@ -18,19 +18,19 @@ package class LanguageModule extends AbstractGenericModule { val XtextGeneratorLanguage language - def configureLanguage(Binder binder) { - binder.bind(IXtextGeneratorLanguage).toInstance(language) + def void configureLanguage(Binder binder) { + binder.bind(IXtextGeneratorLanguage).toProvider[language] } - def configureGrammar(Binder binder) { + def void configureGrammar(Binder binder) { binder.bind(Grammar).toProvider[language.grammar] } - def configureRuleNames(Binder binder) { + def void configureRuleNames(Binder binder) { binder.bind(RuleNames).toProvider[language.ruleNames] } - def configureAdditionalBindings(Binder binder) { + def void configureAdditionalBindings(Binder binder) { binder.install(language.guiceModule) } diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGeneratorLanguage.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGeneratorLanguage.xtend index 6f05fc9ef..9b48eb3a6 100644 --- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGeneratorLanguage.xtend +++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGeneratorLanguage.xtend @@ -130,7 +130,7 @@ class XtextGeneratorLanguage extends CompositeGeneratorFragment2 implements IXte override initialize(Injector injector) { fragments.addAll(0, implicitFragments) - injector.injectMembers(XtextGeneratorLanguage) + injector.injectMembers(this) if (resourceSet === null) resourceSet = resourceSetProvider.get() resourceSetInitializer.initialize(resourceSet, referencedResources) @@ -167,7 +167,7 @@ class XtextGeneratorLanguage extends CompositeGeneratorFragment2 implements IXte protected def List getImplicitFragments() { val fragments = newArrayList fragments += new ImplicitFragment - fragments + return fragments } def void initialize(Grammar grammar) { diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/ecore/EMFGeneratorFragment2.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/ecore/EMFGeneratorFragment2.xtend index 4b38baf0a..ba969befd 100644 --- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/ecore/EMFGeneratorFragment2.xtend +++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/ecore/EMFGeneratorFragment2.xtend @@ -704,13 +704,18 @@ class EMFGeneratorFragment2 extends AbstractXtextGeneratorFragment { private def void updateBuildProperties() { if (!updateBuildProperties || modelPluginID !== null || projectConfig.runtime.manifest === null) return; - val rootOutlet = projectConfig.runtime.root - val buildPropertiesPath = rootOutlet.path + '/build.properties' - val modelContainer = projectConfig.runtime.ecoreModelFolder - val buildProperties = new Properties - val reader = new InputStreamReader(new FileInputStream(new File(buildPropertiesPath)), Charset.forName(codeConfig.encoding)) - try { - var existingContent = CharStreams.toString(reader) + val buildPropertiesPath = projectConfig.runtime.root.path + '/build.properties' + val buildPropertiesFile = new File(buildPropertiesPath) + if (buildPropertiesFile.exists) { + val modelContainer = projectConfig.runtime.ecoreModelFolder + val buildProperties = new Properties + val charset = Charset.forName(codeConfig.encoding) + val reader = new InputStreamReader(new FileInputStream(buildPropertiesFile), charset) + var existingContent = try { + CharStreams.toString(reader) + } finally { + reader.close() + } buildProperties.load(new StringInputStream(existingContent, 'ISO-8859-1')) val binIncludes = buildProperties.getProperty('bin.includes') var changed = false @@ -723,12 +728,13 @@ class EMFGeneratorFragment2 extends AbstractXtextGeneratorFragment { changed = true } if (changed) { - val writer = new OutputStreamWriter(new FileOutputStream(new File(buildPropertiesPath)), Charset.forName(codeConfig.encoding)) - writer.write(existingContent) - writer.close() + val writer = new OutputStreamWriter(new FileOutputStream(buildPropertiesFile), charset) + try { + writer.write(existingContent) + } finally { + writer.close() + } } - } finally { - reader.close() } } diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/LanguageModule.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/LanguageModule.java index 06d51e892..dfe6ec2cd 100644 --- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/LanguageModule.java +++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/LanguageModule.java @@ -9,7 +9,6 @@ package org.eclipse.xtext.xtext.generator; import com.google.inject.Binder; import com.google.inject.Provider; -import com.google.inject.binder.ScopedBindingBuilder; import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor; import org.eclipse.xtext.Grammar; import org.eclipse.xtext.service.AbstractGenericModule; @@ -23,21 +22,24 @@ class LanguageModule extends AbstractGenericModule { private final XtextGeneratorLanguage language; public void configureLanguage(final Binder binder) { - binder.bind(IXtextGeneratorLanguage.class).toInstance(this.language); + final Provider _function = () -> { + return this.language; + }; + binder.bind(IXtextGeneratorLanguage.class).toProvider(_function); } - public ScopedBindingBuilder configureGrammar(final Binder binder) { + public void configureGrammar(final Binder binder) { final Provider _function = () -> { return this.language.getGrammar(); }; - return binder.bind(Grammar.class).toProvider(_function); + binder.bind(Grammar.class).toProvider(_function); } - public ScopedBindingBuilder configureRuleNames(final Binder binder) { + public void configureRuleNames(final Binder binder) { final Provider _function = () -> { return this.language.getRuleNames(); }; - return binder.bind(RuleNames.class).toProvider(_function); + binder.bind(RuleNames.class).toProvider(_function); } public void configureAdditionalBindings(final Binder binder) { diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/XtextGeneratorLanguage.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/XtextGeneratorLanguage.java index a9e918462..429d99531 100644 --- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/XtextGeneratorLanguage.java +++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/XtextGeneratorLanguage.java @@ -174,7 +174,7 @@ public class XtextGeneratorLanguage extends CompositeGeneratorFragment2 implemen @Override public void initialize(final Injector injector) { this.getFragments().addAll(0, this.getImplicitFragments()); - injector.injectMembers(XtextGeneratorLanguage.class); + injector.injectMembers(this); if ((this.resourceSet == null)) { this.resourceSet = this.resourceSetProvider.get(); } @@ -248,14 +248,10 @@ public class XtextGeneratorLanguage extends CompositeGeneratorFragment2 implemen } protected List getImplicitFragments() { - ArrayList _xblockexpression = null; - { - final ArrayList fragments = CollectionLiterals.newArrayList(); - ImplicitFragment _implicitFragment = new ImplicitFragment(); - fragments.add(_implicitFragment); - _xblockexpression = fragments; - } - return _xblockexpression; + final ArrayList fragments = CollectionLiterals.newArrayList(); + ImplicitFragment _implicitFragment = new ImplicitFragment(); + fragments.add(_implicitFragment); + return fragments; } public void initialize(final Grammar grammar) { diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/ecore/EMFGeneratorFragment2.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/ecore/EMFGeneratorFragment2.java index e5284710f..f1d627b64 100644 --- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/ecore/EMFGeneratorFragment2.java +++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/ecore/EMFGeneratorFragment2.java @@ -89,7 +89,6 @@ import org.eclipse.xtext.xbase.lib.StringExtensions; import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment; import org.eclipse.xtext.xtext.generator.CodeConfig; import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess; -import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess; import org.eclipse.xtext.xtext.generator.model.ManifestAccess; import org.eclipse.xtext.xtext.generator.model.PluginXmlAccess; import org.eclipse.xtext.xtext.generator.model.TypeReference; @@ -1026,17 +1025,23 @@ public class EMFGeneratorFragment2 extends AbstractXtextGeneratorFragment { if ((((!this.updateBuildProperties) || (this.modelPluginID != null)) || (this.getProjectConfig().getRuntime().getManifest() == null))) { return; } - final IXtextGeneratorFileSystemAccess rootOutlet = this.getProjectConfig().getRuntime().getRoot(); - String _path = rootOutlet.getPath(); + String _path = this.getProjectConfig().getRuntime().getRoot().getPath(); final String buildPropertiesPath = (_path + "/build.properties"); - final String modelContainer = this.getProjectConfig().getRuntime().getEcoreModelFolder(); - final Properties buildProperties = new Properties(); - File _file = new File(buildPropertiesPath); - FileInputStream _fileInputStream = new FileInputStream(_file); - Charset _forName = Charset.forName(this.codeConfig.getEncoding()); - final InputStreamReader reader = new InputStreamReader(_fileInputStream, _forName); - try { - String existingContent = CharStreams.toString(reader); + final File buildPropertiesFile = new File(buildPropertiesPath); + boolean _exists = buildPropertiesFile.exists(); + if (_exists) { + final String modelContainer = this.getProjectConfig().getRuntime().getEcoreModelFolder(); + final Properties buildProperties = new Properties(); + final Charset charset = Charset.forName(this.codeConfig.getEncoding()); + FileInputStream _fileInputStream = new FileInputStream(buildPropertiesFile); + final InputStreamReader reader = new InputStreamReader(_fileInputStream, charset); + String _xtrycatchfinallyexpression = null; + try { + _xtrycatchfinallyexpression = CharStreams.toString(reader); + } finally { + reader.close(); + } + String existingContent = _xtrycatchfinallyexpression; StringInputStream _stringInputStream = new StringInputStream(existingContent, "ISO-8859-1"); buildProperties.load(_stringInputStream); final String binIncludes = buildProperties.getProperty("bin.includes"); @@ -1060,15 +1065,14 @@ public class EMFGeneratorFragment2 extends AbstractXtextGeneratorFragment { } } if (changed) { - File _file_1 = new File(buildPropertiesPath); - FileOutputStream _fileOutputStream = new FileOutputStream(_file_1); - Charset _forName_1 = Charset.forName(this.codeConfig.getEncoding()); - final OutputStreamWriter writer = new OutputStreamWriter(_fileOutputStream, _forName_1); - writer.write(existingContent); - writer.close(); + FileOutputStream _fileOutputStream = new FileOutputStream(buildPropertiesFile); + final OutputStreamWriter writer = new OutputStreamWriter(_fileOutputStream, charset); + try { + writer.write(existingContent); + } finally { + writer.close(); + } } - } finally { - reader.close(); } } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e);