Bug 529881 - NullPointerException from the Graphical Editor after External Resource Change Events
Summary: NullPointerException from the Graphical Editor after External Resource Change...
Status: NEW
Alias: None
Product: Sirius
Classification: Modeling
Component: Diagram (show other bugs)
Version: 5.1.0   Edit
Hardware: PC Windows 7
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: triaged
Depends on:
Blocks:
 
Reported: 2018-01-16 09:39 EST by Tamas Miklossy CLA
Modified: 2018-02-12 11:44 EST (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tamas Miklossy CLA 2018-01-16 09:39:58 EST
Step to reproduce (Reproducible with Sirius 5.1.0 NEON):
1. Create a maven project and Sirius model files in it.
2. Open the Sirius graphical editor.
3. Execute maven eclipse:eclipse while the editor is still open.
4. As soon as the maven execution finishes (and the external change event has been processed by the Sirius framework), the following NPE is thrown when refreshing the diagram:

Caused by: java.lang.NullPointerException
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.setLayoutConstraint(AbstractGraphicalEditPart.java:929)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeEditPart.refreshBounds(ShapeEditPart.java:197)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart.refreshBounds(AbstractDiagramElementContainerEditPart.java:405)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeEditPart.refreshVisuals(ShapeEditPart.java:205)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart.refreshVisuals(AbstractDiagramElementContainerEditPart.java:373)
	at org.eclipse.gef.editparts.AbstractEditPart.refresh(AbstractEditPart.java:725)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.refresh(AbstractGraphicalEditPart.java:644)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.access$3(GraphicalEditPart.java:1)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart$3.run(GraphicalEditPart.java:861)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:328)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.refresh(GraphicalEditPart.java:851)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart.refresh(AbstractDiagramElementContainerEditPart.java:228)
	at org.eclipse.gef.editparts.AbstractEditPart.addNotify(AbstractEditPart.java:253)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.addNotify(AbstractGraphicalEditPart.java:223)
	at org.eclipse.gef.editparts.AbstractEditPart.addChild(AbstractEditPart.java:212)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.addChild(GraphicalEditPart.java:1319)
	at org.eclipse.gef.editparts.AbstractEditPart.refreshChildren(AbstractEditPart.java:781)
	at org.eclipse.gef.editparts.AbstractEditPart.refresh(AbstractEditPart.java:726)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.refresh(AbstractGraphicalEditPart.java:644)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.access$3(GraphicalEditPart.java:1)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart$3.run(GraphicalEditPart.java:861)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:328)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.refresh(GraphicalEditPart.java:851)
	at org.eclipse.gef.editparts.AbstractEditPart.addNotify(AbstractEditPart.java:253)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.addNotify(AbstractGraphicalEditPart.java:223)
	at org.eclipse.gef.editparts.AbstractEditPart.addChild(AbstractEditPart.java:212)
	at org.eclipse.gef.editparts.SimpleRootEditPart.setContents(SimpleRootEditPart.java:105)
	at org.eclipse.gef.ui.parts.AbstractEditPartViewer.setContents(AbstractEditPartViewer.java:617)
	at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramGraphicalViewer.setContents(DiagramGraphicalViewer.java:352)
	at org.eclipse.gef.ui.parts.AbstractEditPartViewer.setContents(AbstractEditPartViewer.java:626)
	at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor.initializeGraphicalViewerContents(DiagramEditor.java:872)
	at org.eclipse.sirius.diagram.ui.tools.internal.editor.DDiagramEditorImpl.initializeGraphicalViewerContents(DDiagramEditorImpl.java:1481)
	at org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor.doSetInput(DiagramDocumentEditor.java:483)
	at org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor.setInput(DiagramDocumentEditor.java:427)
	at org.eclipse.sirius.diagram.ui.tools.internal.editor.DDiagramEditorImpl.setInput(DDiagramEditorImpl.java:1784)
	at org.eclipse.sirius.diagram.ui.tools.internal.editor.DDiagramEditorSessionListenerDelegate.run(DDiagramEditorSessionListenerDelegate.java:126)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182)
	... 24 more

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:11.591
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:11.591
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:11.908
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:11.908
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:11.921
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:11.922
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:11.943
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:11.944
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:11.960
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:11.961
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:12.025
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:12.026
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:12.074
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode

