Standalone application load cross reference [message #1854392] |
Wed, 17 August 2022 06:48  |
Eclipse User |
|
|
|
Hi
if needed, see also example in attachment.
In the example, there are two languages: 'define' and 'use'. the 'use' language has reference on some of the type define d in the 'define' language.
In a standalone application, below, I'm loading an instance of the 'use' language [1]. When checking the value of the referenced object [2], they are 'null' and the object are marked as 'eProxy'. What am I missing when loading my resources,. Hints would be helpful.
Thank you and kind regards
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.resource.IResourceFactory;
import org.eclipse.xtext.resource.IResourceServiceProvider;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.resource.XtextResourceSet;
import org.xtext.example.definedsl.defineDsl.DefineDslPackage;
import org.xtext.example.usedsl.UseDslStandaloneSetupGenerated;
import org.xtext.example.usedsl.useDsl.Model;
import org.xtext.example.usedsl.useDsl.Usage;
import com.google.inject.Injector;
public class Main {
public static void main(String[] args) {
Injector injector = new UseDslStandaloneSetupGenerated().createInjectorAndDoEMFRegistration();
XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet.class);
resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE);
IResourceFactory resourceFactory = injector.getInstance(IResourceFactory.class);
IResourceServiceProvider serviceProvider = injector.getInstance(IResourceServiceProvider.class);
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("define", resourceFactory);
IResourceServiceProvider.Registry.INSTANCE.getExtensionToFactoryMap().put("define", serviceProvider);
DefineDslPackage.eINSTANCE.eClass();
Resource r1 = resourceSet.getResource(URI.createFileURI("../use-definition/src/b.use"), true); [1]
Resource r2 = resourceSet.getResource(URI.createFileURI("../use-definition/src/a.define"), true);
Model model = (Model) r1.getContents().get(0);
for(Usage usage : model.getUses()) {
System.out.println(usage.getName().getName() + " -- " + usage.getName().getValue()); [2]
}
}
}
Attachment: example.zip
(Size: 502.63KB, Downloaded 122 times)
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.16931 seconds