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