Bug 316363 SWTExceptions with @UIEventTopic on bundle shutdown
BuildId: HEAD from 2010/06/09 AM I'm porting the e4rover code to HEAD. It makes use of the @UIEventTopic annotation. On shutdown, I get dozens of SWTExceptions like the the following: ***WARNING: Display must be created on main thread due to Cocoa restrictions. 2010-06-09 15:11:28.399 Log ErrorException while dispatching event org.osgi.service.event.Event [topic=org/eclipsecon/e4rover/robot] to handler org.eclipse.e4.ui.internal.di.UIEventObjectSupplier$UIEventHandler@6a581b90 org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.swt.SWT.error(SWT.java:4083) at org.eclipse.swt.SWT.error(SWT.java:3998) at org.eclipse.swt.SWT.error(SWT.java:3969) at org.eclipse.swt.widgets.Display.error(Display.java:1027) at org.eclipse.swt.widgets.Display.createDisplay(Display.java:794) at org.eclipse.swt.widgets.Display.create(Display.java:777) at org.eclipse.swt.graphics.Device.<init>(Device.java:130) at org.eclipse.swt.widgets.Display.<init>(Display.java:668) at org.eclipse.swt.widgets.Display.<init>(Display.java:659) at org.eclipse.swt.widgets.Display.getDefault(Display.java:1303) at org.eclipse.e4.ui.internal.di.UIEventObjectSupplier$UIEventHandler.handleEvent(UIEventObjectSupplier.java:38) at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:188) at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:198) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227) at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:149) at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:139) at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78) at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39) at org.eclipsecon.e4rover.core.ContestPlatform.fireRobotUpdated(ContestPlatform.java:262) at org.eclipsecon.e4rover.core.ContestPlatform.access$7(ContestPlatform.java:260) at org.eclipsecon.e4rover.core.ContestPlatform$1.run(ContestPlatform.java:172)
bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/E4Application.java
appContext.set(E4Application.THEME_ID, cssURI);
		}
		String cssResourcesURI = getArgValue(E4Workbench.CSS_RESOURCE_URI_ARG,
				applicationContext);
		appContext.set(E4Workbench.CSS_RESOURCE_URI_ARG, cssResourcesURI);
		appContext.set(
				E4Workbench.RENDERER_FACTORY_URI,
				getArgValue(E4Workbench.RENDERER_FACTORY_URI,
						applicationContext));
		
		String presentationURI = getArgValue(E4Workbench.PRESENTATION_URI_ARG,
				applicationContext);
		if (presentationURI == null) {
			presentationURI = PartRenderingEngine.engineURI;
		}
		appContext.set(E4Workbench.PRESENTATION_URI_ARG, presentationURI);
		
		
		E4Workbench workbench = new E4Workbench(appModel, appContext);
		return workbench;
	}
	private MApplication loadApplicationModel(IApplicationContext appContext,
			IEclipseContext eclipseContext) {
		MApplication theApp = null;
		Location instanceLocation = WorkbenchSWTActivator.getDefault()
				.getInstanceLocation();
		String appModelPath = getArgValue(E4Workbench.XMI_URI_ARG, appContext);
		Assert.isNotNull(appModelPath, E4Workbench.XMI_URI_ARG
				+ " argument missing"); 
		final URI initialWorkbenchDefinitionInstance = URI