Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 334577 - Child windows of perspectives/windows needs to be unrendered as a part of the element's unrendering process
Summary: Child windows of perspectives/windows needs to be unrendered as a part of the...
Status: VERIFIED FIXED
Alias: None
Product: e4
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 1.0   Edit
Hardware: All All
: P3 normal (vote)
Target Milestone: 4.1 M5   Edit
Assignee: Remy Suen CLA
QA Contact: Eric Moffatt CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-01-17 15:04 EST by Remy Suen CLA
Modified: 2011-01-26 09:04 EST (History)
0 users

See Also:


Attachments
PartRenderingEngine patch v1 (4.49 KB, patch)
2011-01-18 10:48 EST, Remy Suen CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Remy Suen CLA 2011-01-17 15:04:34 EST
1. Window > Show View > Error Log
2. Detach the 'Error Log' file.
3. Shutdown Eclipse.


org.eclipse.e4.core.di.InjectionException: java.lang.NullPointerException
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:59)
	at org.eclipse.e4.core.internal.contexts.ContextObjectSupplier$ContextInjectionListener.update(ContextObjectSupplier.java:75)
	at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:88)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:326)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:343)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.activate(EclipseContext.java:596)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.activateBranch(EclipseContext.java:601)
	at org.eclipse.e4.ui.internal.workbench.PartActivationHistory.activate(PartActivationHistory.java:52)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:506)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:479)
	at org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer.activate(AbstractPartRenderer.java:105)
	at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer$3.handleEvent(ContributedPartRenderer.java:210)
	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:1058)
	at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:1447)
	at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:2740)
	at org.eclipse.swt.widgets.Widget.wmSetFocus(Widget.java:2477)
	at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4950)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4373)
	at org.eclipse.swt.widgets.Text.windowProc(Text.java:2243)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4909)
	at org.eclipse.swt.internal.win32.OS.SetFocus(Native Method)
	at org.eclipse.swt.widgets.Control.forceFocus(Control.java:1056)
	at org.eclipse.swt.widgets.Control.setFocus(Control.java:3103)
	at org.eclipse.ui.internal.views.log.LogView.setFocus(LogView.java:1079)
	at org.eclipse.ui.internal.views.log.LogView.onTextShellDispose(LogView.java:1315)
	at org.eclipse.ui.internal.views.log.LogView$28.widgetDisposed(LogView.java:1308)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:123)
	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:1058)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:808)
	at org.eclipse.swt.widgets.Widget.dispose(Widget.java:446)
	at org.eclipse.swt.widgets.Decorations.dispose(Decorations.java:447)
	at org.eclipse.swt.widgets.Shell.dispose(Shell.java:714)
	at org.eclipse.ui.internal.views.log.LogView.dispose(LogView.java:621)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.invalidate(CompatibilityPart.java:120)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.destroy(CompatibilityPart.java:231)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
	at java.lang.reflect.Method.invoke(Method.java:600)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:52)
	at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:828)
	at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:808)
	at org.eclipse.e4.core.internal.di.InjectorImpl.disposed(InjectorImpl.java:355)
	at org.eclipse.e4.core.internal.di.Requestor.disposed(Requestor.java:112)
	at org.eclipse.e4.core.internal.contexts.ContextObjectSupplier$ContextInjectionListener.update(ContextObjectSupplier.java:63)
	at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:88)
	at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.doHandleInvalid(TrackableComputationExt.java:53)
	at org.eclipse.e4.core.internal.contexts.Computation.handleInvalid(Computation.java:53)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:177)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:165)
	at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:165)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.clearContext(PartRenderingEngine.java:690)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:671)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$1(PartRenderingEngine.java:613)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:608)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:593)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:646)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$1(PartRenderingEngine.java:613)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:608)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:593)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:646)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$1(PartRenderingEngine.java:613)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:608)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:593)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:646)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$1(PartRenderingEngine.java:613)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:608)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:593)
	at org.eclipse.ui.internal.WorkbenchWindow.hardClose(WorkbenchWindow.java:1556)
	at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:1255)
	at org.eclipse.ui.internal.WorkbenchWindow.access$9(WorkbenchWindow.java:1234)
	at org.eclipse.ui.internal.WorkbenchWindow$6.run(WorkbenchWindow.java:1281)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:1279)
	at org.eclipse.ui.internal.Workbench$14.run(Workbench.java:1044)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.Workbench.busyClose(Workbench.java:1038)
	at org.eclipse.ui.internal.Workbench.access$12(Workbench.java:950)
	at org.eclipse.ui.internal.Workbench$15.run(Workbench.java:1119)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ui.internal.Workbench.close(Workbench.java:1117)
	at org.eclipse.ui.internal.Workbench.close(Workbench.java:1090)
	at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:1252)
	at org.eclipse.ui.internal.WorkbenchWindow.access$9(WorkbenchWindow.java:1234)
	at org.eclipse.ui.internal.WorkbenchWindow$6.run(WorkbenchWindow.java:1281)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:1279)
	at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:1295)
	at org.eclipse.ui.internal.WorkbenchWindow$4.close(WorkbenchWindow.java:440)
	at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer$8.shellClosed(WBWRenderer.java:434)

Caused by: java.lang.NullPointerException
	at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.isMasterService(SelectionServiceImpl.java:135)
	at org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl.setPart(SelectionServiceImpl.java:149)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
	at java.lang.reflect.Method.invoke(Method.java:600)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:52)
	... 152 more
Comment 1 Remy Suen CLA 2011-01-18 10:48:49 EST
Created attachment 187010 [details]
PartRenderingEngine patch v1

The problem is that when a perspective or a window is unrendered, its child windows are _not_. At this point, the deconstruction code ultimately causes the view to try to set focus to something (and thus reactivating the part). This wouldn't normally happen because the focus call would not have happened if the widgets were already disposed (during the deconstruction process).

The fix is to unrender child windows before the element itself is unrendered.
Comment 2 Remy Suen CLA 2011-01-18 10:51:15 EST
Fix released to CVS HEAD.
Comment 3 Remy Suen CLA 2011-01-26 09:04:30 EST
Verified with I20110125-2200 on Windows XP.