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

Bug 576722

Summary: Potential regression since z-order for unsynchronized diagrams
Product: [Modeling] Sirius Reporter: Laurent Redor <laurent.redor>
Component: DiagramAssignee: Laurent Redor <laurent.redor>
Status: CLOSED FIXED QA Contact:
Severity: major    
Priority: P3    
Version: unspecified   
Target Milestone: 6.6.0   
Hardware: PC   
OS: Windows 10   
See Also: https://git.eclipse.org/r/c/sirius/org.eclipse.sirius/+/186649
https://git.eclipse.org/c/sirius/org.eclipse.sirius.git/commit/?id=1e964cb7d05951ad3b52c832206403ef03e386e1
Whiteboard:
Bug Depends on:    
Bug Blocks: 574273, 577025    
Attachments:
Description Flags
IFE-5.2.zip
none
tc2330.zip none

Description Laurent Redor CLA 2021-10-19 05:14:31 EDT
Created attachment 287344 [details]
IFE-5.2.zip

This problem has been discovered in Capella. There is currently no reproduction use case with a simple Sirius viewpoint. The Capella scenario needs to be analysed.

Steps to reproduce:
* Import IFE project (from IFE-5.2.zip)
* Open "\[PAB] Focus on Network Transport" (under "In-Flight Entertainment System\Physical Architecture\Structure\IFE System")
* Synchronize the diagram (by clicking on contextual menu "Unsynchronized")
* Add a functional exchange between "Synchronize Audio Video" and "Initiate Audio-Video Stream"
* The following error is thrown: Uncaught exception during post-commit listener notifications

java.lang.IndexOutOfBoundsException: Index does not exist
	at org.eclipse.draw2d.Figure.add(Figure.java:140)
	at org.eclipse.draw2d.FreeformLayer.add(FreeformLayer.java:28)
	at org.eclipse.draw2d.ConnectionLayer.add(ConnectionLayer.java:43)
	at org.eclipse.gmf.runtime.draw2d.ui.internal.figures.ConnectionLayerEx.add(ConnectionLayerEx.java:53)
	at org.eclipse.draw2d.Figure.add(Figure.java:185)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDDiagramEditPart.reorderEdgesFiguresAccordingToGmfOrder(AbstractDDiagramEditPart.java:356)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDDiagramEditPart.refreshChildren(AbstractDDiagramEditPart.java:326)
	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:862)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:328)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.refresh(GraphicalEditPart.java:852)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDDiagramEditPart.handleNotificationEvent(AbstractDDiagramEditPart.java:235)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.notifyChanged(GraphicalEditPart.java:1436)
	at org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBroker.fireNotification(DiagramEventBroker.java:505)
	at org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBroker.resourceSetChanged(DiagramEventBroker.java:400)
	at org.eclipse.gmf.runtime.diagram.ui.DiagramEventBrokerThreadSafe.resourceSetChanged(DiagramEventBrokerThreadSafe.java:74)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl$1.run(TransactionalEditingDomainImpl.java:781)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:328)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.postcommit(TransactionalEditingDomainImpl.java:771)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.deactivate(TransactionalEditingDomainImpl.java:543)
	at org.eclipse.emf.transaction.impl.TransactionImpl.close(TransactionImpl.java:712)
	at org.eclipse.emf.transaction.impl.TransactionImpl.commit(TransactionImpl.java:474)
	at org.eclipse.emf.workspace.AbstractEMFOperation.execute(AbstractEMFOperation.java:155)
	at org.eclipse.gmf.runtime.common.core.command.CompositeCommand.doExecuteWithResult(CompositeCommand.java:404)
	at org.eclipse.gmf.runtime.common.core.command.AbstractCommand.execute(AbstractCommand.java:135)
	at org.eclipse.sirius.diagram.ui.tools.internal.commands.WrappingCommandIgnoringAffectedFiles.execute(WrappingCommandIgnoringAffectedFiles.java:125)
	at org.eclipse.core.commands.operations.DefaultOperationHistory.execute(DefaultOperationHistory.java:496)
	at org.eclipse.sirius.diagram.ui.tools.internal.editor.DDiagramCommandStack.execute(DDiagramCommandStack.java:73)
	at org.eclipse.sirius.diagram.ui.tools.internal.editor.DDiagramCommandStack.execute(DDiagramCommandStack.java:54)
	at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramCommandStack.execute(DiagramCommandStack.java:157)
	at org.eclipse.gef.tools.AbstractTool.executeCommand(AbstractTool.java:425)
	at org.eclipse.gef.tools.AbstractTool.executeCurrentCommand(AbstractTool.java:438)
	at org.eclipse.gef.tools.AbstractConnectionCreationTool.handleCreateConnection(AbstractConnectionCreationTool.java:256)
	at org.eclipse.gef.tools.ConnectionCreationTool.handleButtonDown(ConnectionCreationTool.java:77)
	at org.eclipse.gef.tools.AbstractTool.mouseDown(AbstractTool.java:1091)
