| Summary: | Have a better feedback when session opening fails because an exception occurred when resolving semantic resources' references in ReferencesResolver.resolveCrossReferences | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [Modeling] Sirius | Reporter: | Pierre Guilet <pierre.guilet> | ||||
| Component: | Core | Assignee: | Project inbox <sirius.core-inbox> | ||||
| Status: | RESOLVED WORKSFORME | QA Contact: | |||||
| Severity: | normal | ||||||
| Priority: | P3 | CC: | florian.barbin | ||||
| Version: | 4.1.1 | Keywords: | triaged | ||||
| Target Milestone: | --- | ||||||
| Hardware: | PC | ||||||
| OS: | All | ||||||
| Whiteboard: | |||||||
| Attachments: |
|
||||||
Created attachment 266002 [details]
Project to reproduce
Add a project that allow problem reproduction.
1- import the project into workspace of a Sirius package
2- Reopen the project
3- Error message is in error log
The problem has been fixed by https://bugs.eclipse.org/bugs/show_bug.cgi?id=509571 |
When opening a Sirius session, we add to it all semantic resources we can find. To find these we check all references of known semantic resources by using ReferencesResolver.resolveCrossReferences. In this method we use the following code : Iterator<EReference> it = Iterators.filter(eObject.eClass().getEAllReferences().iterator(), filter); while (it.hasNext()) { eObject.eGet(it.next()); } If an exception occurs during the eGet(), it goes back up to OpenRepresentationsFileJob.runInWorkspace that log it with the message : java.lang.RuntimeException: The modeling project "TestNoCDOEcore" is invalid: Problem during loading models: null and the stacktrace. So the user don't have much information to identify the problem. A more specific exception should be thrown by ReferencesResolver.resolveCrossReferences when an exception occurs when resolving the references that gives the semantic resource name and the reference name of the reference triggering the exception. Step to reproduce : 1- Create a modelling project 2- Create an ecore file with an EClass with a reference. 3- Create the corresponding genmodel 4- Modify the genmodel with a text editor. Add a genFeatures without ecoreFeature like in the following example : <?xml version="1.0" encoding="UTF-8"?> <genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/TestNoCDOEcore/src" modelPluginID="TestNoCDOEcore" modelName="My" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" importerID="org.eclipse.emf.importer.ecore" complianceLevel="8.0" copyrightFields="false" operationReflection="true" importOrganizing="true"> <foreignModel>My.ecore</foreignModel> <genPackages prefix="Mymy" disposableProviderFactory="true" ecorePackage="My.ecore#/"> <genClasses ecoreClass="My.ecore#//Root"> <genFeatures createChild="false"/> //no ecoreFeature <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference My.ecore#//Root/rootCeption"/> </genClasses> </genPackages> </genmodel:GenModel> 5- Close and re-open the project. You will have in the error log the following stacktrace with not much information : java.lang.RuntimeException: The modeling project "TestNoCDOEcore" is invalid: Problem during loading models: null at org.eclipse.sirius.ui.tools.internal.views.common.modelingproject.OpenRepresentationsFileJob.runInWorkspace(OpenRepresentationsFileJob.java:136) at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:39) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) Caused by: java.lang.NullPointerException at org.eclipse.emf.codegen.ecore.genmodel.impl.GenTypedElementImpl.isListType(GenTypedElementImpl.java:332) at org.eclipse.emf.codegen.ecore.genmodel.impl.GenClassImpl$12.accept(GenClassImpl.java:2175) at org.eclipse.emf.codegen.ecore.genmodel.impl.GenBaseImpl.collectGenFeatures(GenBaseImpl.java:1588) at org.eclipse.emf.codegen.ecore.genmodel.impl.GenClassImpl.getLabelFeatureCandidates(GenClassImpl.java:2168) at org.eclipse.emf.codegen.ecore.genmodel.impl.GenClassImpl.getLabelFeature(GenClassImpl.java:2531) at org.eclipse.emf.codegen.ecore.genmodel.impl.GenClassImpl.eGet(GenClassImpl.java:2660) at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1011) at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1003) at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:998) at org.eclipse.sirius.ecore.extender.tool.internal.ReferencesResolver.resolveCrossReferences(ReferencesResolver.java:100) at org.eclipse.sirius.ecore.extender.tool.internal.ReferencesResolver.doResolveAll(ReferencesResolver.java:93) at org.eclipse.sirius.ecore.extender.tool.internal.ReferencesResolver.resolve(ReferencesResolver.java:74) at org.eclipse.sirius.ecore.extender.tool.api.ModelUtils.resolveAll(ModelUtils.java:453) at org.eclipse.sirius.business.internal.session.danalysis.SessionResourcesTracker.forceLoadingOfEveryLinkedResource(SessionResourcesTracker.java:173) at org.eclipse.sirius.business.internal.session.danalysis.SessionResourcesTracker.initialize(SessionResourcesTracker.java:95) at org.eclipse.sirius.business.internal.session.danalysis.DAnalysisSessionImpl.open(DAnalysisSessionImpl.java:1161) at org.eclipse.sirius.business.internal.session.SessionManagerImpl.openSession(SessionManagerImpl.java:390) at org.eclipse.sirius.ui.tools.internal.views.common.modelingproject.OpenRepresentationsFileJob.performOpenSession(OpenRepresentationsFileJob.java:157) at org.eclipse.sirius.ui.tools.internal.views.common.modelingproject.OpenRepresentationsFileJob.runInWorkspace(OpenRepresentationsFileJob.java:126) ... 2 more