Bug 334577 Child windows of perspectives/windows needs to be unrendered as a part of the element's unrendering process
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
bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java
renderer.hookControllerLogic(element);
			
			
			if (element instanceof MElementContainer) {
				renderer.processContents((MElementContainer<MUIElement>) element);
			}
			
			renderer.postProcess(element);
			
			if (element.getParent() instanceof MUIElement) {
				MElementContainer<MUIElement> parentElement = element
						.getParent();
				AbstractPartRenderer parentRenderer = getRendererFor(parentElement);
				if (parentRenderer != null)
					parentRenderer.childRendered(parentElement, element);
			}
		} else {
			
			if (element instanceof MContext) {
				MContext ctxt = (MContext) element;
				IEclipseContext lclContext = ctxt.getContext();
				if (lclContext != null) {
					lclContext.dispose();
					ctxt.setContext(null);
				}
			}
		}
		return newWidget;
	}
	private IEclipseContext getContext(MElementContainer<MUIElement> parent) {