mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-16 00:38:56 +00:00
service framework refactored (made xtext independent)
This commit is contained in:
parent
ca06607789
commit
6867b65017
9 changed files with 85 additions and 64 deletions
|
@ -22,6 +22,7 @@ Export-Package: org.eclipse.xtext,
|
|||
org.eclipse.xtext.parsetree.reconstr.impl,
|
||||
org.eclipse.xtext.parsetree.util,
|
||||
org.eclipse.xtext.resource,
|
||||
org.eclipse.xtext.service,
|
||||
org.eclipse.xtext.services,
|
||||
org.eclipse.xtext.util,
|
||||
org.eclipse.xtext.xtextutil,
|
||||
|
|
|
@ -7,9 +7,9 @@ import org.eclipse.xtext.IGrammarAccess;
|
|||
import org.eclipse.xtext.XtextPackage;
|
||||
import org.eclipse.xtext.builtin.conversion.XtextBuiltInConverters;
|
||||
import org.eclipse.xtext.conversion.IValueConverterService;
|
||||
import org.eclipse.xtext.service.ILanguageDescriptor;
|
||||
import org.eclipse.xtext.service.LanguageDescriptorFactory;
|
||||
import org.eclipse.xtext.service.IServiceScope;
|
||||
import org.eclipse.xtext.service.ServiceRegistry;
|
||||
import org.eclipse.xtext.service.ServiceScopeFactory;
|
||||
|
||||
public class XtextBuiltinStandaloneSetup {
|
||||
|
||||
|
@ -21,19 +21,18 @@ public class XtextBuiltinStandaloneSetup {
|
|||
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
|
||||
EPackage.Registry.INSTANCE.put(XtextPackage.eNS_URI,XtextPackage.eINSTANCE);
|
||||
|
||||
ILanguageDescriptor languageDescriptor = LanguageDescriptorFactory.createLanguageDescriptor(IXtextBuiltin.ID,
|
||||
IXtextBuiltin.NAME, IXtextBuiltin.NAMESPACE, null);
|
||||
IServiceScope serviceScope = ServiceScopeFactory.createScope(IXtextBuiltin.ID, null);
|
||||
|
||||
ServiceRegistry.registerService(languageDescriptor, IGrammarAccess.class, XtextBuiltinGrammarAccess.class);
|
||||
ServiceRegistry.registerService(languageDescriptor, IValueConverterService.class, XtextBuiltInConverters.class);
|
||||
ServiceRegistry.registerService(serviceScope, IGrammarAccess.class, XtextBuiltinGrammarAccess.class);
|
||||
ServiceRegistry.registerService(serviceScope, IValueConverterService.class, XtextBuiltInConverters.class);
|
||||
isInitialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized static ILanguageDescriptor getLanguageDescriptor() {
|
||||
public synchronized static IServiceScope getServiceScope() {
|
||||
if (!isInitialized) {
|
||||
doSetup();
|
||||
}
|
||||
return LanguageDescriptorFactory.get(IXtextBuiltin.ID);
|
||||
return ServiceScopeFactory.get(IXtextBuiltin.ID);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
|
|||
import org.eclipse.m2t.type.emf.EmfRegistryMetaModel;
|
||||
import org.eclipse.xtext.parser.IParseResult;
|
||||
import org.eclipse.xtext.parser.IParser;
|
||||
import org.eclipse.xtext.service.ILanguageDescriptor;
|
||||
import org.eclipse.xtext.service.IServiceScope;
|
||||
import org.eclipse.xtext.service.Inject;
|
||||
import org.eclipse.xtext.service.ServiceRegistry;
|
||||
import org.eclipse.xtext.util.StringInputStream;
|
||||
|
@ -35,7 +35,7 @@ public abstract class AbstractXtextTests extends TestCase {
|
|||
return parser;
|
||||
}
|
||||
|
||||
protected void setCurrentLanguage(ILanguageDescriptor desc) {
|
||||
protected void setCurrentLanguage(IServiceScope desc) {
|
||||
ServiceRegistry.injectServices(desc, this);
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,8 @@ import org.eclipse.emf.common.util.WrappedException;
|
|||
import org.eclipse.emf.ecore.EObject;
|
||||
import org.eclipse.emf.ecore.EPackage;
|
||||
import org.eclipse.emf.ecore.resource.Resource;
|
||||
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
|
||||
import org.eclipse.xtext.resource.ClassloaderClasspathUriResolver;
|
||||
import org.eclipse.xtext.resource.XtextResourceSet;
|
||||
|
||||
/**
|
||||
|
@ -23,43 +25,45 @@ import org.eclipse.xtext.resource.XtextResourceSet;
|
|||
*/
|
||||
public abstract class BaseEPackageAccess {
|
||||
|
||||
public static EPackage getEPackageFromRegistry(String string) {
|
||||
EPackage ePackage = EPackage.Registry.INSTANCE.getEPackage(string);
|
||||
if (ePackage == null)
|
||||
throw new IllegalStateException("couldn't load EPackage for URI '" + string + "'");
|
||||
return ePackage;
|
||||
}
|
||||
public static EPackage getEPackageFromRegistry(String string) {
|
||||
EPackage ePackage = EPackage.Registry.INSTANCE.getEPackage(string);
|
||||
if (ePackage == null)
|
||||
throw new IllegalStateException("couldn't load EPackage for URI '" + string + "'");
|
||||
return ePackage;
|
||||
}
|
||||
|
||||
protected static Resource loadResource(ClassLoader loader, String string) {
|
||||
URI uri = URI.createURI("classpath:/" + string);
|
||||
XtextResourceSet resourceSet = new XtextResourceSet();
|
||||
resourceSet.setClasspathURIContext(loader);
|
||||
Resource resource;
|
||||
try {
|
||||
resource = resourceSet.getResource(uri, true);
|
||||
if (resource == null) {
|
||||
throw new IllegalArgumentException("Couldn't create resource for URI : " + uri);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new WrappedException(e);
|
||||
}
|
||||
EList<EObject> contents = resource.getContents();
|
||||
if (contents.size() != 1) {
|
||||
throw new IllegalStateException("loading classpath:" + string + " : Expected one root element but found " + contents.size());
|
||||
}
|
||||
return resource;
|
||||
}
|
||||
protected static Resource loadResource(ClassLoader loader, String string) {
|
||||
URI uri = URI.createURI(string);
|
||||
XtextResourceSet resourceSet = new XtextResourceSet();
|
||||
resourceSet.setClasspathURIContext(loader);
|
||||
Resource resource;
|
||||
try {
|
||||
resource = resourceSet.getResource(uri, true);
|
||||
if (resource == null) {
|
||||
throw new IllegalArgumentException("Couldn't create resource for URI : " + uri);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new WrappedException(e);
|
||||
}
|
||||
EList<EObject> contents = resource.getContents();
|
||||
if (contents.size() != 1) {
|
||||
throw new IllegalStateException("loading classpath:" + string + " : Expected one root element but found "
|
||||
+ contents.size());
|
||||
}
|
||||
return resource;
|
||||
}
|
||||
|
||||
protected static EPackage loadEcoreFile(ClassLoader loader, String string) {
|
||||
Resource resource = loadResource(loader, string);
|
||||
return (EPackage) resource.getContents().get(0);
|
||||
}
|
||||
protected static EPackage loadEcoreFile(ClassLoader loader, String string) {
|
||||
URI uri = URI.createURI(string);
|
||||
if (!uri.hasFragment())
|
||||
uri = uri.appendFragment("/");
|
||||
URI normalized = new ClassloaderClasspathUriResolver().resolve(loader, uri);
|
||||
return (EPackage) new ResourceSetImpl().getEObject(normalized, true);
|
||||
}
|
||||
|
||||
protected static Object loadGrammarFile(ClassLoader loader, String string) {
|
||||
Resource resource = loadResource(loader, string);
|
||||
return resource.getContents().get(0);
|
||||
}
|
||||
|
||||
|
||||
protected static Object loadGrammarFile(ClassLoader loader, String string) {
|
||||
Resource resource = loadResource(loader, string);
|
||||
return resource.getContents().get(0);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2008 itemis AG (http://www.itemis.eu) and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
*******************************************************************************/
|
||||
package org.eclipse.xtext.service;
|
||||
|
||||
/**
|
||||
* @author Peter Friese - Initial contribution and API
|
||||
*
|
||||
*/
|
||||
public interface ILanguageService {
|
||||
|
||||
}
|
|
@ -10,9 +10,9 @@ import org.eclipse.emf.ecore.resource.Resource;
|
|||
import org.eclipse.emf.ecore.resource.ResourceSet;
|
||||
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
|
||||
import org.eclipse.xtext.resource.IResourceFactory;
|
||||
import org.eclipse.xtext.service.ILanguageDescriptor;
|
||||
import org.eclipse.xtext.service.LanguageDescriptorFactory;
|
||||
import org.eclipse.xtext.service.IServiceScope;
|
||||
import org.eclipse.xtext.service.ServiceRegistry;
|
||||
import org.eclipse.xtext.service.ServiceScopeFactory;
|
||||
import org.eclipse.xtext.testlanguages.ITestLanguage;
|
||||
import org.eclipse.xtext.tests.AbstractGeneratorTest;
|
||||
import org.eclipse.xtext.xtext2ecore.EcoreModelComparator;
|
||||
|
@ -21,8 +21,8 @@ public class ResourceTest extends AbstractGeneratorTest {
|
|||
|
||||
public void testResource() throws Exception {
|
||||
new Object(); // workaround for Java bug on MacOSX
|
||||
ILanguageDescriptor languageDescriptor = LanguageDescriptorFactory.get(ITestLanguage.ID);
|
||||
IResourceFactory resourceFactory = ServiceRegistry.getService(languageDescriptor, IResourceFactory.class);
|
||||
IServiceScope serviceScope = ServiceScopeFactory.get(ITestLanguage.ID);
|
||||
IResourceFactory resourceFactory = ServiceRegistry.getService(serviceScope, IResourceFactory.class);
|
||||
|
||||
File modelFile = File.createTempFile("testfile", "." + resourceFactory.getModelFileExtensions()[0]);
|
||||
modelFile.deleteOnExit();
|
||||
|
|
|
@ -7,7 +7,7 @@ import org.eclipse.xtext.tests.AbstractGeneratorTest;
|
|||
|
||||
public class InheritanceTest extends AbstractGeneratorTest {
|
||||
static {
|
||||
ServiceRegistry.registerService(AbstractTestLanguageStandaloneSetup.getLanguageDescriptor(),
|
||||
ServiceRegistry.registerService(AbstractTestLanguageStandaloneSetup.getServiceScope(),
|
||||
IValueConverterService.class, AbstractTestLanguageValueConverters.class);
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ import org.eclipse.xtext.parsetree.reconstr.IParseTreeConstructor;
|
|||
import org.eclipse.xtext.resource.IResourceFactory;
|
||||
import org.eclipse.xtext.resource.XtextResource;
|
||||
import org.eclipse.xtext.resource.XtextResourceSet;
|
||||
import org.eclipse.xtext.service.ILanguageDescriptor;
|
||||
import org.eclipse.xtext.service.IServiceScope;
|
||||
import org.eclipse.xtext.service.ServiceRegistry;
|
||||
import org.eclipse.xtext.util.StringInputStream;
|
||||
import org.openarchitectureware.expression.ExecutionContextImpl;
|
||||
|
@ -58,10 +58,10 @@ public abstract class AbstractGeneratorTest extends TestCase {
|
|||
}
|
||||
|
||||
|
||||
private ILanguageDescriptor currentLanguageDescriptor;
|
||||
private IServiceScope currentScope;
|
||||
|
||||
public ILanguageDescriptor getCurrentLanguageDescriptor() {
|
||||
return currentLanguageDescriptor;
|
||||
public IServiceScope getCurrentServiceScope() {
|
||||
return currentScope;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -73,36 +73,36 @@ public abstract class AbstractGeneratorTest extends TestCase {
|
|||
@Override
|
||||
protected void tearDown() throws Exception {
|
||||
super.tearDown();
|
||||
currentLanguageDescriptor = null;
|
||||
currentScope = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* call this to set the language class to be used in the current test.
|
||||
*/
|
||||
protected void with(Class<?> standaloneSetup) throws Exception {
|
||||
Method getLangDescMethod = standaloneSetup.getMethod("getLanguageDescriptor");
|
||||
currentLanguageDescriptor = (ILanguageDescriptor) getLangDescMethod.invoke(null);
|
||||
assert currentLanguageDescriptor != null;
|
||||
Method getLangDescMethod = standaloneSetup.getMethod("getServiceScope");
|
||||
currentScope = (IServiceScope) getLangDescMethod.invoke(null);
|
||||
assert currentScope != null;
|
||||
}
|
||||
|
||||
protected IParser getParser() {
|
||||
return ServiceRegistry.getService(currentLanguageDescriptor, IParser.class);
|
||||
return ServiceRegistry.getService(currentScope, IParser.class);
|
||||
}
|
||||
|
||||
protected IAstFactory getASTFactory() {
|
||||
return ServiceRegistry.getService(currentLanguageDescriptor, IAstFactory.class);
|
||||
return ServiceRegistry.getService(currentScope, IAstFactory.class);
|
||||
}
|
||||
|
||||
protected IParseTreeConstructor getParseTreeConstructor() {
|
||||
return ServiceRegistry.getService(currentLanguageDescriptor, IParseTreeConstructor.class);
|
||||
return ServiceRegistry.getService(currentScope, IParseTreeConstructor.class);
|
||||
}
|
||||
|
||||
protected IResourceFactory getResourceFactory() {
|
||||
return ServiceRegistry.getService(currentLanguageDescriptor, IResourceFactory.class);
|
||||
return ServiceRegistry.getService(currentScope, IResourceFactory.class);
|
||||
}
|
||||
|
||||
protected IValueConverterService getValueConverterService() {
|
||||
return ServiceRegistry.getService(currentLanguageDescriptor, IValueConverterService.class);
|
||||
return ServiceRegistry.getService(currentScope, IValueConverterService.class);
|
||||
}
|
||||
|
||||
// parse methods
|
||||
|
|
|
@ -40,7 +40,7 @@ public class ActionTest extends AbstractGeneratorTest {
|
|||
}
|
||||
|
||||
private EPackage getActionLangEPackage() {
|
||||
IMetamodelAccess metaModelAccess = ServiceRegistry.getService(ActionTestLanguageStandaloneSetup.getLanguageDescriptor(), IMetamodelAccess.class);
|
||||
IMetamodelAccess metaModelAccess = ServiceRegistry.getService(ActionTestLanguageStandaloneSetup.getServiceScope(), IMetamodelAccess.class);
|
||||
EPackage actionLangEPackage = metaModelAccess.getGeneratedEPackages()[0];
|
||||
return actionLangEPackage;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue