Bug 309698 Disposing parent context does not cause objects injected by a child context to be destroyed
The test below fails. static class Target { int pc = 0; int pd = 0; @Inject @Named("o") Object o; @PostConstruct void pc() { pc++; } @PreDestroy void pd() { pd++; } } public void testV() { IEclipseContext context = EclipseContextFactory.create(); IEclipseContext child = EclipseContextFactory.create(context, null); child.set("o", new Object()); Target target = (Target) ContextInjectionFactory.make(Target.class, child); assertEquals(1, target.pc); ((IDisposable) context).dispose(); assertEquals(1, target.pd); }
bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/workbench/swt/internal/E4Application.java
return args[i + 1];
		}
		return appContext.getBrandingProperty(argName);
	}
	public void stop() {
	}
	public static IEclipseContext createDefaultContext() {
		return createDefaultContext(null);
	}
	public static IEclipseContext createDefaultContext(
			IEclipseContextStrategy strategy) {
		
		
		
		IEclipseContext serviceContext = E4Workbench.getServiceContext();
		final IEclipseContext appContext = EclipseContextFactory.create(
				serviceContext, strategy);
		appContext.set(IContextConstants.DEBUG_STRING, "WorkbenchAppContext"); 
		
		IExtensionRegistry registry = RegistryFactory.getRegistry();
		ExceptionHandler exceptionHandler = new ExceptionHandler();
		ReflectionContributionFactory contributionFactory = new ReflectionContributionFactory(
				registry);
		appContext.set(IContributionFactory.class.getName(),
				contributionFactory);
		appContext.set(Logger.class.getName(), ContextInjectionFactory.make(
				WorkbenchLogger.class, appContext));
		appContext.set(Adapter.class.getName(), ContextInjectionFactory.make(
				EclipseAdapter.class, appContext));
		appContext.set(IContextConstants.DEBUG_STRING, "WorkbenchContext");