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
+}