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

Bug 438023

Summary: [Tree] Expand/Collapse event has null item in some cases
Product: [RT] RAP Reporter: Ivan Furnadjiev <ivan>
Component: RWTAssignee: Project Inbox <rap-inbox>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: P3    
Version: 2.0   
Target Milestone: 3.0 M1   
Hardware: PC   
OS: Windows 7   
Whiteboard: sr231
Attachments:
Description Flags
Workbench Demo patch to reproduce the issue none

Description Ivan Furnadjiev CLA 2014-06-24 07:11:42 EDT
Prerequisites:
1. UI request is running
2. User expand/collapse an item - expand/collapse notify operation is enqueued
3. Item is disposed by the server
4. Next UI request contains expand/collapse notify operation on already disposed item
5. Tree expand/collapse event is fired on the server with null item
As a result NPE is thrown if JFace TreeViewer is used:
java.lang.NullPointerException
	at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:779)
	at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:644)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:750)
	at org.eclipse.jface.viewers.AbstractTreeViewer.handleTreeExpand(AbstractTreeViewer.java:1447)
	at org.eclipse.jface.viewers.TreeViewer.handleTreeExpand(TreeViewer.java:952)
	at org.eclipse.jface.viewers.AbstractTreeViewer$4.treeExpanded(AbstractTreeViewer.java:1458)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:160)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:86)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:699)
	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:601)
	at org.eclipse.swt.widgets.Display.executeNextEvent(Display.java:1212)
	at org.eclipse.swt.widgets.Display.runPendingMessages(Display.java:1193)
	at org.eclipse.swt.widgets.Display.safeReadAndDispatch(Display.java:1176)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1168)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2733)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2694)
	at org.eclipse.ui.internal.Workbench.access$5(Workbench.java:2530)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:701)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:684)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:157)
	at org.eclipse.rap.demo.DemoWorkbench.createUI(DemoWorkbench.java:39)
	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWTLifeCycle.java:171)
	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle$UIThreadController.run(RWTLifeCycle.java:283)
	at java.lang.Thread.run(Thread.java:744)
	at org.eclipse.rap.rwt.internal.lifecycle.UIThread.run(UIThread.java:104)
Comment 1 Ivan Furnadjiev CLA 2014-06-24 07:17:55 EDT
Created attachment 244466 [details]
Workbench Demo patch to reproduce the issue

1. Apply the patch to Workbench Demo
2. Activate View II (next to the chart)
3. Click on "Refresh" view part action
4. Before the blocking overlay appear expand the root item
NPE is printed on the console.
Comment 2 Ivan Furnadjiev CLA 2014-06-24 07:20:03 EDT
The cause: TreeOperationHandler fire expand/collapse event regardless the item. We should not fire the event if item is null (item is already disposed in the previous request).
Comment 3 Ivan Furnadjiev CLA 2014-06-24 08:06:20 EDT
Pending change: https://git.eclipse.org/r/28913
Comment 4 Ivan Furnadjiev CLA 2014-06-24 10:55:44 EDT
Fixed in master with change https://git.eclipse.org/r/28913.