Merge branch 'msp/generatorEncoding' into msp/testWorkflows

This commit is contained in:
Miro Spönemann 2016-07-12 16:06:14 +02:00
commit 5f19ad2cae
9 changed files with 85 additions and 8 deletions

View file

@ -7,6 +7,6 @@ Bundle-SymbolicName: org.xtext.example.eclipsePlugin.ui.tests; singleton:=true
Bundle-ActivationPolicy: lazy
Require-Bundle: org.xtext.example.eclipsePlugin.ui,
org.junit;bundle-version="4.7.0",
org.eclipse.xtext.junit4,
org.eclipse.xtext.testing,
org.eclipse.xtext.xbase.junit
Bundle-RequiredExecutionEnvironment: JavaSE-1.8

View file

@ -7,6 +7,6 @@ Bundle-SymbolicName: org.xtext.example.eclipsePluginP2.ui.tests; singleton:=true
Bundle-ActivationPolicy: lazy
Require-Bundle: org.xtext.example.eclipsePluginP2.ui,
org.junit;bundle-version="4.7.0",
org.eclipse.xtext.junit4,
org.eclipse.xtext.testing,
org.eclipse.xtext.xbase.junit
Bundle-RequiredExecutionEnvironment: JavaSE-1.8

View file

@ -7,6 +7,6 @@ Bundle-SymbolicName: org.xtext.example.full.ui.tests; singleton:=true
Bundle-ActivationPolicy: lazy
Require-Bundle: org.xtext.example.full.ui,
org.junit;bundle-version="4.7.0",
org.eclipse.xtext.junit4,
org.eclipse.xtext.testing,
org.eclipse.xtext.xbase.junit
Bundle-RequiredExecutionEnvironment: JavaSE-1.8

View file

@ -7,6 +7,6 @@ Bundle-SymbolicName: org.xtext.example.mavenTycho.ui.tests; singleton:=true
Bundle-ActivationPolicy: lazy
Require-Bundle: org.xtext.example.mavenTycho.ui,
org.junit;bundle-version="4.7.0",
org.eclipse.xtext.junit4,
org.eclipse.xtext.testing,
org.eclipse.xtext.xbase.junit
Bundle-RequiredExecutionEnvironment: JavaSE-1.8

View file

@ -7,6 +7,6 @@ Bundle-SymbolicName: org.xtext.example.mavenTychoP2.ui.tests; singleton:=true
Bundle-ActivationPolicy: lazy
Require-Bundle: org.xtext.example.mavenTychoP2.ui,
org.junit;bundle-version="4.7.0",
org.eclipse.xtext.junit4,
org.eclipse.xtext.testing,
org.eclipse.xtext.xbase.junit
Bundle-RequiredExecutionEnvironment: JavaSE-1.8

View file

@ -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<String, String> 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')
}
}

View file

@ -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<String, String> defaultEncodings = CollectionLiterals.<String, String>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<String, Object> _extensionToFactoryMap = serviceProviderRegistry.getExtensionToFactoryMap();
Object _get = _extensionToFactoryMap.get(langExtension);
final IResourceServiceProvider serviceProvider = ((IResourceServiceProvider) _get);
if ((serviceProvider != null)) {
final IEncodingProvider encodingProvider = serviceProvider.<IEncodingProvider>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<String, Object> _extensionToFactoryMap = serviceProviderRegistry.getExtensionToFactoryMap();
Object _get = _extensionToFactoryMap.get(langExtension);
final IResourceServiceProvider serviceProvider = ((IResourceServiceProvider) _get);
if (((serviceProvider != null) && this.defaultEncodings.containsKey(langExtension))) {
final IEncodingProvider encodingProvider = serviceProvider.<IEncodingProvider>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<String, String> getDefaultEncodings() {
return this.defaultEncodings;
}
}

View file

@ -17,7 +17,7 @@ class UiTestProjectDescriptor extends TestProjectDescriptor {
override getExternalDependencies() {
val deps = newLinkedHashSet
deps += super.externalDependencies
deps += createXtextDependency("org.eclipse.xtext.junit4") => [maven.scope = Scope.TESTCOMPILE]
deps += createXtextDependency("org.eclipse.xtext.testing") => [maven.scope = Scope.TESTCOMPILE]
deps += createXtextDependency("org.eclipse.xtext.xbase.junit") => [maven.scope = Scope.TESTCOMPILE]
deps
}

View file

@ -29,7 +29,7 @@ public class UiTestProjectDescriptor extends TestProjectDescriptor {
final LinkedHashSet<ExternalDependency> deps = CollectionLiterals.<ExternalDependency>newLinkedHashSet();
Set<ExternalDependency> _externalDependencies = super.getExternalDependencies();
Iterables.<ExternalDependency>addAll(deps, _externalDependencies);
ExternalDependency _createXtextDependency = ExternalDependency.createXtextDependency("org.eclipse.xtext.junit4");
ExternalDependency _createXtextDependency = ExternalDependency.createXtextDependency("org.eclipse.xtext.testing");
final Procedure1<ExternalDependency> _function = (ExternalDependency it) -> {
ExternalDependency.MavenCoordinates _maven = it.getMaven();
_maven.setScope(Scope.TESTCOMPILE);