Bug 473652 - IndexOutOfBoundsException on connection endpoint move
Summary: IndexOutOfBoundsException on connection endpoint move
Status: NEW
Alias: None
Product: Sirius
Classification: Modeling
Component: Diagram (show other bugs)
Version: 3.0.0   Edit
Hardware: PC Linux
: P3 major (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard: backport
Keywords: triaged
Depends on:
Blocks:
 
Reported: 2015-07-27 08:41 EDT by Esteban DUGUEPEROUX CLA
Modified: 2015-07-28 03:16 EDT (History)
1 user (show)

See Also:


Attachments
Sample project (7.70 KB, application/zip)
2015-07-27 08:41 EDT, Esteban DUGUEPEROUX CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Esteban DUGUEPEROUX CLA 2015-07-27 08:41:52 EDT
Created attachment 255454 [details]
Sample project

With the following scenario I get the following exception :

1. Import the project in attachment
2. Open the diagram
3. try to reconnect an edge with bracket style without changing target, only try to change anchor, KO : 
After this exception the editor is no more usable, a reopen is needed.

org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.IndexOutOfBoundsException: Index: -1, Size: 0)
	at org.eclipse.swt.SWT.error(SWT.java:4361)
	at org.eclipse.swt.SWT.error(SWT.java:4276)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:138)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3537)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3189)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
	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.equinox.launcher.Main.invokeFramework(Main.java:629)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
Caused by: java.lang.IndexOutOfBoundsException: Index: -1, Size: 0
	at org.eclipse.draw2d.geometry.PointList.getPoint(PointList.java:194)
	at org.eclipse.draw2d.geometry.PointList.getMidpoint(PointList.java:177)
	at org.eclipse.sirius.diagram.ui.business.internal.bracket.locators.BracketResizableLabelLocator.getReferencePoint(BracketResizableLabelLocator.java:61)
	at org.eclipse.gmf.runtime.diagram.ui.internal.figures.ResizableLabelLocator.relocate(ResizableLabelLocator.java:48)
	at org.eclipse.gmf.runtime.draw2d.ui.internal.figures.DelegatingLayout.layout(DelegatingLayout.java:43)
	at org.eclipse.draw2d.Figure.layout(Figure.java:1093)
	at org.eclipse.draw2d.PolylineConnection.layout(PolylineConnection.java:179)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramEdgeEditPart$ViewEdgeFigure.layout(AbstractDiagramEdgeEditPart.java:589)
	at org.eclipse.draw2d.Figure.validate(Figure.java:1896)
	at org.eclipse.draw2d.Figure.validate(Figure.java:1898)
	at org.eclipse.draw2d.Figure.validate(Figure.java:1898)
	at org.eclipse.draw2d.Figure.validate(Figure.java:1898)
	at org.eclipse.draw2d.Figure.validate(Figure.java:1898)
	at org.eclipse.draw2d.FreeformViewport$FreeformViewportLayout.calculatePreferredSize(FreeformViewport.java:25)
	at org.eclipse.draw2d.AbstractLayout.getPreferredSize(AbstractLayout.java:110)
	at org.eclipse.draw2d.AbstractHintLayout.getPreferredSize(AbstractHintLayout.java:90)
	at org.eclipse.draw2d.Figure.getPreferredSize(Figure.java:807)
	at org.eclipse.draw2d.ScrollPaneSolver.solve(ScrollPaneSolver.java:82)
	at org.eclipse.draw2d.FigureCanvas.layoutViewport(FigureCanvas.java:325)
	at org.eclipse.draw2d.FigureCanvas.access$4(FigureCanvas.java:323)
	at org.eclipse.draw2d.FigureCanvas$3.notifyValidating(FigureCanvas.java:292)
	at org.eclipse.draw2d.UpdateManager.fireValidating(UpdateManager.java:143)
	at org.eclipse.sirius.diagram.ui.tools.internal.part.SiriusDiagramGraphicalViewer$ToggleUpdateManager.performValidation(SiriusDiagramGraphicalViewer.java:213)
	at org.eclipse.draw2d.DeferredUpdateManager.performUpdate(DeferredUpdateManager.java:190)
	at org.eclipse.sirius.diagram.ui.tools.internal.part.SiriusDiagramGraphicalViewer$ToggleUpdateManager.performUpdate(SiriusDiagramGraphicalViewer.java:197)
	at org.eclipse.draw2d.DeferredUpdateManager$UpdateRequest.run(DeferredUpdateManager.java:44)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
	... 23 more
