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

Bug 320749

Summary: The hidden toolbar state is not persisted
Product: [Eclipse Project] Platform Reporter: Oleg Besedin <ob1.eclipse>
Component: UIAssignee: Brian de Alwis <bsd>
Status: VERIFIED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: bokowski, bsd, emoffatt, pwebster, remy.suen
Version: 4.2   
Target Milestone: 4.2 M5   
Hardware: Macintosh   
OS: Mac OS X   
See Also: https://bugs.eclipse.org/bugs/show_bug.cgi?id=536297
Whiteboard:
Bug Depends on: 369229    
Bug Blocks:    
Attachments:
Description Flags
First cut at patch none

Description Oleg Besedin CLA 2010-07-23 11:59:50 EDT
The hidden toolbar state is not persisted.

This is probably due to the general trim persistance issues, so if there is a generic bug for that please feel free to mark this as a duplicate.
Comment 1 Brian de Alwis CLA 2012-01-10 16:58:58 EST
Hmm, the "Top" MTrimBar is never persisted to the deltas.xml, regardless of other changes made (e.g., tag addition).
Comment 2 Brian de Alwis CLA 2012-01-10 17:54:50 EST
Created attachment 209293 [details]
First cut at patch

There are two issues:

1. WorkbenchWindow#removeTopTrimChildren() removes the top trimbar (with elementId = 'org.eclipse.ui.main.toolbar') from the trimbars collection

2. CoolBarToTrimManager creates a new MTrimBar for the window regardless of whether an appropriate trimbar exists.

The attached patch relaxes the above and appears, in preliminary testing, to have the desired effect.
Comment 3 Paul Webster CLA 2012-01-11 08:10:37 EST
your patch it just a workaround to the fact that the main menu and toolbar are generated by the Workbench in 4.2 and so they can't be saved and restored (without writing some reconciler code to match the saved-out model to the newly generated workbench objects).

PW
Comment 4 Brian de Alwis CLA 2012-01-11 16:42:10 EST
(In reply to comment #3)
> your patch it just a workaround to the fact that the main menu and toolbar are
> generated by the Workbench in 4.2 and so they can't be saved and restored
> (without writing some reconciler code to match the saved-out model to the newly
> generated workbench objects).

I don't disagree that the patch is a hack. But it's still an improvement from our current state!

Looking at WorkbenchWindow some more, WW does seem to properly manage its contributions to the top trimbar: populateTopTrimContributions() records the elements added to a field 'workbenchTrimElements', which is used by removeTrimContributions() to remove the elements when the window is disposed.  From observation within the debugger, the top trim bar contents is correctly clear at the conclusion of removeTrimContributions().  This could imply that the call to clear its children in removeTopTrimChildren() could be unnecessary, though I don't know how/when other elements might be contributed to the trim.  (The window's menu on the other hand, is not being managed.)

