Bug 564625 - Pb when modifying a sequence diagram description with a sequence diagram opened
Summary: Pb when modifying a sequence diagram description with a sequence diagram opened
Status: NEW
Alias: None
Product: Sirius
Classification: Modeling
Component: Diagram (show other bugs)
Version: 6.3.0   Edit
Hardware: PC Windows 10
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: triaged
Depends on:
Blocks:
 
Reported: 2020-06-24 11:30 EDT by Laurent Redor CLA
Modified: 2021-05-05 09:32 EDT (History)
1 user (show)

See Also:


Attachments
InteractionSample.zip (13.89 KB, application/x-zip-compressed)
2020-06-24 11:30 EDT, Laurent Redor CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Laurent Redor CLA 2020-06-24 11:30:44 EDT
Created attachment 283394 [details]
InteractionSample.zip

This problem has been detected during the validation of Sirius 6.3.2 but the problem has been partially reproducted at least in Sirius 6.3.0.
The problem is not systematic but one of this 3 problems have been observed several times with the scenario :
* NullPointerException: see stack below
* ConcurrentModificationException: see stack below
* VSM reload without stack (reproducted also in Sirius 6.3.0): There is no stack but only these messages in Error Log view
    * Warning: Resource was re-loaded while it was being unloaded, probably because of unintentional proxy resolution: platform:/resource/org.eclipse.sirius.sample.interactions.design/description/interaction.odesign
	* Error: Read-only transaction rolled back
	    * Error: Transaction aborted due to concurrent write

java.lang.NullPointerException
	at org.eclipse.gmf.runtime.diagram.ui.internal.figures.BorderItemContainerFigure.getViewportBounds(BorderItemContainerFigure.java:278)
	at org.eclipse.gmf.runtime.diagram.ui.internal.figures.BorderItemContainerFigure.getVisibleExtendedBounds(BorderItemContainerFigure.java:262)
	at org.eclipse.gmf.runtime.diagram.ui.internal.figures.BorderItemContainerFigure.paintClientArea(BorderItemContainerFigure.java:78)
	at org.eclipse.draw2d.Figure.paint(Figure.java:1120)
	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1170)
	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1205)
	at org.eclipse.draw2d.Figure.paint(Figure.java:1120)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart$1.paint(AbstractDiagramElementContainerEditPart.java:537)
	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1170)
	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1205)
	at org.eclipse.draw2d.Figure.paint(Figure.java:1120)
	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1170)
	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1205)
	at org.eclipse.draw2d.Figure.paint(Figure.java:1120)
	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1170)
	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1205)
	at org.eclipse.draw2d.Figure.paint(Figure.java:1120)
	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1170)
	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1205)
	at org.eclipse.draw2d.ScalableFreeformLayeredPane.paintClientArea(ScalableFreeformLayeredPane.java:60)
	at org.eclipse.gmf.runtime.draw2d.ui.internal.graphics.ScalableFreeformLayeredPane.paintClientArea(ScalableFreeformLayeredPane.java:82)
	at org.eclipse.draw2d.Figure.paint(Figure.java:1120)
	at org.eclipse.draw2d.parts.Thumbnail$ThumbnailUpdater.run(Thumbnail.java:195)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3919)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3550)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:168)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:370)
	at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:469)
	at org.eclipse.sirius.editor.tools.internal.presentation.CustomSiriusEditor.doSave(CustomSiriusEditor.java:511)


java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
	at java.util.ArrayList$Itr.next(Unknown Source)
	at org.eclipse.gmf.runtime.diagram.ui.figures.BorderItemsAwareFreeFormLayer.getBounds(BorderItemsAwareFreeFormLayer.java:163)
	at org.eclipse.draw2d.Figure.getClientArea(Figure.java:616)
	at org.eclipse.draw2d.Figure.getClientArea(Figure.java:627)
	at org.eclipse.gmf.runtime.diagram.ui.internal.figures.BorderItemContainerFigure.getViewportBounds(BorderItemContainerFigure.java:277)
	at org.eclipse.gmf.runtime.diagram.ui.internal.figures.BorderItemContainerFigure.getVisibleExtendedBounds(BorderItemContainerFigure.java:262)
	at org.eclipse.gmf.runtime.diagram.ui.internal.figures.BorderItemContainerFigure.paintClientArea(BorderItemContainerFigure.java:78)
	at org.eclipse.draw2d.Figure.paint(Figure.java:1120)
	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1170)
	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1205)
	at org.eclipse.draw2d.Figure.paint(Figure.java:1120)
	at org.eclipse.sirius.diagram.ui.internal.edit.parts.DNodeEditPart$3.paint(DNodeEditPart.java:213)
	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1170)
	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1205)
	at org.eclipse.draw2d.Figure.paint(Figure.java:1120)
	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1170)
	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1205)
	at org.eclipse.draw2d.Figure.paint(Figure.java:1120)
	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1170)
	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1205)
	at org.eclipse.draw2d.Figure.paint(Figure.java:1120)
	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1170)
	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1205)
	at org.eclipse.draw2d.ScalableFreeformLayeredPane.paintClientArea(ScalableFreeformLayeredPane.java:60)
	at org.eclipse.gmf.runtime.draw2d.ui.internal.graphics.ScalableFreeformLayeredPane.paintClientArea(ScalableFreeformLayeredPane.java:82)
	at org.eclipse.draw2d.Figure.paint(Figure.java:1120)
	at org.eclipse.draw2d.parts.Thumbnail$ThumbnailUpdater.run(Thumbnail.java:195)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3919)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3550)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:168)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:370)
	at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:469)
	at org.eclipse.sirius.editor.tools.internal.presentation.CustomSiriusEditor.doSave(CustomSiriusEditor.java:511)
	
