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

Bug 451568

Summary: NPE on local refresh of DDiagramElement whose target is detached
Product: [Modeling] Sirius Reporter: Esteban DUGUEPEROUX <esteban.dugueperoux>
Component: DiagramAssignee: Project Inbox <sirius.diagram-inbox>
Status: CLOSED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: belqassim.djafer, pierre-charles.david
Version: 2.0.0Keywords: triaged
Target Milestone: 3.0.0M5   
Hardware: PC   
OS: Linux   
Whiteboard:

Description Esteban DUGUEPEROUX CLA 2014-11-14 10:58:34 EST
We get the following exception when doing a local refresh, i.e. F5 shortcut, on a selected DDiagramElement whose target is detached : 

java.lang.NullPointerException
at org.eclipse.gef.editparts.AbstractEditPart.getViewer(AbstractEditPart.java:639)
at fr.obeo.dsl.viewpoint.diagram.graphical.edit.policies.RefreshViewPointElementEditPolicy.getCommand(RefreshViewPointElementEditPolicy.java:57)
at fr.obeo.dsl.viewpoint.diagram.ui.tools.api.policy.CompoundEditPolicy.getCommand(CompoundEditPolicy.java:117)
at org.eclipse.gef.editparts.AbstractEditPart.getCommand(AbstractEditPart.java:501)
at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.access$1(GraphicalEditPart.java:1)
at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart$1.run(GraphicalEditPart.java:482)
at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:328)
at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.getCommand(GraphicalEditPart.java:477)
at fr.obeo.dsl.viewpoint.diagram.edit.api.part.AbstractDiagramContainerEditPart.getCommand(AbstractDiagramContainerEditPart.java:185)
at fr.obeo.dsl.viewpoint.diagram.tools.internal.actions.refresh.RefreshRunnableWithProgress.refreshFromEditPart(RefreshRunnableWithProgress.java:148)
at fr.obeo.dsl.viewpoint.diagram.tools.internal.actions.refresh.RefreshRunnableWithProgress.run(RefreshRunnableWithProgress.java:72)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)

It occurs because the DDiagramElement's EditPart has been disabled, then adding a isActive() fix this exception.
After if we redo a local refresh on the same selected DDiagramElement we get :

java.lang.RuntimeException
at org.eclipse.sirius.tools.api.interpreter.InterpreterRegistry.getInterpreter(InterpreterRegistry.java:70)
at org.eclipse.sirius.diagram.business.internal.metamodel.description.operations.AbstractNodeMappingSpecOperations.getSemanticIterator(AbstractNodeMappingSpecOperations.java:160)
at org.eclipse.sirius.diagram.business.internal.metamodel.description.operations.AbstractNodeMappingSpecOperations.createBorderingNodes(AbstractNodeMappingSpecOperations.java:136)
at org.eclipse.sirius.diagram.business.internal.metamodel.spec.DNodeSpec.refresh(DNodeSpec.java:78)
at org.eclipse.sirius.diagram.tools.api.command.view.RefreshSiriusElement.doExecute(RefreshSiriusElement.java:84)
at org.eclipse.emf.transaction.RecordingCommand.execute(RecordingCommand.java:135)
at org.eclipse.sirius.diagram.ui.tools.api.command.GMFCommandWrapper.doExecuteWithResult(GMFCommandWrapper.java:103)
at org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand.doExecute(AbstractTransactionalCommand.java:247)
at org.eclipse.emf.workspace.AbstractEMFOperation.execute(AbstractEMFOperation.java:150)
at org.eclipse.gmf.runtime.common.core.command.CompositeCommand.doExecuteWithResult(CompositeCommand.java:403)
at org.eclipse.gmf.runtime.common.core.command.AbstractCommand.execute(AbstractCommand.java:134)
at org.eclipse.sirius.diagram.ui.tools.internal.commands.WrappingCommandIgnoringAffectedFiles.execute(WrappingCommandIgnoringAffectedFiles.java:124)
at org.eclipse.core.commands.operations.DefaultOperationHistory.execute(DefaultOperationHistory.java:513)
at org.eclipse.sirius.diagram.ui.tools.internal.editor.DDiagramCommandStack.execute(DDiagramCommandStack.java:75)
at org.eclipse.sirius.diagram.ui.tools.internal.editor.DDiagramCommandStack.execute(DDiagramCommandStack.java:57)
at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramCommandStack.execute(DiagramCommandStack.java:156)
at org.eclipse.sirius.diagram.ui.tools.internal.actions.refresh.RefreshRunnableWithProgress.executeInCompoundCommand(RefreshRunnableWithProgress.java:101)
at org.eclipse.sirius.diagram.ui.tools.internal.actions.refresh.RefreshRunnableWithProgress.run(RefreshRunnableWithProgress.java:79)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:122)

Because here the EditPart is no more disabled but the refresh is executed on the DDiagramElement while it has a detached target.
Comment 1 Esteban DUGUEPEROUX CLA 2014-11-14 11:01:22 EST
https://git.eclipse.org/r/36487 has been submitted to Gerrit to fix these exceptions.
Comment 2 Esteban DUGUEPEROUX CLA 2015-01-22 11:04:11 EST
Merged as 138384d9fa802ea679a40aaefc1055a11860ef14
Comment 3 Belqassim Djafer CLA 2015-04-09 11:03:25 EDT
Verified on Sirius 3.0.0M6
Comment 4 Pierre-Charles David CLA 2015-06-24 11:16:05 EDT
Available in Sirius 3.0.0. See https://wiki.eclipse.org/Sirius/3.0.0.