Bug 74707

Summary: [Palette] Repopulate PaletteRoot causes null pointer in PaletteViewer
Product: [Tools] GEF Reporter: Erik Johnson <ejohnson>
Component: GEF-Legacy GEF (MVC)Assignee: gef-inbox <gef-inbox>
Status: NEW --- QA Contact:
Severity: normal    
Priority: P3 CC: nyssen
Version: 3.0   
Target Milestone: ---   
Hardware: PC   
OS: Windows 2000   
Whiteboard:

Description Erik Johnson CLA 2004-09-22 15:40:06 EDT
See
http://dev.eclipse.org/newslists/news.eclipse.tools.gef/msg08383.html

Summary: 
If a PaletteRoot instance for a palette is repopulated by removing all children 
and adding the updated list of palette entries and the editor is open, when a 
tool in the palette is selected, there is a null pointer in the graphical 
viewer.

There is a work around by adding a listener to the palette root and when the 
children change, obtain the palette viewer and setActiveTool(null); however it 
would be much cleaner if the PaletteViewer clears the active tool reference if 
the referenced active tool has been removed.  External listeners should not 
need to know when to update the palette viewer.

Exception stack trace:
java.lang.NullPointerException
 at
org.eclipse.gef.ui.palette.PaletteViewer.setActiveTool(PaletteViewer.java:36
1)
 at
org.eclipse.gef.internal.ui.palette.editparts.ToolEntryEditPart$2.actionPerf
ormed(ToolEntryEditPart.java:256)
 at org.eclipse.draw2d.Clickable.fireActionPerformed(Clickable.java:200)
 at org.eclipse.draw2d.Clickable$1.actionPerformed(Clickable.java:172)
 at org.eclipse.draw2d.ButtonModel.fireActionPerformed(ButtonModel.java:131)
 at org.eclipse.draw2d.ToggleModel.fireActionPerformed(ToggleModel.java:28)
 at
org.eclipse.draw2d.ButtonModel$DefaultFiringBehavior.released(ButtonModel.ja
va:484)
 at org.eclipse.draw2d.ButtonModel.fireReleased(ButtonModel.java:169)
 at org.eclipse.draw2d.ButtonModel.setPressed(ButtonModel.java:444)
 at
org.eclipse.gef.internal.ui.palette.editparts.ToolEntryEditPart$OtherToggleB
uttonTracker.handleButtonUp(ToolEntryEditPart.java:159)
 at org.eclipse.gef.tools.AbstractTool.mouseUp(AbstractTool.java:1042)
 at org.eclipse.gef.tools.SelectionTool.mouseUp(SelectionTool.java:535)
 at org.eclipse.gef.EditDomain.mouseUp(EditDomain.java:241)
 at
org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMouseReleased(DomainE
ventDispatcher.java:344)
 at
org.eclipse.draw2d.LightweightSystem$EventHandler.mouseUp(LightweightSystem.
java:516)
 at
org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:136)
 at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
 at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
 at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2772)
 at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2431)
 at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1377)
 at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1348)
 at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:254)
 at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
 at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:96)
 at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.
java:335)
 at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273)
 at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:129)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
)
 at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:25)
 at java.lang.reflect.Method.invoke(Method.java:324)
 at org.eclipse.core.launcher.Main.basicRun(Main.java:183)
 at org.eclipse.core.launcher.Main.run(Main.java:644)
 at org.eclipse.core.launcher.Main.main(Main.java:628)