From 0bfd8f296d662cc3d3561b4f2f6246462081aa3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Spo=CC=88nemann?= Date: Tue, 12 Jul 2016 16:00:23 +0200 Subject: [PATCH 1/2] [generator] Added initialization of encoding for the Xtext grammar language --- .../xtext/generator/XtextGenerator.xtend | 33 ++++++++++++- .../xtext/xtext/generator/XtextGenerator.java | 46 +++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) 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 3592e369c..69416024e 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,6 +17,7 @@ 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 @@ -27,15 +28,17 @@ import org.eclipse.xtend.lib.annotations.Accessors import org.eclipse.xtext.GeneratedMetamodel import org.eclipse.xtext.Grammar import org.eclipse.xtext.XtextStandaloneSetup +import org.eclipse.xtext.parser.IEncodingProvider +import org.eclipse.xtext.resource.IResourceServiceProvider import org.eclipse.xtext.util.MergeableManifest import org.eclipse.xtext.util.Tuples import org.eclipse.xtext.util.internal.Log 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.TextFileAccess import org.eclipse.xtext.xtext.generator.model.project.BundleProjectConfig import org.eclipse.xtext.xtext.generator.model.project.IXtextProjectConfig -import org.eclipse.xtext.xtext.generator.model.TextFileAccess /** * The Xtext language infrastructure generator. Can be configured with {@link IXtextGeneratorFragment} @@ -66,6 +69,9 @@ class XtextGenerator extends AbstractWorkflowComponent2 { @Inject XtextGeneratorNaming naming + @Accessors(PROTECTED_GETTER) + val Map defaultEncodings = newHashMap + new() { new XtextStandaloneSetup().createInjectorAndDoEMFRegistration() } @@ -100,6 +106,7 @@ class XtextGenerator extends AbstractWorkflowComponent2 { if (injector === null) { LOG.info('Initializing Xtext generator') new StandaloneSetup().addRegisterGeneratedEPackage('org.eclipse.xtext.common.types.TypesPackage') + initializeEncoding('xtext') injector = createInjector injector.injectMembers(this) injector.getInstance(CodeConfig) => [initialize(injector)] @@ -113,6 +120,28 @@ class XtextGenerator extends AbstractWorkflowComponent2 { } } + protected def initializeEncoding(String langExtension) { + 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 encodingProvider = serviceProvider.get(IEncodingProvider) + if (encodingProvider instanceof IEncodingProvider.Runtime) + encodingProvider.defaultEncoding = defaultEncodings.get(langExtension) + } + } + protected def Injector createInjector() { Guice.createInjector(configuration) } @@ -143,6 +172,8 @@ 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 f045a2dd0..b7b3ce7bd 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 @@ -20,6 +20,7 @@ import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.ListIterator; +import java.util.Map; import java.util.Set; import java.util.function.Consumer; import org.apache.log4j.Logger; @@ -31,12 +32,15 @@ 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; import org.eclipse.xtext.GeneratedMetamodel; import org.eclipse.xtext.Grammar; import org.eclipse.xtext.XtextStandaloneSetup; +import org.eclipse.xtext.parser.IEncodingProvider; +import org.eclipse.xtext.resource.IResourceServiceProvider; import org.eclipse.xtext.util.MergeableManifest; import org.eclipse.xtext.util.Triple; import org.eclipse.xtext.util.Tuples; @@ -106,6 +110,9 @@ 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(); @@ -159,6 +166,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"); Injector _createInjector = this.createInjector(); this.injector = _createInjector; this.injector.injectMembers(this); @@ -179,6 +187,37 @@ public class XtextGenerator extends AbstractWorkflowComponent2 { } } + protected void initializeEncoding(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)) { + 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); + } + } + } + + 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 IEncodingProvider encodingProvider = serviceProvider.get(IEncodingProvider.class); + if ((encodingProvider instanceof IEncodingProvider.Runtime)) { + String _get_1 = this.defaultEncodings.get(langExtension); + ((IEncodingProvider.Runtime)encodingProvider).setDefaultEncoding(_get_1); + } + } + } + protected Injector createInjector() { return Guice.createInjector(this.configuration); } @@ -224,6 +263,8 @@ public class XtextGenerator extends AbstractWorkflowComponent2 { } else { throw Exceptions.sneakyThrow(_t_1); } + } finally { + this.restoreEncoding("xtext"); } } @@ -546,4 +587,9 @@ public class XtextGenerator extends AbstractWorkflowComponent2 { public void setStandaloneSetup(final XtextGeneratorStandaloneSetup standaloneSetup) { this.standaloneSetup = standaloneSetup; } + + @Pure + protected Map getDefaultEncodings() { + return this.defaultEncodings; + } } From 521c0ca7a862496e0eb3a4eaaa6450c0a3f0f9ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Spo=CC=88nemann?= Date: Wed, 13 Jul 2016 08:26:56 +0200 Subject: [PATCH 2/2] [generator] Added property grammarEncoding, removed restoreEncoding() method --- .../xtext/generator/XtextGenerator.xtend | 32 ++++-------- .../xtext/xtext/generator/XtextGenerator.java | 52 ++++++++----------- 2 files changed, 31 insertions(+), 53 deletions(-) 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; } }