Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 464514

Summary: NPE in RelatedElementsSwitch when using EcoreTools on Sirius MetaModel
Product: [Modeling] Sirius Reporter: Laurent Redor <laurent.redor>
Component: CoreAssignee: Cedric Brun <cedric.brun>
Status: CLOSED FIXED QA Contact: Maxime Porhel <maxime.porhel>
Severity: normal    
Priority: P3 CC: cedric.brun, esteban.dugueperoux, maxime.porhel
Version: unspecifiedKeywords: triaged
Target Milestone: 3.0.0M7   
Hardware: All   
OS: All   
See Also: https://git.eclipse.org/r/45760
https://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=d6f03116306271a4639cd9c4fc03e98c8402fb47
Whiteboard:

Description Laurent Redor CLA 2015-04-13 09:22:04 EDT
Steps to reproduce:
* Import project org.eclipse.sirius in your workspace
* Create a Representations file on /org.eclipse.sirius/model/viewpoint.ecore
* Activate Viewpoint Design of EcoreTools
* Open the diagram "tool class diagram"
* Drag'n'drop "InitialNodeCreationOperation" in it.
* Activate the layer "Related EClasses"
* NPE is thrown

org.eclipse.sirius.common.tools.api.interpreter.EvaluationException: Exception while calling service org.eclipse.emf.ecoretools.design.service.DesignServices.getExternalEClasses(org.eclipse.emf.ecore.EPackage).
	at org.eclipse.sirius.common.tools.internal.interpreter.MonomorphicService.fail(MonomorphicService.java:83)
	at org.eclipse.sirius.common.tools.internal.interpreter.MonomorphicService.call(MonomorphicService.java:77)
	at org.eclipse.sirius.common.tools.internal.interpreter.PolymorphicService.call(PolymorphicService.java:56)
	at org.eclipse.sirius.common.tools.internal.interpreter.ServiceInterpreter.callService(ServiceInterpreter.java:157)
	at org.eclipse.sirius.common.tools.internal.interpreter.ServiceInterpreter.evaluate(ServiceInterpreter.java:149)
	at org.eclipse.sirius.common.tools.internal.interpreter.AbstractInterpreter.evaluateCollection(AbstractInterpreter.java:52)
	at org.eclipse.sirius.tools.internal.interpreter.ODesignGenericInterpreter.evaluateCollection(ODesignGenericInterpreter.java:137)
	at org.eclipse.sirius.diagram.business.api.query.DiagramElementMappingQuery.evaluateCandidateExpression(DiagramElementMappingQuery.java:443)
	at org.eclipse.sirius.diagram.business.internal.experimental.sync.AbstractSynchronizerHelper.evaluateCandidateExpression(AbstractSynchronizerHelper.java:120)
	at org.eclipse.sirius.diagram.business.internal.experimental.sync.AbstractSynchronizerHelper.getSemanticCandidates(AbstractSynchronizerHelper.java:189)
	at org.eclipse.sirius.diagram.business.internal.experimental.sync.DNodeSynchronizerHelper.computeNodeCandidates(DNodeSynchronizerHelper.java:61)
	at org.eclipse.sirius.diagram.business.internal.experimental.sync.DDiagramSynchronizer.computeNodeCandidates(DDiagramSynchronizer.java:1149)
	at org.eclipse.sirius.diagram.business.internal.experimental.sync.MappingsUpdater$MappingUpdateVisitor.getNodeCandidates(MappingsUpdater.java:209)
	at org.eclipse.sirius.diagram.business.internal.experimental.sync.MappingsUpdater$MappingUpdateVisitor.visit(MappingsUpdater.java:130)
	at org.eclipse.sirius.diagram.business.internal.componentization.mappings.DiagramMappingsManagerImpl.iterateOnMappings(DiagramMappingsManagerImpl.java:389)
	at org.eclipse.sirius.diagram.business.internal.componentization.mappings.DiagramMappingsManagerImpl.safeIterate(DiagramMappingsManagerImpl.java:371)
	at org.eclipse.sirius.diagram.business.internal.componentization.mappings.DiagramMappingsManagerImpl.iterate(DiagramMappingsManagerImpl.java:361)
	at org.eclipse.sirius.diagram.business.internal.experimental.sync.MappingsUpdater.safeUpdateMappings(MappingsUpdater.java:92)
	at org.eclipse.sirius.diagram.business.internal.experimental.sync.MappingsUpdater.updateMappings(MappingsUpdater.java:84)
	at org.eclipse.sirius.diagram.business.internal.experimental.sync.MappingsUpdater.updateMappings(MappingsUpdater.java:71)
	at org.eclipse.sirius.diagram.business.internal.experimental.sync.DDiagramSynchronizer.refreshOperation(DDiagramSynchronizer.java:384)
	at org.eclipse.sirius.diagram.business.internal.experimental.sync.DDiagramSynchronizer.refresh(DDiagramSynchronizer.java:343)
	at org.eclipse.sirius.diagram.business.internal.sync.DDiagramSynchronizer.refresh(DDiagramSynchronizer.java:91)
	at org.eclipse.sirius.diagram.business.internal.dialect.DiagramDialectServices.refresh(DiagramDialectServices.java:249)
	at org.eclipse.sirius.business.internal.dialect.DialectManagerImpl.refresh(DialectManagerImpl.java:118)
	at org.eclipse.sirius.business.api.dialect.command.RefreshRepresentationsCommand.doExecute(RefreshRepresentationsCommand.java:124)
	at org.eclipse.emf.transaction.RecordingCommand.execute(RecordingCommand.java:135)
	at org.eclipse.sirius.diagram.tools.api.command.ChangeLayerActivationCommand.doExecute(ChangeLayerActivationCommand.java:79)
	at org.eclipse.emf.transaction.RecordingCommand.execute(RecordingCommand.java:135)
	at org.eclipse.emf.workspace.EMFCommandOperation.doExecute(EMFCommandOperation.java:119)
	at org.eclipse.emf.workspace.AbstractEMFOperation.execute(AbstractEMFOperation.java:150)
	at org.eclipse.core.commands.operations.DefaultOperationHistory.execute(DefaultOperationHistory.java:513)
	at org.eclipse.emf.workspace.impl.WorkspaceCommandStackImpl.doExecute(WorkspaceCommandStackImpl.java:208)
	at org.eclipse.emf.transaction.impl.AbstractTransactionalCommandStack.execute(AbstractTransactionalCommandStack.java:165)
	at org.eclipse.emf.transaction.impl.AbstractTransactionalCommandStack.execute(AbstractTransactionalCommandStack.java:219)
	at org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.LayersActivationAction$1.run(LayersActivationAction.java:66)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.eclipse.sirius.common.tools.internal.interpreter.MonomorphicService.call(MonomorphicService.java:71)
	... 35 more