So this patch is really no worse than what was there before, but at least ensures that any settings on the trimbar are correctly persisted.
Comment 5 Paul Webster CLA 2012-01-12 08:17:28 EST
(In reply to comment #4)
> 
> I don't disagree that the patch is a hack. But it's still an improvement from
> our current state!

Yes, I agree, and it's worth going forward with it.

As Eric works on the Trim DND we would probably have to revisit this issue, as he needs to remember trim order and we delete it at the moment.

PW
Comment 7 Remy Suen CLA 2012-01-19 16:38:17 EST
(In reply to comment #6)
> Patch committed to master.
> 
> 
> http://git.eclipse.org/c/platform/eclipse.platform.ui.git/commit/?id=5bc1cbc5cf850776aaa27017f5de52dcd7503be1

I'm getting some strange behaviour on Windows 7 with this change set. My inner no longer runs properly after a simple restart (so the deltas.xml file has been generated). Brian says he doesn't see this so it may be something specific to win32.

A layout is causing an MPSC to have its widget set to non-null. Because the widget is non-null, the rendering engine skips the element and doesn't render anymore of its children (child part stacks) and leaves the workbench half up (only the left side's 'Package Explorer' part is rendered).

Thread [main] (Suspended (breakpoint at line 247 in UIElementImpl))	
	PartSashContainerImpl(UIElementImpl).setWidget(Object) line: 247	
	SashLayout.setRectangle(MUIElement, Rectangle) line: 307	
	SashLayout.tileSubNodes(Rectangle, MUIElement) line: 248	
	SashLayout.tileSubNodes(Rectangle, MUIElement) line: 291	
	SashLayout.layout(Composite, boolean) line: 158	
	Composite.updateLayout(boolean, boolean) line: 1263	
	Composite.sendResize() line: 980	
	Composite.setBounds(int, int, int, int, int, boolean) line: 1025	
	Composite(Control).setBounds(int, int, int, int, int) line: 3085	
	Composite(Control).setBounds(int, int, int, int) line: 3081	
	FillLayout.layout(Composite, boolean) line: 201	
	Composite.updateLayout(boolean, boolean) line: 1263	
	Composite.WM_SIZE(long, long) line: 1673	
	Composite(Control).windowProc(long, int, long, long) line: 4603	
	Display.windowProc(long, long, long, long) line: 4972	
	OS.DefWindowProcW(long, int, long, long) line: not available [native method]	
	OS.DefWindowProc(long, int, long, long) line: 2540	
	Composite(Scrollable).callWindowProc(long, int, long, long) line: 80	
	Composite(Control).WM_WINDOWPOSCHANGED(long, long) line: 5408	
	Composite(Control).windowProc(long, int, long, long) line: 4616	
	Display.windowProc(long, long, long, long) line: 4972	
	OS.SetWindowPos(long, long, int, int, int, int, int) line: not available [native method]	
	Composite(Widget).SetWindowPos(long, long, int, int, int, int, int) line: 1457	
	Composite(Control).setBounds(int, int, int, int, int, boolean) line: 3124	
	Composite.setBounds(int, int, int, int, int, boolean) line: 1019	
	Composite(Control).setBounds(int, int, int, int, int) line: 3085	
	Composite(Control).setBounds(int, int, int, int) line: 3081	
	Composite(Control).setBounds(Rectangle) line: 3148	
	StackLayout.layout(Composite, boolean) line: 120	
	Composite.updateLayout(boolean, boolean) line: 1263	
	Composite.WM_SIZE(long, long) line: 1673	
	Composite(Control).windowProc(long, int, long, long) line: 4603	
	Display.windowProc(long, long, long, long) line: 4972	
	OS.DefWindowProcW(long, int, long, long) line: not available [native method]	
	OS.DefWindowProc(long, int, long, long) line: 2540	
	Composite(Scrollable).callWindowProc(long, int, long, long) line: 80	
	Composite(Control).WM_WINDOWPOSCHANGED(long, long) line: 5408	
	Composite(Control).windowProc(long, int, long, long) line: 4616	
	Display.windowProc(long, long, long, long) line: 4972	
	OS.SetWindowPos(long, long, int, int, int, int, int) line: not available [native method]	
	Composite(Widget).SetWindowPos(long, long, int, int, int, int, int) line: 1457	
	Composite(Control).setBounds(int, int, int, int, int, boolean) line: 3124	
	Composite.setBounds(int, int, int, int, int, boolean) line: 1019	
	Composite(Control).setBounds(int, int, int, int, int) line: 3085	
	Composite(Control).setBounds(int, int, int, int) line: 3081	
	Composite(Control).setBounds(Rectangle) line: 3148	
	SashLayout.setRectangle(MUIElement, Rectangle) line: 303	
	SashLayout.tileSubNodes(Rectangle, MUIElement) line: 248	
	SashLayout.tileSubNodes(Rectangle, MUIElement) line: 291	
	SashLayout.layout(Composite, boolean) line: 158	
	Composite.updateLayout(boolean, boolean) line: 1263	
	Composite.WM_SIZE(long, long) line: 1673	
	Composite(Control).windowProc(long, int, long, long) line: 4603	
	Display.windowProc(long, long, long, long) line: 4972	
	OS.DefWindowProcW(long, int, long, long) line: not available [native method]	
	OS.DefWindowProc(long, int, long, long) line: 2540	
	Composite(Scrollable).callWindowProc(long, int, long, long) line: 80	
	Composite(Control).WM_WINDOWPOSCHANGED(long, long) line: 5408	
	Composite(Control).windowProc(long, int, long, long) line: 4616	
	Display.windowProc(long, long, long, long) line: 4972	
	OS.SetWindowPos(long, long, int, int, int, int, int) line: not available [native method]	
	Composite(Widget).SetWindowPos(long, long, int, int, int, int, int) line: 1457	
	Composite(Control).setBounds(int, int, int, int, int, boolean) line: 3124	
	Composite.setBounds(int, int, int, int, int, boolean) line: 1019	
	Composite(Control).setBounds(int, int, int, int, int) line: 3085	
	Composite(Control).setBounds(int, int, int, int) line: 3081	
	FillLayout.layout(Composite, boolean) line: 201	
	Composite.updateLayout(boolean, boolean) line: 1263	
	Composite.WM_SIZE(long, long) line: 1673	
	Composite(Control).windowProc(long, int, long, long) line: 4603	
	Display.windowProc(long, long, long, long) line: 4972	
	OS.DefWindowProcW(long, int, long, long) line: not available [native method]	
	OS.DefWindowProc(long, int, long, long) line: 2540	
	Composite(Scrollable).callWindowProc(long, int, long, long) line: 80	
	Composite(Control).WM_WINDOWPOSCHANGED(long, long) line: 5408	
	Composite(Control).windowProc(long, int, long, long) line: 4616	
	Display.windowProc(long, long, long, long) line: 4972	
	OS.SetWindowPos(long, long, int, int, int, int, int) line: not available [native method]	
	Composite(Widget).SetWindowPos(long, long, int, int, int, int, int) line: 1457	
	Composite(Control).setBounds(int, int, int, int, int, boolean) line: 3124	
	Composite.setBounds(int, int, int, int, int, boolean) line: 1019	
	Composite(Control).setBounds(int, int, int, int, int) line: 3085	
	Composite(Control).setBounds(int, int, int, int) line: 3081	
	Composite(Control).setBounds(Rectangle) line: 3148	
	TrimmedPartLayout.layout(Composite, boolean) line: 183	
	Shell(Composite).updateLayout(boolean, boolean) line: 1263	
	Shell(Composite).WM_SIZE(long, long) line: 1673	
	Shell(Canvas).WM_SIZE(long, long) line: 454	
	Shell(Decorations).WM_SIZE(long, long) line: 1808	
	Shell(Control).windowProc(long, int, long, long) line: 4603	
	Shell(Canvas).windowProc(long, int, long, long) line: 341	
	Shell(Decorations).windowProc(long, int, long, long) line: 1627	
	Shell.windowProc(long, int, long, long) line: 2069	
	Display.windowProc(long, long, long, long) line: 4972	
	OS.DefWindowProcW(long, int, long, long) line: not available [native method]	
	OS.DefWindowProc(long, int, long, long) line: 2540	
	Shell.callWindowProc(long, int, long, long) line: 498	
	Shell(Control).WM_WINDOWPOSCHANGED(long, long) line: 5408	
	Shell(Canvas).WM_WINDOWPOSCHANGED(long, long) line: 460	
	Shell(Control).windowProc(long, int, long, long) line: 4616	
	Shell(Canvas).windowProc(long, int, long, long) line: 341	
	Shell(Decorations).windowProc(long, int, long, long) line: 1627	
	Shell.windowProc(long, int, long, long) line: 2069	
	Display.windowProc(long, long, long, long) line: 4972	
	OS.SetMenu(long, long) line: not available [native method]	
	Shell(Decorations).setMenuBar(Menu) line: 1175	
	MenuManagerRenderer.createWidget(MUIElement, Object) line: 275	
	PartRenderingEngine.createWidget(MUIElement, Object) line: 866	
	PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 616	
	PartRenderingEngine$6.run() line: 505	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.createGui(MUIElement, Object, IEclipseContext) line: 490	
	WorkbenchWindow.setup() line: 551	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 88	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 55	
	Method.invoke(Object, Object...) line: 613	
	MethodRequestor.execute() line: 56	
	InjectorImpl.processAnnotated(Class<Annotation>, Object, Class<?>, PrimaryObjectSupplier, PrimaryObjectSupplier, ArrayList<Class<?>>) line: 838	
	InjectorImpl.inject(Object, PrimaryObjectSupplier, PrimaryObjectSupplier) line: 110	
	InjectorImpl.inject(Object, PrimaryObjectSupplier) line: 80	
	ContextInjectionFactory.inject(Object, IEclipseContext) line: 72	
	Workbench.createWorkbenchWindow(IAdaptable, IPerspectiveDescriptor, MWindow, boolean) line: 1233	
	Workbench.openWorkbenchWindow(IAdaptable, IPerspectiveDescriptor, MWindow, boolean) line: 2244	
	Workbench.getWorkbenchPage(MPart) line: 1704	
	Workbench.setReference(MPart, IEclipseContext) line: 1723	
	Workbench.access$21(Workbench, MPart, IEclipseContext) line: 1720	
	Workbench$32.handleEvent(Event) line: 1671	
	UIEventHandler$1.run() line: 41	
	UISynchronizer(Synchronizer).syncExec(Runnable) line: 180	
	UISynchronizer.syncExec(Runnable) line: 150	
	Display.syncExec(Runnable) line: 4683	
	E4Application$1.syncExec(Runnable) line: 177	
	UIEventHandler.handleEvent(Event) line: 38	
	EventHandlerWrapper.handleEvent(Event, Permission) line: 197	
	EventHandlerTracker.dispatchEvent(EventHandlerWrapper, Permission, int, Event) line: 197	
	EventHandlerTracker.dispatchEvent(Object, Object, int, Object) line: 1	
	EventManager.dispatchEvent(Set<Entry<K,V>>, EventDispatcher<K,V,E>, int, E) line: 230	
	ListenerQueue<K,V,E>.dispatchEventSynchronous(int, E) line: 148	
	EventAdminImpl.dispatchEvent(Event, boolean) line: 135	
	EventAdminImpl.sendEvent(Event) line: 78	
	EventComponent.sendEvent(Event) line: 39	
	EventBroker.send(String, Object) line: 81	
	UIEventPublisher.notifyChanged(Notification) line: 55	
	PartImpl(BasicNotifierImpl).eNotify(Notification) line: 380	
	PartImpl.setContext(IEclipseContext) line: 422	
	PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 595	
	PartRenderingEngine$6.run() line: 505	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.createGui(MUIElement, Object, IEclipseContext) line: 490	
	ElementReferenceRenderer.createWidget(MUIElement, Object) line: 74	
	PartRenderingEngine.createWidget(MUIElement, Object) line: 866	
	PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 616	
	PartRenderingEngine.safeCreateGui(MUIElement) line: 718	
	PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689	
	PartRenderingEngine$7.run() line: 683	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.createGui(MUIElement) line: 668	
	StackRenderer.showTab(MUIElement) line: 786	
	StackRenderer(LazyStackRenderer).postProcess(MUIElement) line: 97	
	PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 632	
	PartRenderingEngine.safeCreateGui(MUIElement) line: 718	
	PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689	
	PartRenderingEngine$7.run() line: 683	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.createGui(MUIElement) line: 668	
	SashRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59	
	PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628	
	PartRenderingEngine.safeCreateGui(MUIElement) line: 718	
	PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689	
	PartRenderingEngine$7.run() line: 683	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.createGui(MUIElement) line: 668	
	SashRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59	
	PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628	
	PartRenderingEngine.safeCreateGui(MUIElement) line: 718	
	PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689	
	PartRenderingEngine$7.run() line: 683	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.createGui(MUIElement) line: 668	
	PerspectiveRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59	
	PerspectiveRenderer.processContents(MElementContainer<MUIElement>) line: 59	
	PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628	
	PartRenderingEngine.safeCreateGui(MUIElement) line: 718	
	PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689	
	PartRenderingEngine$7.run() line: 683	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.createGui(MUIElement) line: 668	
	PerspectiveStackRenderer.showTab(MUIElement) line: 103	
	PerspectiveStackRenderer(LazyStackRenderer).postProcess(MUIElement) line: 97	
	PerspectiveStackRenderer.postProcess(MUIElement) line: 77	
	PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 632	
	PartRenderingEngine.safeCreateGui(MUIElement) line: 718	
	PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689	
	PartRenderingEngine$7.run() line: 683	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.createGui(MUIElement) line: 668	
	SashRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59	
	PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628	
	PartRenderingEngine.safeCreateGui(MUIElement) line: 718	
	PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689	
	PartRenderingEngine$7.run() line: 683	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.createGui(MUIElement) line: 668	
	WBWRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59	
	WBWRenderer.processContents(MElementContainer<MUIElement>) line: 584	
	PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628	
	PartRenderingEngine.safeCreateGui(MUIElement) line: 718	
	PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689	
	PartRenderingEngine$7.run() line: 683	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.createGui(MUIElement) line: 668	
	PartRenderingEngine$9.run() line: 938	
	Realm.runWithDefault(Realm, Runnable) line: 332	
	PartRenderingEngine.run(MApplicationElement, IEclipseContext) line: 893	
	E4Workbench.createAndRunUI(MApplicationElement) line: 85	
	Workbench$4.run() line: 577	
	Realm.runWithDefault(Realm, Runnable) line: 332	
	Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 532	
	PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149	
	IDEApplication.start(IApplicationContext) line: 124	
	EclipseAppHandle.run(Object) line: 196	
	EclipseAppLauncher.runApplication(Object) line: 110	
	EclipseAppLauncher.start(Object) line: 79	
	EclipseStarter.run(Object) line: 352	
	EclipseStarter.run(String[], Runnable) line: 179	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 88	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 55	
	Method.invoke(Object, Object...) line: 613	
	Main.invokeFramework(String[], URL[]) line: 624	
	Main.basicRun(String[]) line: 579	
	Main.run(String[]) line: 1433	
	Main.main(String[]) line: 1409
Comment 8 Brian de Alwis CLA 2012-01-19 16:54:03 EST
Reverted the commit — Remy discovered a some strange interaction that shows up on Win7:

rcjsuen (4:44) the problem is that it sets a widget into the MPSC before the rendering engine got to it
Comment 9 Remy Suen CLA 2012-01-20 08:59:17 EST
(In reply to comment #8)
> rcjsuen (4:44) the problem is that it sets a widget into the MPSC before the
> rendering engine got to it

I've opened bug 369229 for this problem.
Comment 10 Brian de Alwis CLA 2012-01-23 13:01:56 EST
I get an NPE if the Welcome view is on-screen in PerspectiveStackRenderer#showTab(MUIElement) line 114:

		// relayout the perspective
		Composite psComp = ctrl.getParent();
		StackLayout sl = (StackLayout) psComp.getLayout();
114:		sl.topControl = ctrl;
		psComp.layout();

It seems to work happily if I change the code to:

		// relayout the perspective
		Composite psComp = ctrl.getParent();
		StackLayout sl = (StackLayout) psComp.getLayout();
		if (sl != null) {
			sl.topControl = ctrl;
			psComp.layout();
		}

Eric, can you verify that this is correct?

Steps to repeat:
1. Open to the Welcome / Intro (Help > Welcome)
2. Quit, and then restart.

You should get the NPE below on startup.

Daemon Thread [Thread-1] (Suspended (exception NullPointerException))	
	PerspectiveStackRenderer.showTab(MUIElement) line: 114	
	PerspectiveStackRenderer(LazyStackRenderer).postProcess(MUIElement) line: 97	
	PerspectiveStackRenderer.postProcess(MUIElement) line: 77	
	PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 632	
	PartRenderingEngine.safeCreateGui(MUIElement) line: 718	
	PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689	
	PartRenderingEngine$7.run() line: 683	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.createGui(MUIElement) line: 668	
	SashRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59	
	PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628	
	PartRenderingEngine.safeCreateGui(MUIElement) line: 718	
	PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689	
	PartRenderingEngine$7.run() line: 683	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.createGui(MUIElement) line: 668	
	WBWRenderer(SWTPartRenderer).processContents(MElementContainer<MUIElement>) line: 59	
	WBWRenderer.processContents(MElementContainer<MUIElement>) line: 584	
	PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 628	
	PartRenderingEngine.safeCreateGui(MUIElement) line: 718	
	PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 689	
	PartRenderingEngine$7.run() line: 683	
	SafeRunner.run(ISafeRunnable) line: 42	
	PartRenderingEngine.createGui(MUIElement) line: 668	
	PartRenderingEngine$9.run() line: 938	
	Realm.runWithDefault(Realm, Runnable) line: 332	
	PartRenderingEngine.run(MApplicationElement, IEclipseContext) line: 893	
	E4Workbench.createAndRunUI(MApplicationElement) line: 85	
	Workbench$4.run() line: 577	
	Realm.runWithDefault(Realm, Runnable) line: 332	
	Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 532	
	PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149	
	IDEApplication.start(IApplicationContext) line: 124	
	EclipseAppHandle.run(Object) line: 196	
	EclipseAppLauncher.runApplication(Object) line: 110	
	EclipseAppLauncher.start(Object) line: 79	
	EclipseStarter.run(Object) line: 352	
	EclipseStarter.run(String[], Runnable) line: 179	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
	Method.invoke(Object, Object...) line: 597	
	Main.invokeFramework(String[], URL[]) line: 624	
	Main.basicRun(String[]) line: 579	
	Main.run(String[]) line: 1433	
	Main.main(String[]) line: 1409
Comment 11 Brian de Alwis CLA 2012-01-23 14:09:13 EST
Problem in comment #10 is independent and reported in bug 369434.

Fix re-applied and committed as 52b277357edcb5df00f8aae1e7436a2c8be021b4
Comment 12 Brian de Alwis CLA 2012-01-24 13:15:22 EST
Verified in I20120123-2200.