[547226] Fix potential NPE when closing the editor on 2018-09 and later

Make the code more robust using the same rules as used in:

  https://git.eclipse.org/c/sourceediting/webtools.sourceediting.git/commit/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextEditor.java?id=b260c28651005022730199d1f5fb49f7a182ee2a

Bug: 547226
Change-Id: Ic3d406cf0b1abd5b08c30e40e607771740aef458
Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
diff --git a/org.eclipse.gmf.runtime.diagram.ui.resources.editor/src/org/eclipse/gmf/runtime/diagram/ui/resources/editor/parts/DiagramDocumentEditor.java b/org.eclipse.gmf.runtime.diagram.ui.resources.editor/src/org/eclipse/gmf/runtime/diagram/ui/resources/editor/parts/DiagramDocumentEditor.java
index bf3ffb7..568d6bd 100644
--- a/org.eclipse.gmf.runtime.diagram.ui.resources.editor/src/org/eclipse/gmf/runtime/diagram/ui/resources/editor/parts/DiagramDocumentEditor.java
+++ b/org.eclipse.gmf.runtime.diagram.ui.resources.editor/src/org/eclipse/gmf/runtime/diagram/ui/resources/editor/parts/DiagramDocumentEditor.java
@@ -38,6 +38,7 @@
 import org.eclipse.gmf.runtime.diagram.ui.preferences.IPreferenceConstants;
 import org.eclipse.gmf.runtime.diagram.ui.properties.views.PropertiesBrowserPage;
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.DocumentProviderRegistry;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.DocumentProviderRegistry.IDocumentProviderSelector;
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument;
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocumentProvider;
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocument;
@@ -45,7 +46,6 @@
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider;
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IElementStateListener;
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.MEditingDomainElement;
-import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.DocumentProviderRegistry.IDocumentProviderSelector;
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.internal.EditorPlugin;
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.internal.l10n.EditorMessages;
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.internal.palette.EditorInputPaletteContent;
@@ -78,6 +78,7 @@
 import org.eclipse.ui.IPartService;
 import org.eclipse.ui.IReusableEditor;
 import org.eclipse.ui.IWindowListener;
+import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchPartSite;
 import org.eclipse.ui.IWorkbenchWindow;
@@ -495,13 +496,27 @@
 
 		enableSanityChecking(false);
 
-		Display display= getSite().getShell().getDisplay();
-		display.asyncExec(new Runnable() {
-			public void run() {
-				if (getGraphicalViewer() != null)
-					getSite().getPage().closeEditor(DiagramDocumentEditor.this, save);
-			}
-		});
+		Display display = Display.getCurrent();
+		if (display == null) {
+			display = PlatformUI.getWorkbench().getDisplay();
+		}
+		if (!display.isDisposed()) {
+			display.asyncExec(new Runnable() {
+				public void run() {
+					if (getGraphicalViewer() != null) {
+						if (!PlatformUI.getWorkbench().isClosing()) {
+							IWorkbenchPartSite site = getSite();
+							if (site != null) {
+								IWorkbenchPage page = site.getPage();
+								if (page != null) {
+									page.closeEditor(DiagramDocumentEditor.this, save);
+								}
+							}
+						}
+					}
+				}
+			});
+		}
 	}
 
 	/**