Comment 1 Laurent Redor CLA 2021-10-19 05:15:16 EDT
The bug 574273 has been reopened because of this issue.
Comment 2 Eclipse Genie CLA 2021-10-19 05:48:45 EDT
New Gerrit change created: https://git.eclipse.org/r/c/sirius/org.eclipse.sirius/+/186649
Comment 4 Laurent Redor CLA 2021-10-20 09:00:31 EDT
The remaining work concerns the automatic tests and the definition of use case in Sirius (not with Capella).
Comment 5 Laurent Redor CLA 2021-11-03 03:52:32 EDT
For information, the tests from org.eclipse.sirius.tests.swtbot.HideRevealDiagramElementsLabelsTestWithOldUI fail randomly. Each time one of them fails, there is an error in Error Log view with a similar stack:

java.lang.IndexOutOfBoundsException: Index does not exist
	at org.eclipse.draw2d.Figure.add(Figure.java:140)
	at org.eclipse.draw2d.FreeformLayer.add(FreeformLayer.java:28)
	at org.eclipse.draw2d.ConnectionLayer.add(ConnectionLayer.java:43)
	at org.eclipse.gmf.runtime.draw2d.ui.internal.figures.ConnectionLayerEx.add(ConnectionLayerEx.java:53)
	at org.eclipse.draw2d.Figure.add(Figure.java:185)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDDiagramEditPart.reorderEdgesFiguresAccordingToGmfOrder(AbstractDDiagramEditPart.java:355)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDDiagramEditPart.refreshChildren(AbstractDDiagramEditPart.java:327)
	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:863)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:328)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.refresh(GraphicalEditPart.java:853)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart.refreshEditPart(AbstractDiagramElementContainerEditPart.java:199)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart.handleNotificationEvent(AbstractDiagramElementContainerEditPart.java:159)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramContainerEditPart.handleNotificationEvent(AbstractDiagramContainerEditPart.java:274)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.notifyChanged(GraphicalEditPart.java:1437)
	at org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBroker.fireNotification(DiagramEventBroker.java:505)
	at org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBroker.resourceSetChanged(DiagramEventBroker.java:400)
	at org.eclipse.gmf.runtime.diagram.ui.DiagramEventBrokerThreadSafe.resourceSetChanged(DiagramEventBrokerThreadSafe.java:74)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl$1.run(TransactionalEditingDomainImpl.java:781)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:328)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.postcommit(TransactionalEditingDomainImpl.java:771)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.deactivate(TransactionalEditingDomainImpl.java:543)
	at org.eclipse.emf.transaction.impl.TransactionImpl.close(TransactionImpl.java:712)
	at org.eclipse.emf.transaction.impl.TransactionImpl.commit(TransactionImpl.java:474)
	at org.eclipse.emf.workspace.AbstractEMFOperation.execute(AbstractEMFOperation.java:155)
	at org.eclipse.core.commands.operations.DefaultOperationHistory.execute(DefaultOperationHistory.java:496)
	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.handler.ChangeFilterActivation.run(ChangeFilterActivation.java:72)
	at org.eclipse.sirius.diagram.ui.tools.internal.views.providers.filters.FiltersCellModifier.modify(FiltersCellModifier.java:126)
...
Comment 6 Laurent Redor CLA 2021-11-03 13:31:05 EDT
Steps to reproduce:
* Import the modeling project tc2330 from tc2330.zip
* Open the diagram "new 2330 Diagram"
* Activate the filter "port collapse" (with tabbar filter drop down menu)
* Expected: The "red" ports are no longer visible.
* Deactivate the filter "port collapse" (with tabbar filter drop down menu)
* Expected: The "red" ports and associated edges are visible.
    * But is "Only one red port is visible and no edge is visible. There is an IndexOutOfBoundsException in Error Log view".
	
These steps to reproduce are extracted from tests of class org.eclipse.sirius.tests.swtbot.HideRevealDiagramElementsLabelsTestWithOldUI that fail randomly. After the above fix the automatic tests are OK.
Comment 7 Laurent Redor CLA 2021-11-03 13:31:25 EDT
Created attachment 287438 [details]
tc2330.zip
Comment 8 Pierre-Charles David CLA 2021-12-10 04:07:02 EST
Available in Sirius 6.6.0: https://projects.eclipse.org/projects/modeling.sirius/releases/6.6.0