Comment 1 Esteban DUGUEPEROUX CLA 2015-07-27 08:46:36 EDT
The bug is not reproductible with dataset from BracketEdgeTests, i.e. /org.eclipse.sirius.tests.swtbot/data/unit/bracketEdge/VP-3092.aird. Perhaps because in VP-3092.aird edge endpoints are container in list and this this failing case it is simple node.
Comment 2 Esteban DUGUEPEROUX CLA 2015-07-27 08:53:39 EDT
On v2.0.x branch we have a different exception :

java.lang.ClassCastException: org.eclipse.draw2d.RelativeBendpoint cannot be cast to org.eclipse.sirius.diagram.ui.business.internal.bracket.BracketRelativeBendpoint
	at org.eclipse.sirius.diagram.ui.business.internal.bracket.BracketConnectionQuery.getPointListFromConstraint(BracketConnectionQuery.java:528)
	at org.eclipse.sirius.diagram.ui.tools.internal.routers.BracketConnectionRouter.route(BracketConnectionRouter.java:87)
	at org.eclipse.draw2d.PolylineConnection$RoutingNotifier.route(PolylineConnection.java:371)
	at org.eclipse.draw2d.PolylineConnection.layout(PolylineConnection.java:176)
	at org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramEdgeEditPart$ViewEdgeFigure.layout(AbstractDiagramEdgeEditPart.java:733)
	at org.eclipse.draw2d.Figure.validate(Figure.java:1896)
	at org.eclipse.draw2d.Figure.validate(Figure.java:1898)
	at org.eclipse.draw2d.Figure.validate(Figure.java:1898)
	at org.eclipse.draw2d.Figure.validate(Figure.java:1898)
	at org.eclipse.draw2d.Figure.validate(Figure.java:1898)
	at org.eclipse.draw2d.FreeformViewport$FreeformViewportLayout.calculatePreferredSize(FreeformViewport.java:25)
	at org.eclipse.draw2d.AbstractLayout.getPreferredSize(AbstractLayout.java:110)
	at org.eclipse.draw2d.AbstractHintLayout.getPreferredSize(AbstractHintLayout.java:90)
	at org.eclipse.draw2d.Figure.getPreferredSize(Figure.java:807)
	at org.eclipse.draw2d.ScrollPaneSolver.solve(ScrollPaneSolver.java:82)
	at org.eclipse.draw2d.FigureCanvas.layoutViewport(FigureCanvas.java:325)
	at org.eclipse.draw2d.FigureCanvas.access$4(FigureCanvas.java:323)
	at org.eclipse.draw2d.FigureCanvas$3.notifyValidating(FigureCanvas.java:292)
	at org.eclipse.draw2d.UpdateManager.fireValidating(UpdateManager.java:143)
	at org.eclipse.sirius.diagram.ui.tools.internal.part.SiriusDiagramGraphicalViewer$ToggleUpdateManager.performValidation(SiriusDiagramGraphicalViewer.java:213)
	at org.eclipse.draw2d.DeferredUpdateManager.paint(DeferredUpdateManager.java:167)
	at org.eclipse.draw2d.LightweightSystem.paint(LightweightSystem.java:203)
	at org.eclipse.draw2d.LightweightSystem$2.handleEvent(LightweightSystem.java:110)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4481)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1327)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1351)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1336)
	at org.eclipse.swt.widgets.Control.gtk_expose_event(Control.java:3242)
	at org.eclipse.swt.widgets.Composite.gtk_expose_event(Composite.java:752)
	at org.eclipse.swt.widgets.Canvas.gtk_expose_event(Canvas.java:181)
	at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1958)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:5590)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4717)
	at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method)
	at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:9272)
	at org.eclipse.swt.widgets.Display.eventProc(Display.java:1225)
	at org.eclipse.swt.internal.gtk.OS._gdk_window_process_all_updates(Native Method)
	at org.eclipse.swt.internal.gtk.OS.gdk_window_process_all_updates(OS.java:5981)
	at org.eclipse.swt.widgets.Display.update(Display.java:4669)
	at org.eclipse.swt.widgets.Display.runDeferredLayouts(Display.java:3845)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3417)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:654)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:598)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:139)
	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:380)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
	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.equinox.launcher.Main.invokeFramework(Main.java:669)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1515)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1488)
Comment 3 Esteban DUGUEPEROUX CLA 2015-07-27 09:11:52 EDT
This bug doesn't occurs on v1.0.x.
Comment 4 Esteban DUGUEPEROUX CLA 2015-07-27 09:44:31 EDT
This is a regression from commit a5a939dfbe69c07ac1b2fc5b6bb5422b9b30adbf [437095] Update command and feedback on terminal bendpoint move to only
move the last segment on Sirius 2.0