Bug 448968 - NPE in ContentMergeViewer$ContentMergeViewerLayout.layout

Half of the fix for the NPE in JavaReconciler. The other half lives in
JDT UI). The JDT fix makes the source viewer disposal happen earlier,
which causes some values to be null during teardown which weren't null
previously. This adds the null checks but not the code which reorders
the events.

Change-Id: I3cf940afd2c87533d87e4d0c981256eb0da46f70
Signed-off-by: Stefan Xenos <sxenos@gmail.com>
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
index 5922600..45504d9 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
@@ -564,7 +564,7 @@
 				 * input is disposed at the end making it possible to refer
 				 * during widgets disposal.
 				 */
-				Composite composite = fComposite;
+				Composite composite = (Composite)e.widget;
 				Control control = composite;
 				while (composite.getChildren().length > 0) {
 					control = composite.getChildren()[composite.getChildren().length - 1];
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
index 49da7cd..32c9354 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
@@ -904,14 +904,17 @@
 				provider.removeElementStateListener(this);
 			}
 			// If we have a listener registered with the widget, remove it
-			if (fSourceViewer != null && !fSourceViewer.getSourceViewer().getTextWidget().isDisposed()) {
-				if (fNeedsValidation) {
-					fSourceViewer.getSourceViewer().getTextWidget().removeVerifyListener(this);
-					fNeedsValidation = false;
-				}
-				IDocument oldDoc= internalGetDocument(fSourceViewer);
-				if (oldDoc != null) {
-					oldDoc.removeDocumentListener(this);
+			if (fSourceViewer != null) {
+				StyledText textWidget = fSourceViewer.getSourceViewer().getTextWidget();
+				if (textWidget != null && !textWidget.isDisposed()) {
+					if (fNeedsValidation) {
+						fSourceViewer.getSourceViewer().getTextWidget().removeVerifyListener(this);
+						fNeedsValidation = false;
+					}
+					IDocument oldDoc= internalGetDocument(fSourceViewer);
+					if (oldDoc != null) {
+						oldDoc.removeDocumentListener(this);
+					}
 				}
 			}
 			clearCachedDocument();