Bug 414750 - DIViewPart does not handle the @PreDestroy correctly
diff --git a/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/internal/PartHelper.java b/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/internal/PartHelper.java
index cbe2d20..2bc16f4 100644
--- a/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/internal/PartHelper.java
+++ b/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/internal/PartHelper.java
@@ -107,4 +107,16 @@
 			listeners.add(listener);
 		}
 	}
+
+	public static void disposeContextIfE3(IEclipseContext parentContext,
+			IEclipseContext context) {
+			// Check if running in 3.x, otherwise there was no dedicated context
+			// created
+			if (parentContext
+					.get("org.eclipse.e4.ui.workbench.IPresentationEngine") == null) {
+				context.dispose();
+				context = null;
+		}
+		
+	}
 }
diff --git a/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/parts/DIEditorPart.java b/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/parts/DIEditorPart.java
index c20e922..f5ea188 100644
--- a/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/parts/DIEditorPart.java
+++ b/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/parts/DIEditorPart.java
@@ -148,8 +148,12 @@
 
 	@Override
 	public void dispose() {
-		IEclipseContext parentContext = (IEclipseContext) getSite().getService(
-				IEclipseContext.class);
+		disposeContextIfE3((IEclipseContext) getSite().getService(
+				IEclipseContext.class), context);
+		super.dispose();
+	}
+
+	public static void disposeContextIfE3(IEclipseContext parentContext, IEclipseContext context) {
 		// Check if running in 3.x, otherwise there was no dedicated context
 		// created
 		if (parentContext
@@ -157,6 +161,5 @@
 			context.dispose();
 			context = null;
 		}
-		super.dispose();
 	}
 }
diff --git a/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/parts/DIViewPart.java b/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/parts/DIViewPart.java
index 0a060ee..edabb81 100644
--- a/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/parts/DIViewPart.java
+++ b/bundles/org.eclipse.e4.tools.compat/src/org/eclipse/e4/tools/compat/parts/DIViewPart.java
@@ -12,7 +12,6 @@
 
 import org.eclipse.e4.core.contexts.ContextInjectionFactory;
 import org.eclipse.e4.core.contexts.IEclipseContext;
-import org.eclipse.e4.core.di.InjectionException;
 import org.eclipse.e4.tools.compat.internal.PartHelper;
 import org.eclipse.e4.ui.di.Focus;
 import org.eclipse.swt.widgets.Composite;
@@ -57,4 +56,11 @@
 	public void setFocus() {
 		ContextInjectionFactory.invoke(component, Focus.class, context);
 	}
+	
+	@Override
+	public void dispose() {
+		PartHelper.disposeContextIfE3((IEclipseContext) getSite().getService(
+				IEclipseContext.class), context);
+		super.dispose();
+	}
 }
\ No newline at end of file