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

Bug 353680

Summary: NPE occurs in DiagramDeleteActionHandler if there are connections with dangling endpoints
Product: z_Archived Reporter: Shenxue Zhou <shenxue.zhou>
Component: SapphireAssignee: Shenxue Zhou <shenxue.zhou>
Status: CLOSED FIXED QA Contact:
Severity: major    
Priority: P3 CC: konstantin, raj.alagumalai
Version: unspecified   
Target Milestone: ---   
Hardware: All   
OS: All   
Whiteboard:
Attachments:
Description Flags
Fix the NPE none

Description Shenxue Zhou CLA 2011-08-02 17:01:19 EDT
When deleting a diagram node, we also try to delete incoming/outgoing connections associated with the node. If a connection part has null endpoints, we'd get NPE with the following stack trace:

java.lang.NullPointerException
	at
org.eclipse.sapphire.ui.diagram.actions.DiagramDeleteActionHandler.deleteNodeC
onnections(DiagramDeleteActionHandler.java:125)
	at
org.eclipse.sapphire.ui.diagram.actions.DiagramDeleteActionHandler.run(Diagram
DeleteActionHandler.java:71)
	at
org.eclipse.sapphire.ui.SapphireActionHandler.execute(SapphireActionHandler.ja
va:89)
	at
org.eclipse.sapphire.ui.swt.graphiti.actions.SapphireActionHandlerDelegate.run
(SapphireActionHandlerDelegate.java:89)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
	at
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionCo
ntributionItem.java:584)
	at
org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionIte
m.java:501)
	at
org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributi
onItem.java:411)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
	at
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at
org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.ja
va:123)
	at
org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:19
6)
	at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(Ec
lipseAppLauncher.java:110)
	at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppL
auncher.java:79)
	at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
	at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.j
ava:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
 
java.lang.NullPointerException
	at
org.eclipse.sapphire.ui.diagram.actions.DiagramDeleteActionHandler.deleteNodeC
onnections(DiagramDeleteActionHandler.java:125)
	at
org.eclipse.sapphire.ui.diagram.actions.DiagramDeleteActionHandler.run(Diagram
DeleteActionHandler.java:71)
	at
org.eclipse.sapphire.ui.SapphireActionHandler.execute(SapphireActionHandler.ja
va:89)
	at
org.eclipse.sapphire.ui.swt.graphiti.features.SapphireDeleteFeature.deleteBusi
nessObject(SapphireDeleteFeature.java:84)
	at
@ org.eclipse.graphiti.ui.features.DefaultDeleteFeature.deleteBusinessObjects(De
@ faultDeleteFeature.java:112)
	at
org.eclipse.sapphire.ui.swt.graphiti.features.SapphireDeleteFeature.delete(Sap
phireDeleteFeature.java:69)
	at
@ org.eclipse.graphiti.ui.features.DefaultDeleteFeature.execute(DefaultDeleteFea
ture.java:145)
	at
org.eclipse.graphiti.internal.command.GenericFeatureCommandWithContext.execute
(GenericFeatureCommandWithContext.java:64)
	at
org.eclipse.graphiti.internal.command.CommandContainer.execute(CommandContaine
r.java:81)
	at
org.eclipse.graphiti.ui.internal.command.GefCommandWrapper.execute(GefCommandW
rapper.java:51)
	at
org.eclipse.graphiti.ui.internal.editor.EmfOnGefCommand.execute(EmfOnGefComman
d.java:59)
	at
org.eclipse.graphiti.internal.command.GFPreparableCommand2.doExecute(GFPrepara
bleCommand2.java:37)
	at
org.eclipse.emf.transaction.RecordingCommand.execute(RecordingCommand.java:135
)
	at
org.eclipse.emf.workspace.EMFCommandOperation.doExecute(EMFCommandOperation.ja
va:119)
	at
org.eclipse.emf.workspace.AbstractEMFOperation.execute(AbstractEMFOperation.ja
va:150)
	at
org.eclipse.core.commands.operations.DefaultOperationHistory.execute(DefaultOp
erationHistory.java:513)
	at
org.eclipse.emf.workspace.impl.WorkspaceCommandStackImpl.doExecute(WorkspaceCo
mmandStackImpl.java:208)
	at
org.eclipse.emf.transaction.impl.AbstractTransactionalCommandStack.execute(Abs
tractTransactionalCommandStack.java:165)
	at
org.eclipse.graphiti.ui.internal.editor.GFWorkspaceCommandStackImpl.execute(GF
WorkspaceCommandStackImpl.java:71)
	at
org.eclipse.graphiti.ui.internal.editor.GFCommandStack.execute(GFCommandStack.
java:108)
	at
org.eclipse.graphiti.ui.internal.action.AbstractPreDefinedAction.executeOnComm
andStack(AbstractPreDefinedAction.java:75)
	at
org.eclipse.graphiti.ui.internal.action.AbstractPreDefinedAction.genericRun(Ab
stractPreDefinedAction.java:93)
	at
org.eclipse.graphiti.ui.internal.action.DeleteAction.run(DeleteAction.java:96)
 
	at org.eclipse.gef.KeyHandler.performStroke(KeyHandler.java:83)
	at org.eclipse.gef.KeyHandler.keyPressed(KeyHandler.java:55)
	at org.eclipse.gef.KeyHandler.keyPressed(KeyHandler.java:59)
	at
org.eclipse.gef.ui.parts.GraphicalViewerKeyHandler.keyPressed(GraphicalViewerK
eyHandler.java:355)
	at org.eclipse.gef.tools.SelectionTool.handleKeyDown(SelectionTool.java:331)
	at
org.eclipse.gef.tools.PanningSelectionTool.handleKeyDown(PanningSelectionTool.
java:161)
	at org.eclipse.gef.tools.AbstractTool.keyDown(AbstractTool.java:1016)
	at org.eclipse.gef.tools.SelectionTool.keyDown(SelectionTool.java:491)
	at org.eclipse.gef.EditDomain.keyDown(EditDomain.java:169)
	at
org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchKeyPressed(DomainEventD
ispatcher.java:252)
	at
org.eclipse.draw2d.LightweightSystem$EventHandler.keyPressed(LightweightSystem
java:497)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:167)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1104)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1100)
	at org.eclipse.swt.widgets.Widget.wmKeyDown(Widget.java:1809)
	at org.eclipse.swt.widgets.Control.WM_KEYDOWN(Control.java:4892)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4560)
	at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4985)
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2530)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3752)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
	at
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at
org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.ja
va:123)
	at
org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:19
6)
	at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(Ec
lipseAppLauncher.java:110)
	at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppL
auncher.java:79)
	at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
	at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.j
ava:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
Comment 1 Shenxue Zhou CLA 2011-08-02 17:23:26 EDT
Created attachment 200762 [details]
Fix the NPE
Comment 2 Shenxue Zhou CLA 2011-08-02 17:29:45 EDT
The NPE should be fixed with the attached patch
Comment 3 Raj Alagumalai CLA 2011-08-03 12:13:30 EDT
verified on 0.3.1.201108021709
Comment 4 Konstantin Komissarchik CLA 2011-09-20 15:11:49 EDT
Closing based on Raj's verification.