diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGenerator.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGenerator.xtend index 69416024e..acb2b2fb8 100644 --- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGenerator.xtend +++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGenerator.xtend @@ -17,7 +17,6 @@ import java.io.IOException import java.io.InputStream import java.util.HashMap import java.util.List -import java.util.Map import org.eclipse.emf.common.util.URI import org.eclipse.emf.mwe.core.WorkflowContext import org.eclipse.emf.mwe.core.issues.Issues @@ -61,6 +60,9 @@ class XtextGenerator extends AbstractWorkflowComponent2 { @Accessors XtextGeneratorStandaloneSetup standaloneSetup = new XtextGeneratorStandaloneSetup + @Accessors + String grammarEncoding + Injector injector @Inject IXtextProjectConfig projectConfig @@ -69,9 +71,6 @@ class XtextGenerator extends AbstractWorkflowComponent2 { @Inject XtextGeneratorNaming naming - @Accessors(PROTECTED_GETTER) - val Map defaultEncodings = newHashMap - new() { new XtextStandaloneSetup().createInjectorAndDoEMFRegistration() } @@ -106,7 +105,7 @@ class XtextGenerator extends AbstractWorkflowComponent2 { if (injector === null) { LOG.info('Initializing Xtext generator') new StandaloneSetup().addRegisterGeneratedEPackage('org.eclipse.xtext.common.types.TypesPackage') - initializeEncoding('xtext') + initializeEncoding injector = createInjector injector.injectMembers(this) injector.getInstance(CodeConfig) => [initialize(injector)] @@ -120,25 +119,14 @@ class XtextGenerator extends AbstractWorkflowComponent2 { } } - protected def initializeEncoding(String langExtension) { + protected def initializeEncoding() { val serviceProviderRegistry = IResourceServiceProvider.Registry.INSTANCE - val serviceProvider = serviceProviderRegistry.extensionToFactoryMap.get(langExtension) as IResourceServiceProvider - if (serviceProvider !== null) { - val encodingProvider = serviceProvider.get(IEncodingProvider) - if (encodingProvider instanceof IEncodingProvider.Runtime) { - defaultEncodings.put(langExtension, encodingProvider.defaultEncoding) - encodingProvider.defaultEncoding = configuration.code.encoding - } - } - } - - protected def restoreEncoding(String langExtension) { - val serviceProviderRegistry = IResourceServiceProvider.Registry.INSTANCE - val serviceProvider = serviceProviderRegistry.extensionToFactoryMap.get(langExtension) as IResourceServiceProvider - if (serviceProvider !== null && defaultEncodings.containsKey(langExtension)) { + val serviceProvider = serviceProviderRegistry.extensionToFactoryMap.get('xtext') as IResourceServiceProvider + val encoding = grammarEncoding ?: configuration.code.encoding + if (serviceProvider !== null && encoding !== null) { val encodingProvider = serviceProvider.get(IEncodingProvider) if (encodingProvider instanceof IEncodingProvider.Runtime) - encodingProvider.defaultEncoding = defaultEncodings.get(langExtension) + encodingProvider.defaultEncoding = encoding } } @@ -172,8 +160,6 @@ class XtextGenerator extends AbstractWorkflowComponent2 { generateServices } catch (Exception e) { handleException(e, issues) - } finally { - restoreEncoding('xtext') } } diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/XtextGenerator.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/XtextGenerator.java index b7b3ce7bd..1a37b373f 100644 --- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/XtextGenerator.java +++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/XtextGenerator.java @@ -32,7 +32,6 @@ import org.eclipse.emf.mwe.core.issues.Issues; import org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent2; import org.eclipse.emf.mwe.core.monitor.ProgressMonitor; import org.eclipse.emf.mwe.utils.StandaloneSetup; -import org.eclipse.xtend.lib.annotations.AccessorType; import org.eclipse.xtend.lib.annotations.Accessors; import org.eclipse.xtend2.lib.StringConcatenationClient; import org.eclipse.xtext.AbstractMetamodelDeclaration; @@ -99,6 +98,9 @@ public class XtextGenerator extends AbstractWorkflowComponent2 { @Accessors private XtextGeneratorStandaloneSetup standaloneSetup = new XtextGeneratorStandaloneSetup(); + @Accessors + private String grammarEncoding; + private Injector injector; @Inject @@ -110,9 +112,6 @@ public class XtextGenerator extends AbstractWorkflowComponent2 { @Inject private XtextGeneratorNaming naming; - @Accessors(AccessorType.PROTECTED_GETTER) - private final Map defaultEncodings = CollectionLiterals.newHashMap(); - public XtextGenerator() { XtextStandaloneSetup _xtextStandaloneSetup = new XtextStandaloneSetup(); _xtextStandaloneSetup.createInjectorAndDoEMFRegistration(); @@ -166,7 +165,7 @@ public class XtextGenerator extends AbstractWorkflowComponent2 { XtextGenerator.LOG.info("Initializing Xtext generator"); StandaloneSetup _standaloneSetup = new StandaloneSetup(); _standaloneSetup.addRegisterGeneratedEPackage("org.eclipse.xtext.common.types.TypesPackage"); - this.initializeEncoding("xtext"); + this.initializeEncoding(); Injector _createInjector = this.createInjector(); this.injector = _createInjector; this.injector.injectMembers(this); @@ -187,33 +186,24 @@ public class XtextGenerator extends AbstractWorkflowComponent2 { } } - protected void initializeEncoding(final String langExtension) { + protected void initializeEncoding() { final IResourceServiceProvider.Registry serviceProviderRegistry = IResourceServiceProvider.Registry.INSTANCE; Map _extensionToFactoryMap = serviceProviderRegistry.getExtensionToFactoryMap(); - Object _get = _extensionToFactoryMap.get(langExtension); + Object _get = _extensionToFactoryMap.get("xtext"); final IResourceServiceProvider serviceProvider = ((IResourceServiceProvider) _get); - if ((serviceProvider != null)) { - final IEncodingProvider encodingProvider = serviceProvider.get(IEncodingProvider.class); - if ((encodingProvider instanceof IEncodingProvider.Runtime)) { - String _defaultEncoding = ((IEncodingProvider.Runtime)encodingProvider).getDefaultEncoding(); - this.defaultEncodings.put(langExtension, _defaultEncoding); - CodeConfig _code = this.configuration.getCode(); - String _encoding = _code.getEncoding(); - ((IEncodingProvider.Runtime)encodingProvider).setDefaultEncoding(_encoding); - } + String _elvis = null; + if (this.grammarEncoding != null) { + _elvis = this.grammarEncoding; + } else { + CodeConfig _code = this.configuration.getCode(); + String _encoding = _code.getEncoding(); + _elvis = _encoding; } - } - - protected void restoreEncoding(final String langExtension) { - final IResourceServiceProvider.Registry serviceProviderRegistry = IResourceServiceProvider.Registry.INSTANCE; - Map _extensionToFactoryMap = serviceProviderRegistry.getExtensionToFactoryMap(); - Object _get = _extensionToFactoryMap.get(langExtension); - final IResourceServiceProvider serviceProvider = ((IResourceServiceProvider) _get); - if (((serviceProvider != null) && this.defaultEncodings.containsKey(langExtension))) { + final String encoding = _elvis; + if (((serviceProvider != null) && (encoding != null))) { final IEncodingProvider encodingProvider = serviceProvider.get(IEncodingProvider.class); if ((encodingProvider instanceof IEncodingProvider.Runtime)) { - String _get_1 = this.defaultEncodings.get(langExtension); - ((IEncodingProvider.Runtime)encodingProvider).setDefaultEncoding(_get_1); + ((IEncodingProvider.Runtime)encodingProvider).setDefaultEncoding(encoding); } } } @@ -263,8 +253,6 @@ public class XtextGenerator extends AbstractWorkflowComponent2 { } else { throw Exceptions.sneakyThrow(_t_1); } - } finally { - this.restoreEncoding("xtext"); } } @@ -589,7 +577,11 @@ public class XtextGenerator extends AbstractWorkflowComponent2 { } @Pure - protected Map getDefaultEncodings() { - return this.defaultEncodings; + public String getGrammarEncoding() { + return this.grammarEncoding; + } + + public void setGrammarEncoding(final String grammarEncoding) { + this.grammarEncoding = grammarEncoding; } }