Caused by: java.lang.NullPointerException
	at org.eclipse.emf.ecoretools.design.service.RelatedElementsSwitch.caseEClass(RelatedElementsSwitch.java:71)
	at org.eclipse.emf.ecoretools.design.service.RelatedElementsSwitch.caseEClass(RelatedElementsSwitch.java:1)
	at org.eclipse.emf.ecore.util.EcoreSwitch.doSwitch(EcoreSwitch.java:106)
	at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:53)
	at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:69)
	at org.eclipse.emf.ecoretools.design.service.RelatedElementsSwitch.getRelatedElements(RelatedElementsSwitch.java:61)
	at org.eclipse.emf.ecoretools.design.service.DesignServices.getExternalEClasses(DesignServices.java:258)
	... 40 more
Comment 1 Laurent Redor CLA 2015-04-13 09:24:03 EDT
After a debug session, I noticed that I have 2 instances of SessionManagerImpl (from the singleton SessionManager.INSTANCE). There is probably a problem of class loader or something like this ...
Comment 2 Cedric Brun CLA 2015-04-13 09:43:21 EDT
This is actually a problem in Sirius, moving it there.
Comment 3 Eclipse Genie CLA 2015-04-13 11:50:34 EDT
New Gerrit change created: https://git.eclipse.org/r/45760
Comment 5 Cedric Brun CLA 2015-04-20 04:26:08 EDT
Fixed for M7
Comment 6 Maxime Porhel CLA 2015-05-21 09:46:25 EDT
Validated on Sirius 3.0.0 RC1
Comment 7 Pierre-Charles David CLA 2015-06-24 11:16:59 EDT
Available in Sirius 3.0.0. See https://wiki.eclipse.org/Sirius/3.0.0.