Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 375337 - Xtext wizard that create project from existing Ecore models should accept Xcore files
Summary: Xtext wizard that create project from existing Ecore models should accept Xco...
Status: CLOSED FIXED
Alias: None
Product: TMF
Classification: Modeling
Component: Xtext (show other bugs)
Version: 2.3.0   Edit
Hardware: PC All
: P3 enhancement with 1 vote (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard: v2.7
Keywords:
Depends on:
Blocks:
 
Reported: 2012-03-26 10:46 EDT by Cristiano Gaviao CLA
Modified: 2017-10-31 10:57 EDT (History)
8 users (show)

See Also:


Attachments
EPackageChooser Patch (845 bytes, patch)
2012-08-02 03:48 EDT, Hugo A. Garcia CLA
sven.efftinge: iplog+
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Cristiano Gaviao CLA 2012-03-26 10:46:31 EDT
Build Identifier: Version: 4.2.0 Build id: I20120315-1300 

Xcore has a Ecore and GenModel inside it. 
So Xtext should accept it as a valid file to be used in the wizard that create project from existing Ecore models.

Reproducible: Always
Comment 1 Sebastian Zarnekow CLA 2012-07-25 02:51:26 EDT
A possible solution should not introduce a new dependency to Xcore.
Comment 2 Ed Merks CLA 2012-07-25 11:31:16 EDT
I imagine (without having looked at a line of code) that one "just" needs to allow choosing files with .xcore extension and that any other code should, rather than assume the EPackage is the first and only object in the resource.getContents(), find the EPackage among the contents.  I agree there must be no bundle dependencies on Xcore because such circularity is impossible.  Note that serialized Xcore resources are already registered as part of the generated_package extension point and the code reading the resources handles them without Xcore dependencies using the above approach.
Comment 3 Hugo A. Garcia CLA 2012-08-02 03:48:36 EDT
Created attachment 219466 [details]
EPackageChooser Patch
Comment 4 Hugo A. Garcia CLA 2012-08-02 03:49:27 EDT
Status Report:

I added the "xcore" extension to be recognized by the wizard used to create an Xtext project from Ecore models (see patch).

I tried to complete the wizard and ran into three exceptions:

** First exception (repeatable)**

Happens after a user selects the EMF Generator Model and clicks OK.

In EPackageChooser.createEPackageInfosFromGenModel() line 64:

for (TreeIterator<EObject> i = resource.getAllContents(); i.hasNext();) {

2    [main] ERROR org.eclipse.xtext.linking.lazy.LazyLinkingResource  - resolution of uriFragment 'xtextLink_::0.4.0.7.0.4::3::/0' failed.
java.lang.NullPointerException
	at org.eclipse.emf.ecore.xcore.util.XcoreJvmInferrer.getJvmTypeReference(XcoreJvmInferrer.java:2113)
	at org.eclipse.emf.ecore.xcore.util.XcoreJvmInferrer$8$5.inferStructure(XcoreJvmInferrer.java:1079)
	at org.eclipse.emf.ecore.xcore.util.XcoreJvmInferrer$8$5.inferStructure(XcoreJvmInferrer.java:1)
	at org.eclipse.emf.ecore.xcore.util.XcoreJvmInferrer$JvmElementInferrer.<init>(XcoreJvmInferrer.java:151)
	at org.eclipse.emf.ecore.xcore.util.XcoreJvmInferrer$8$5.<init>(XcoreJvmInferrer.java:1074)
	at org.eclipse.emf.ecore.xcore.util.XcoreJvmInferrer$8.inferDeepStructure(XcoreJvmInferrer.java:1074)
	at org.eclipse.emf.ecore.xcore.util.XcoreJvmInferrer.inferDeepStructure(XcoreJvmInferrer.java:245)
	at org.eclipse.emf.ecore.xcore.util.XcoreJvmInferrer.inferDeepStructure(XcoreJvmInferrer.java:230)
	at org.eclipse.emf.ecore.xcore.scoping.XcoreImportedNamespaceAwareScopeProvider$EClassifierScope$EcoreDataTypeAliasEObjectDescription.getElement(XcoreImportedNamespaceAwareScopeProvider.java:510)
	at org.eclipse.emf.ecore.xcore.scoping.XcoreImportedNamespaceAwareScopeProvider$EClassifierScope$EcoreDataTypeAliasEObjectDescription.getEObjectOrProxy(XcoreImportedNamespaceAwareScopeProvider.java:460)
	at org.eclipse.emf.ecore.xcore.scoping.XcoreImportedNamespaceAwareScopeProvider$1.apply(XcoreImportedNamespaceAwareScopeProvider.java:97)
	at org.eclipse.emf.ecore.xcore.scoping.XcoreImportedNamespaceAwareScopeProvider$1.apply(XcoreImportedNamespaceAwareScopeProvider.java:1)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:645)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:141)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:136)
	at org.eclipse.xtext.scoping.impl.ImportScope.getLocalElementsByName(ImportScope.java:154)
	at org.eclipse.emf.ecore.xcore.scoping.XcoreImportedNamespaceAwareScopeProvider$4.getLocalElementsByName(XcoreImportedNamespaceAwareScopeProvider.java:382)
	at org.eclipse.xtext.scoping.impl.ImportScope.getSingleLocalElementByName(ImportScope.java:140)
	at org.eclipse.emf.ecore.xcore.scoping.XcoreImportedNamespaceAwareScopeProvider$4.getSingleLocalElementByName(XcoreImportedNamespaceAwareScopeProvider.java:376)
	at org.eclipse.xtext.scoping.impl.AbstractScope.getSingleElement(AbstractScope.java:102)
	at org.eclipse.xtext.scoping.impl.AbstractScope.getSingleElement(AbstractScope.java:105)
	at org.eclipse.xtext.scoping.impl.AbstractScope.getSingleElement(AbstractScope.java:105)
	at org.eclipse.xtext.scoping.impl.AbstractScope.getSingleElement(AbstractScope.java:105)
	at org.eclipse.xtext.scoping.impl.AbstractScope.getSingleElement(AbstractScope.java:105)
	at org.eclipse.xtext.scoping.impl.AbstractScope.getSingleElement(AbstractScope.java:105)
	at org.eclipse.xtext.linking.impl.DefaultLinkingService.getLinkedObjects(DefaultLinkingService.java:121)
	at org.eclipse.xtext.linking.lazy.LazyLinkingResource.getEObject(LazyLinkingResource.java:179)
	at org.eclipse.xtext.xbase.resource.XbaseResource.access$0(XbaseResource.java:1)
	at org.eclipse.xtext.xbase.resource.XbaseResource$2.exec(XbaseResource.java:239)
	at org.eclipse.xtext.xbase.resource.XbaseResource$2.exec(XbaseResource.java:1)
	at org.eclipse.xtext.util.OnChangeEvictingCache.execWithoutCacheClear(OnChangeEvictingCache.java:124)
	at org.eclipse.xtext.xbase.resource.XbaseResource.getEObject(XbaseResource.java:237)
	at org.eclipse.emf.ecore.xcore.resource.XcoreResource.getEObject(XcoreResource.java:184)
	at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getEObject(ResourceSetImpl.java:223)
	at org.eclipse.emf.ecore.util.EcoreUtil.resolve(EcoreUtil.java:197)
	at org.eclipse.emf.ecore.util.EcoreUtil.resolve(EcoreUtil.java:257)
	at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eResolveProxy(BasicEObjectImpl.java:1473)
	at org.eclipse.emf.ecore.xcore.impl.XGenericTypeImpl.getType(XGenericTypeImpl.java:232)
	at org.eclipse.emf.ecore.xcore.util.XcoreEcoreBuilder$3.run(XcoreEcoreBuilder.java:562)
	at org.eclipse.emf.ecore.xcore.util.XcoreEcoreBuilder.link(XcoreEcoreBuilder.java:121)
	at org.eclipse.emf.ecore.xcore.resource.XcoreModelAssociator.installDerivedState(XcoreModelAssociator.java:81)
	at org.eclipse.xtext.resource.DerivedStateAwareResource.installDerivedState(DerivedStateAwareResource.java:125)
	at org.eclipse.xtext.resource.DerivedStateAwareResource.getContents(DerivedStateAwareResource.java:48)
	at org.eclipse.emf.ecore.resource.impl.ResourceImpl$4.getChildren(ResourceImpl.java:519)
	at org.eclipse.emf.common.util.AbstractTreeIterator.hasAnyChildren(AbstractTreeIterator.java:97)
	at org.eclipse.emf.common.util.AbstractTreeIterator.hasNext(AbstractTreeIterator.java:85)
	at org.eclipse.xtext.xtext.ui.wizard.ecore2xtext.EPackageChooser.createEPackageInfosFromGenModel(EPackageChooser.java:64)
	at org.eclipse.xtext.xtext.ui.wizard.ecore2xtext.EPackageChooser.open(EPackageChooser.java:150)
	at org.eclipse.xtext.xtext.ui.wizard.ecore2xtext.WizardSelectImportedEPackagePage$3.widgetSelected(WizardSelectImportedEPackagePage.java:106)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1276)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3554)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3179)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
	at org.eclipse.jface.window.Window.open(Window.java:801)
	at org.eclipse.ui.actions.NewProjectAction.run(NewProjectAction.java:117)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
	at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
	at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
	at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1276)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3554)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3179)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
===

Non repeatable exceptions:

I got two ClassCastExceptions maybe when I was doing the Xtext project wizard starting from a genmodel generated from the Xcore model. Will verify later.

XPackageImpl to EPackage
ResourceSetImpl to XTextResourceSet

====

Generating the Xtext editor works and testing the editor works.
Comment 5 Ed Merks CLA 2012-08-02 04:04:34 EDT
Is XcoreJavaProjectProvider kicking in to provide the information needed for class loading?  Probably getJavaProject should kick in. What it returns will depend on what resources are in the resource set.  If some other resource is first, that could be a problem if its project doesn't have Ecore and Xbase lib dependencies, or other dependencies needed by the Xcore model...
Comment 6 Stefan Oehme CLA 2014-08-21 13:35:57 EDT
Fixed in master

https://git.eclipse.org/r/#/c/31633/
Comment 7 Eclipse Webmaster CLA 2017-10-31 10:46:43 EDT
Requested via bug 522520.

-M.
Comment 8 Eclipse Webmaster CLA 2017-10-31 10:57:57 EDT
Requested via bug 522520.

-M.