!ENTRY org.eclipse.gmf.runtime.draw2d.ui 2 2 2018-01-16 15:27:12.074
!MESSAGE MapModeUtil#getMapMode(IFigure fig) fig parameter must be attached to a parent - using default MapMode
Comment 1 Julien Dupont CLA 2018-01-16 11:08:21 EST
Hi Tamas, 

Could you join a use case to reproduce?
Thanks.

Regards,
Comment 2 Tamas Miklossy CLA 2018-01-26 07:59:44 EST
When trying to reproduce the problem, I got another exception when external resources has been changed. Maybe this helps you further localizing the problem:

!ENTRY org.eclipse.ui 4 0 2018-01-26 13:55:34.094
!MESSAGE Unhandled event loop exception
!STACK 0
org.eclipse.swt.SWTException: Failed to execute runnable (java.util.ConcurrentModificationException)
	at org.eclipse.swt.SWT.error(SWT.java:4533)
	at org.eclipse.swt.SWT.error(SWT.java:4448)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4211)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3827)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:693)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:610)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:138)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1519)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1492)
Caused by: java.util.ConcurrentModificationException
	at org.eclipse.emf.common.util.ArrayDelegatingEList$EIterator.checkModCount(ArrayDelegatingEList.java:887)
	at org.eclipse.emf.common.util.AbstractEList$EIterator.doNext(AbstractEList.java:712)
	at org.eclipse.emf.common.util.AbstractEList$EIterator.next(AbstractEList.java:692)
	at java.util.AbstractCollection.addAll(AbstractCollection.java:343)
	at java.util.LinkedHashSet.<init>(LinkedHashSet.java:169)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:380)
	at org.eclipse.sirius.business.internal.session.SessionTransientAttachment.getSessionTransientAttachement(SessionTransientAttachment.java:72)
	at org.eclipse.sirius.business.internal.session.SessionManagerImpl.getSession(SessionManagerImpl.java:196)
	at org.eclipse.sirius.business.api.query.EObjectQuery.getSession(EObjectQuery.java:257)
	at org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramElementEditPartOperation.removeNavigateDecoratorRefresher(DiagramElementEditPartOperation.java:343)
	at org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramElementEditPartOperation.deactivate(DiagramElementEditPartOperation.java:372)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractBorderedDiagramElementEditPart.deactivate(AbstractBorderedDiagramElementEditPart.java:207)
	at org.eclipse.sirius.diagram.ui.internal.edit.parts.DNodeEditPart.deactivate(DNodeEditPart.java:107)
	at org.eclipse.gef.editparts.AbstractEditPart.deactivate(AbstractEditPart.java:293)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.deactivate(AbstractGraphicalEditPart.java:354)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.deactivate(GraphicalEditPart.java:315)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDDiagramEditPart.deactivate(AbstractDDiagramEditPart.java:383)
	at org.eclipse.sirius.diagram.ui.internal.edit.parts.DDiagramEditPart.deactivate(DDiagramEditPart.java:98)
	at org.eclipse.sirius.diagram.ui.tools.internal.editor.DDiagramEditorSessionListenerDelegate.run(DDiagramEditorSessionListenerDelegate.java:126)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182)
	... 24 more
Comment 3 Pierre-Charles David CLA 2018-01-26 09:20:25 EST
Thanks for the feedback. We've planned to work on the general issue of stability with regard to resources/files life-cycle for Sirius 6 and later (bug #470457 is the top-level ticket). This particular issue was added to the scope of concrete issues to look at when we'll tackle this particular subject. I can't guarantee it will get fixed in 6.0, but it will be analysed as part of this effort.