[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.
This commit is contained in:
Miro Spönemann 2017-01-09 15:17:04 +01:00
parent 94014599c4
commit 43bf2b58f2
6 changed files with 61 additions and 53 deletions

View file

@ -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)
}

View file

@ -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<? extends IXtextGeneratorFragment> getImplicitFragments() {
val fragments = newArrayList
fragments += new ImplicitFragment
fragments
return fragments
}
def void initialize(Grammar grammar) {

View file

@ -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()
}
}

View file

@ -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.<IXtextGeneratorLanguage>bind(IXtextGeneratorLanguage.class).toInstance(this.language);
final Provider<IXtextGeneratorLanguage> _function = () -> {
return this.language;
};
binder.<IXtextGeneratorLanguage>bind(IXtextGeneratorLanguage.class).toProvider(_function);
}
public ScopedBindingBuilder configureGrammar(final Binder binder) {
public void configureGrammar(final Binder binder) {
final Provider<Grammar> _function = () -> {
return this.language.getGrammar();
};
return binder.<Grammar>bind(Grammar.class).toProvider(_function);
binder.<Grammar>bind(Grammar.class).toProvider(_function);
}
public ScopedBindingBuilder configureRuleNames(final Binder binder) {
public void configureRuleNames(final Binder binder) {
final Provider<RuleNames> _function = () -> {
return this.language.getRuleNames();
};
return binder.<RuleNames>bind(RuleNames.class).toProvider(_function);
binder.<RuleNames>bind(RuleNames.class).toProvider(_function);
}
public void configureAdditionalBindings(final Binder binder) {

View file

@ -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<? extends IXtextGeneratorFragment> getImplicitFragments() {
ArrayList<ImplicitFragment> _xblockexpression = null;
{
final ArrayList<ImplicitFragment> fragments = CollectionLiterals.<ImplicitFragment>newArrayList();
ImplicitFragment _implicitFragment = new ImplicitFragment();
fragments.add(_implicitFragment);
_xblockexpression = fragments;
}
return _xblockexpression;
final ArrayList<ImplicitFragment> fragments = CollectionLiterals.<ImplicitFragment>newArrayList();
ImplicitFragment _implicitFragment = new ImplicitFragment();
fragments.add(_implicitFragment);
return fragments;
}
public void initialize(final Grammar grammar) {

View file

@ -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);