Bug 538360 - [E4Lifecycle]Additional Hook for e4 lifecycle class to
trigger PreClose of the Workbench
Change-Id: I6dd845c373229bb38c7bc31562ddffc1a3fcc587
Signed-off-by: Stefan Nöbauer <stefan.noebauer@kgu-consulting.com>
diff --git a/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/E4Application.java b/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/E4Application.java
index f927eea..cb95025 100644
--- a/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/E4Application.java
+++ b/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/E4Application.java
@@ -74,6 +74,7 @@
import org.eclipse.e4.ui.workbench.IModelResourceHandler;
import org.eclipse.e4.ui.workbench.IWorkbench;
import org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate;
+import org.eclipse.e4.ui.workbench.lifecycle.PostWorkbenchClose;
import org.eclipse.e4.ui.workbench.lifecycle.PreSave;
import org.eclipse.e4.ui.workbench.lifecycle.ProcessAdditions;
import org.eclipse.e4.ui.workbench.lifecycle.ProcessRemovals;
@@ -166,6 +167,9 @@
saveModel();
workbench.close();
+ if (lcManager != null) {
+ ContextInjectionFactory.invoke(lcManager, PostWorkbenchClose.class, workbench.getContext(), null);
+ }
if (workbench.isRestart()) {
return EXIT_RESTART;
diff --git a/bundles/org.eclipse.e4.ui.workbench/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.ui.workbench/META-INF/MANIFEST.MF
index 42ac839..9b04039 100644
--- a/bundles/org.eclipse.e4.ui.workbench/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.e4.ui.workbench/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.eclipse.e4.ui.workbench;singleton:=true
-Bundle-Version: 1.7.100.qualifier
+Bundle-Version: 1.8.0.qualifier
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.e4.ui.workbench/pom.xml b/bundles/org.eclipse.e4.ui.workbench/pom.xml
index 663bbb4..56d5541 100644
--- a/bundles/org.eclipse.e4.ui.workbench/pom.xml
+++ b/bundles/org.eclipse.e4.ui.workbench/pom.xml
@@ -19,6 +19,6 @@
</parent>
<groupId>org.eclipse.e4</groupId>
<artifactId>org.eclipse.e4.ui.workbench</artifactId>
- <version>1.7.100-SNAPSHOT</version>
+ <version>1.8.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>
diff --git a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/lifecycle/PostWorkbenchClose.java b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/lifecycle/PostWorkbenchClose.java
new file mode 100644
index 0000000..a5007028
--- /dev/null
+++ b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/lifecycle/PostWorkbenchClose.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2018 KGU-Consulting GmbH and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Stefan N�bauer <stefan.noebauer@kgu-consulting.com> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.e4.ui.workbench.lifecycle;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Use this annotation to describe methods that will participate in the
+ * application lifecycle. This method will be called after the model is
+ * persisted and the workbench is closed.
+ *
+ * <h2>IMPORTANT!</h2> Use this annotation with care in your application
+ * lifecycle since many eclipse services are already down.
+ * <ul>
+ * <li>IPresentationEngine is stopped</li>
+ * <li>UIEventPublisher is removed</li>
+ * <li>E4Workbench is unregistered from Framework service registry</li>
+ * </ul>
+ *
+ * @since 1.8
+ */
+@Documented
+@Target({ ElementType.METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface PostWorkbenchClose {
+ // intentionally left empty
+}