Steps to reproduce:
* Import the project "org.eclipse.sirius.sample.interactions.design" from the source code of Sirius
* Import the project "Interaction" from InteractionSample.zip
* Open the VSM
* Open the diagram
* In the VSM
    * Expand "Interaction Use Interaction Use" 
	* Delete its style
	* Add a new Parallelogram style 
	* Expand "Combined Fragment Combined Fragment" 
	* Delete its style
	* Add a new Parallelogram style 
	* Save
* "Expected": Error has been reported in Error Log view. If it is not the case, you can refresh the diagram, modify again the style and save (until you have the problem).

This problem is maybe linked to the ResourceSetListener refreshZorder in SequenceDiagramEditPart. It has been observed in the following stack (that finally throws a ThumbnailUpdater):
    SiriusDiagramGraphicalViewer$ToggleUpdateManager.sendUpdateRequest() line: 170    
    SiriusDiagramGraphicalViewer$ToggleUpdateManager(DeferredUpdateManager).queueWork() line: 247    
    SiriusDiagramGraphicalViewer$ToggleUpdateManager.queueWork() line: 270    
    SiriusDiagramGraphicalViewer$ToggleUpdateManager(DeferredUpdateManager).addInvalidFigure(IFigure) line: 133    
    LightweightSystem$RootFigure(Figure).revalidate() line: 1451    
    FreeformViewport(Figure).revalidate() line: 1453    
    FreeformHelper.invalidate() line: 75    
    FreeformHelper.notifyFreeformExtentChanged() line: 83    
    RenderedDiagramRootEditPart$DiagramRenderedScalableFreeformLayeredPane(FreeformLayeredPane).fireExtentChanged() line: 52    
    FreeformHelper.invalidate() line: 73    
    FreeformHelper.notifyFreeformExtentChanged() line: 83    
    FreeformLayeredPane.fireExtentChanged() line: 52    
    FreeformHelper.invalidate() line: 73    
    FreeformHelper.notifyFreeformExtentChanged() line: 83    
    BorderItemsAwareFreeFormLayer(FreeformLayer).fireExtentChanged() line: 45    
    FreeformHelper.invalidate() line: 73    
    FreeformHelper.notifyFreeformExtentChanged() line: 83    
    DiagramEditPart$1(FreeformLayer).fireExtentChanged() line: 45    
    BorderItemsAwareFreeFormLayer$BorderItemAwareFreeFormHelper.invalidate() line: 123    
    BorderItemsAwareFreeFormLayer$BorderItemAwareFreeFormHelper.unhookChild(IFigure) line: 148    
    DiagramEditPart$1(BorderItemsAwareFreeFormLayer).remove(IFigure) line: 206    
    SequenceDiagramEditPart(AbstractGraphicalEditPart).removeChildVisual(EditPart) line: 792    
    SequenceDiagramEditPart(AbstractEditPart).reorderChild(EditPart, int) line: 962    
    SequenceDiagramEditPart(AbstractGraphicalEditPart).reorderChild(EditPart, int) line: 878    
    SequenceDiagramEditPart.reorderChild(EditPart, int) line: 288    
    SequenceZOrderingRefresher.moveParts(Class<IGraphicalEditPart>, boolean, Function<IGraphicalEditPart,Integer>) line: 103    
    SequenceZOrderingRefresher.moveInteractionUsesToFront() line: 65    
    SequenceZOrderingRefresher.run() line: 55    
    SequenceDiagramEditPart$1.resourceSetChanged(ResourceSetChangeEvent) line: 90    
    TransactionalEditingDomainImpl$1.run() line: 781    
    TransactionalEditingDomainImpl.runExclusive(Runnable) line: 328    
    TransactionalEditingDomainImpl.postcommit(InternalTransaction) line: 771    
    TransactionalEditingDomainImpl.deactivate(InternalTransaction) line: 543    
    TransactionImpl.close() line: 712    
...
    DescriptionResourceImpl(BasicNotifierImpl).eNotify(Notification) line: 424    
    DescriptionResourceImpl(ResourceImpl).unload() line: 1728    
    ViewpointRegistryImpl.unloadInExistingSessions(String, boolean) line: 913    
    ViewpointRegistryImpl.unloadInExistingSessions(IFile, boolean) line: 902    
    ViewpointRegistryImpl.reloadFile(IFile) line: 892    
    ViewpointRegistryImpl.invalidateCacheAndReloadFile(IFile) line: 821    
    ViewpointRegistryImpl.refreshWorkspaceComponents(IResourceDelta) line: 763    
    ViewpointRegistryImpl.refreshWorkspaceComponents(IResourceDelta) line: 777    
    ViewpointRegistryImpl.refreshWorkspaceComponents(IResourceDelta) line: 777    
    ViewpointRegistryImpl.refreshWorkspaceComponents(IResourceDelta) line: 777    
    ViewpointRegistryImpl.resourceChanged(IResourceChangeEvent) line: 725