diff --git a/org.eclipse.ui.genericeditor/META-INF/MANIFEST.MF b/org.eclipse.ui.genericeditor/META-INF/MANIFEST.MF
index c132b01..f18ce3f 100644
--- a/org.eclipse.ui.genericeditor/META-INF/MANIFEST.MF
+++ b/org.eclipse.ui.genericeditor/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.ui.genericeditor;singleton:=true
-Bundle-Version: 1.1.300.qualifier
+Bundle-Version: 1.1.400.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.ui.workbench.texteditor;bundle-version="3.10.0",
@@ -14,11 +14,13 @@
  org.eclipse.jface;bundle-version="3.12.0",
  org.eclipse.ui.ide;bundle-version="3.12.0",
  org.eclipse.core.resources;bundle-version="3.11.0",
- org.eclipse.core.expressions;bundle-version="3.6.0"
+ org.eclipse.core.expressions;bundle-version="3.6.0",
+ org.eclipse.compare;resolution:=optional
 Export-Package: org.eclipse.ui.internal.genericeditor;x-internal:=true,
  org.eclipse.ui.internal.genericeditor.hover;x-internal:=true,
  org.eclipse.ui.internal.genericeditor.markers;x-internal:=true,
- org.eclipse.ui.internal.genericeditor.preferences;x-internal:=true
+ org.eclipse.ui.internal.genericeditor.preferences;x-internal:=true,
+ org.eclipse.ui.internal.genericeditor.compare;x-internal:=true
 Bundle-Activator: org.eclipse.ui.internal.genericeditor.GenericEditorPlugin
 Bundle-Localization: plugin
 Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.ui.genericeditor/plugin.xml b/org.eclipse.ui.genericeditor/plugin.xml
index c26db6a..416f17b 100644
--- a/org.eclipse.ui.genericeditor/plugin.xml
+++ b/org.eclipse.ui.genericeditor/plugin.xml
@@ -209,4 +209,18 @@
    <extension point="org.eclipse.core.runtime.preferences">
       <initializer class="org.eclipse.ui.internal.genericeditor.preferences.GenericEditorPluginPreferenceInitializer"/>
    </extension>
+   <extension
+         point="org.eclipse.compare.contentViewers">
+      <viewer
+            class="org.eclipse.ui.internal.genericeditor.compare.CompareViewerCreator"
+            id="org.eclipse.ui.genericeditor.compareViewer">
+      </viewer>
+   </extension>
+   <extension
+         point="org.eclipse.compare.contentMergeViewers">
+      <viewer
+            class="org.eclipse.ui.internal.genericeditor.compare.CompareViewerCreator"
+            id="org.eclipse.ui.genericeditor.compareViewer">
+      </viewer>
+   </extension>
 </plugin>
diff --git a/org.eclipse.ui.genericeditor/pom.xml b/org.eclipse.ui.genericeditor/pom.xml
index f9cbe56..d2026a6 100644
--- a/org.eclipse.ui.genericeditor/pom.xml
+++ b/org.eclipse.ui.genericeditor/pom.xml
@@ -18,6 +18,6 @@
   </parent>
   <groupId>org.eclipse.ui</groupId>
   <artifactId>org.eclipse.ui.genericeditor</artifactId>
-  <version>1.1.300-SNAPSHOT</version>
+  <version>1.1.400-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/org.eclipse.ui.genericeditor/schema/autoEditStrategies.exsd b/org.eclipse.ui.genericeditor/schema/autoEditStrategies.exsd
index 2da6a4d..f5ac51c 100644
--- a/org.eclipse.ui.genericeditor/schema/autoEditStrategies.exsd
+++ b/org.eclipse.ui.genericeditor/schema/autoEditStrategies.exsd
@@ -83,8 +83,9 @@
             A core Expression that controls the enabled of the given auto edit strategies. The viewer, editor, and editor input are registered in the evaluation context as variable:
 
  * &lt;with variable=&quot;viewer&quot;/&gt; : use it if your expression requires the viewer.
- * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor.
- * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input.
+ * &lt;with variable=&quot;document&quot;/&gt; : use it if your expression requires the document.
+ * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor (deprecated, not always set).
+ * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input (deprecated, not always set).
          </documentation>
       </annotation>
       <complexType>
diff --git a/org.eclipse.ui.genericeditor/schema/characterPairMatchers.exsd b/org.eclipse.ui.genericeditor/schema/characterPairMatchers.exsd
index 6890423..e9b444c 100644
--- a/org.eclipse.ui.genericeditor/schema/characterPairMatchers.exsd
+++ b/org.eclipse.ui.genericeditor/schema/characterPairMatchers.exsd
@@ -83,8 +83,9 @@
             A core Expression that controls the enabled of the given character pair matcher. The viewer, editor, and editor input are registered in the evaluation context as variable:
 
  * &lt;with variable=&quot;viewer&quot;/&gt; : use it if your expression requires the viewer.
- * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor.
- * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input.
+ * &lt;with variable=&quot;document&quot;/&gt; : use it if your expression requires the document.
+ * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor (deprecated, not always set).
+ * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input (deprecated, not always set).
          </documentation>
       </annotation>
       <complexType>
diff --git a/org.eclipse.ui.genericeditor/schema/contentAssistProcessors.exsd b/org.eclipse.ui.genericeditor/schema/contentAssistProcessors.exsd
index 53cf18b..2637a3f 100644
--- a/org.eclipse.ui.genericeditor/schema/contentAssistProcessors.exsd
+++ b/org.eclipse.ui.genericeditor/schema/contentAssistProcessors.exsd
@@ -83,8 +83,9 @@
             A core Expression that controls the enabled of the given content assist processor. The viewer, editor, and editor input are registered in the evaluation context as variable:
 
  * &lt;with variable=&quot;viewer&quot;/&gt; : use it if your expression requires the viewer.
- * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor.
- * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input.
+ * &lt;with variable=&quot;document&quot;/&gt; : use it if your expression requires the document.
+ * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor (deprecated, not always set).
+ * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input (deprecated, not always set).
          </documentation>
       </annotation>
       <complexType>
diff --git a/org.eclipse.ui.genericeditor/schema/foldingReconcilers.exsd b/org.eclipse.ui.genericeditor/schema/foldingReconcilers.exsd
index aeab7b5..1e15e42 100644
--- a/org.eclipse.ui.genericeditor/schema/foldingReconcilers.exsd
+++ b/org.eclipse.ui.genericeditor/schema/foldingReconcilers.exsd
@@ -85,8 +85,9 @@
             A core Expression that controls the enabled of the given folding reconciler. The viewer, editor, and editor input are registered in the evaluation context as variable:
 
  * &lt;with variable=&quot;viewer&quot;/&gt; : use it if your expression requires the viewer.
- * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor.
- * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input.
+ * &lt;with variable=&quot;document&quot;/&gt; : use it if your expression requires the document.
+ * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor (deprecated, not always set).
+ * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input (deprecated, not always set).
          </documentation>
       </annotation>
       <complexType>
diff --git a/org.eclipse.ui.genericeditor/schema/highlightReconcilers.exsd b/org.eclipse.ui.genericeditor/schema/highlightReconcilers.exsd
index 5a38766..a457bcf 100644
--- a/org.eclipse.ui.genericeditor/schema/highlightReconcilers.exsd
+++ b/org.eclipse.ui.genericeditor/schema/highlightReconcilers.exsd
@@ -83,8 +83,9 @@
             A core Expression that controls the enabled of the given highlight reconciler. The viewer, editor, and editor input are registered in the evaluation context as variable:
 
  * &lt;with variable=&quot;viewer&quot;/&gt; : use it if your expression requires the viewer.
- * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor.
- * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input.
+ * &lt;with variable=&quot;document&quot;/&gt; : use it if your expression requires the document.
+ * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor (deprecated, not always set).
+ * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input (deprecated, not always set).
          </documentation>
       </annotation>
       <complexType>
diff --git a/org.eclipse.ui.genericeditor/schema/hoverProviders.exsd b/org.eclipse.ui.genericeditor/schema/hoverProviders.exsd
index 42aed90..8df8c75 100644
--- a/org.eclipse.ui.genericeditor/schema/hoverProviders.exsd
+++ b/org.eclipse.ui.genericeditor/schema/hoverProviders.exsd
@@ -112,8 +112,9 @@
             A core Expression that controls the enabled of the given hover provider. The viewer, editor, and editor input are registered in the evaluation context as variable:
 
  * &lt;with variable=&quot;viewer&quot;/&gt; : use it if your expression requires the viewer.
- * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor.
- * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input.
+ * &lt;with variable=&quot;document&quot;/&gt; : use it if your expression requires the document.
+ * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor (deprecated, not always set).
+ * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input (deprecated, not always set).
          </documentation>
       </annotation>
       <complexType>
diff --git a/org.eclipse.ui.genericeditor/schema/presentationReconcilers.exsd b/org.eclipse.ui.genericeditor/schema/presentationReconcilers.exsd
index 175f24b..6ff6fa7 100644
--- a/org.eclipse.ui.genericeditor/schema/presentationReconcilers.exsd
+++ b/org.eclipse.ui.genericeditor/schema/presentationReconcilers.exsd
@@ -83,8 +83,9 @@
             A core Expression that controls the enabled of the given presentation reconciler. The viewer, editor, and editor input are registered in the evaluation context as variable:
 
  * &lt;with variable=&quot;viewer&quot;/&gt; : use it if your expression requires the viewer.
- * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor.
- * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input.
+ * &lt;with variable=&quot;document&quot;/&gt; : use it if your expression requires the document.
+ * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor (deprecated, not always set).
+ * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input (deprecated, not always set).
          </documentation>
       </annotation>
       <complexType>
diff --git a/org.eclipse.ui.genericeditor/schema/reconcilers.exsd b/org.eclipse.ui.genericeditor/schema/reconcilers.exsd
index 604632a..508cf6c 100644
--- a/org.eclipse.ui.genericeditor/schema/reconcilers.exsd
+++ b/org.eclipse.ui.genericeditor/schema/reconcilers.exsd
@@ -83,8 +83,9 @@
             A core Expression that controls the enabled of the given reconciler. The viewer, editor, and editor input are registered in the evaluation context as variable:
 
  * &lt;with variable=&quot;viewer&quot;/&gt; : use it if your expression requires the viewer.
- * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor.
- * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input.
+ * &lt;with variable=&quot;document&quot;/&gt; : use it if your expression requires the document.
+ * &lt;with variable=&quot;editor&quot;/&gt; : use it if your expression requires the editor (deprecated, not always set).
+ * &lt;with variable=&quot;editorInput&quot;/&gt; :  use it if your expression requires the editor input (deprecated, not always set).
          </documentation>
       </annotation>
       <complexType>
diff --git a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/DefaultWordHighlightStrategy.java b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/DefaultWordHighlightStrategy.java
index 0529826..d5bdcba 100644
--- a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/DefaultWordHighlightStrategy.java
+++ b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/DefaultWordHighlightStrategy.java
@@ -46,18 +46,13 @@
 
 /**
  *
- * This Reconciler Strategy is a default stategy which will be present if no
- * other highlightReconcilers are registered for a given content-type. It splits
- * the text into 'words' (which are defined as anything in-between
- * non-alphanumeric characters) and searches the document highlighting all like
- * words.
+ * This Reconciler Strategy is a default stategy which will be present if no other highlightReconcilers are registered for a given content-type. It splits the text into 'words' (which are defined as
+ * anything in-between non-alphanumeric characters) and searches the document highlighting all like words.
  *
- * E.g. if your file contains "t^he dog in the bog" and you leave your caret at
- * ^ you will get both instances of 'the' highlighted.
+ * E.g. if your file contains "t^he dog in the bog" and you leave your caret at ^ you will get both instances of 'the' highlighted.
  *
  */
-public class DefaultWordHighlightStrategy
-		implements IReconcilingStrategy, IReconcilingStrategyExtension, IPreferenceChangeListener {
+public class DefaultWordHighlightStrategy implements IReconcilingStrategy, IReconcilingStrategyExtension, IPreferenceChangeListener {
 
 	private static final String ANNOTATION_TYPE = "org.eclipse.ui.genericeditor.text"; //$NON-NLS-1$
 
@@ -85,7 +80,10 @@
 		}
 
 		String text = document.get();
-		int offset = ((ITextViewerExtension5) sourceViewer).widgetOffset2ModelOffset(textSelection.getOffset());
+		int offset = textSelection.getOffset();
+		if (sourceViewer instanceof ITextViewerExtension5) {
+			offset = ((ITextViewerExtension5) sourceViewer).widgetOffset2ModelOffset(textSelection.getOffset());
+		}
 
 		String word = findCurrentWord(text, offset);
 		if (word == null) {
@@ -97,10 +95,7 @@
 		Map<Annotation, Position> annotationMap = new HashMap<>();
 		while (m.find()) {
 			if (m.group().equals(word)) {
-				annotationMap.put(
-						new Annotation(ANNOTATION_TYPE, false,
-								NLS.bind(Messages.DefaultWordHighlightStrategy_OccurrencesOf, word)),
-						new Position(m.start(), m.end() - m.start()));
+				annotationMap.put(new Annotation(ANNOTATION_TYPE, false, NLS.bind(Messages.DefaultWordHighlightStrategy_OccurrencesOf, word)), new Position(m.start(), m.end() - m.start()));
 			}
 		}
 
@@ -154,21 +149,18 @@
 		preferences.addPreferenceChangeListener(this);
 		this.enabled = preferences.getBoolean(ToggleHighlight.TOGGLE_HIGHLIGHT_PREFERENCE, true);
 		this.sourceViewer = (ISourceViewer) viewer;
-		((IPostSelectionProvider) sourceViewer.getSelectionProvider())
-				.addPostSelectionChangedListener(editorSelectionChangedListener);
+		((IPostSelectionProvider) sourceViewer.getSelectionProvider()).addPostSelectionChangedListener(editorSelectionChangedListener);
 	}
 
 	public void uninstall() {
 		if (sourceViewer != null) {
-			((IPostSelectionProvider) sourceViewer.getSelectionProvider())
-					.removePostSelectionChangedListener(editorSelectionChangedListener);
+			((IPostSelectionProvider) sourceViewer.getSelectionProvider()).removePostSelectionChangedListener(editorSelectionChangedListener);
 		}
 		IEclipsePreferences preferences = InstanceScope.INSTANCE.getNode(GenericEditorPlugin.BUNDLE_ID);
 		preferences.removePreferenceChangeListener(this);
 	}
 
-	@Override
-	public void preferenceChange(PreferenceChangeEvent event) {
+	@Override public void preferenceChange(PreferenceChangeEvent event) {
 		if (event.getKey().equals(ToggleHighlight.TOGGLE_HIGHLIGHT_PREFERENCE)) {
 			this.enabled = Boolean.parseBoolean(event.getNewValue().toString());
 			if (enabled) {
@@ -179,8 +171,7 @@
 		}
 	}
 
-	@Override
-	public void initialReconcile() {
+	@Override public void initialReconcile() {
 		if (sourceViewer != null) {
 			sourceViewer.getTextWidget().getDisplay().asyncExec(() -> {
 				if (sourceViewer != null && sourceViewer.getTextWidget() != null) {
@@ -218,23 +209,19 @@
 		return annotationModel;
 	}
 
-	@Override
-	public void setDocument(IDocument document) {
+	@Override public void setDocument(IDocument document) {
 		this.document = document;
 	}
 
-	@Override
-	public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) {
+	@Override public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) {
 		// Do nothing
 	}
 
-	@Override
-	public void reconcile(IRegion partition) {
+	@Override public void reconcile(IRegion partition) {
 		// Do nothing
 	}
 
-	@Override
-	public void setProgressMonitor(IProgressMonitor monitor) {
+	@Override public void setProgressMonitor(IProgressMonitor monitor) {
 		// Not used
 	}
 }
diff --git a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/ExtensionBasedTextEditor.java b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/ExtensionBasedTextEditor.java
index 2de082d..f1f2c4b 100644
--- a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/ExtensionBasedTextEditor.java
+++ b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/ExtensionBasedTextEditor.java
@@ -34,8 +34,7 @@
 import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
 
 /**
- * A generic code editor that is aimed at being extended by contributions.
- * Behavior is supposed to be added via extensions, not by inheritance.
+ * A generic code editor that is aimed at being extended by contributions. Behavior is supposed to be added via extensions, not by inheritance.
  *
  * @since 1.0
  */
@@ -61,31 +60,26 @@
 	/**
 	 * Initializes the key binding scopes of this generic code editor.
 	 */
-	@Override
-	protected void initializeKeyBindingScopes() {
+	@Override protected void initializeKeyBindingScopes() {
 		setKeyBindingScopes(new String[] { CONTEXT_ID });
 	}
 
-	@Override
-	protected void doSetInput(IEditorInput input) throws CoreException {
+	@Override protected void doSetInput(IEditorInput input) throws CoreException {
 		super.doSetInput(input);
 		configuration.watchDocument(getDocumentProvider().getDocument(input));
 	}
 
-	@Override
-	protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) {
+	@Override protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) {
 		fAnnotationAccess = getAnnotationAccess();
 		fOverviewRuler = createOverviewRuler(getSharedColors());
 
-		ProjectionViewer viewer = new ProjectionViewer(parent, ruler, getOverviewRuler(), isOverviewRulerVisible(),
-				styles);
+		ProjectionViewer viewer = new ProjectionViewer(parent, ruler, getOverviewRuler(), isOverviewRulerVisible(), styles);
 		SourceViewerDecorationSupport support = getSourceViewerDecorationSupport(viewer);
 		configureCharacterPairMatcher(viewer, support);
 		return viewer;
 	}
 
-	@Override
-	public void createPartControl(Composite parent) {
+	@Override public void createPartControl(Composite parent) {
 		super.createPartControl(parent);
 		ProjectionViewer viewer = (ProjectionViewer) getSourceViewer();
 
@@ -93,29 +87,26 @@
 		viewer.doOperation(ProjectionViewer.TOGGLE);
 	}
 
-	@Override
-	protected void initializeEditor() {
+	@Override protected void initializeEditor() {
 		super.initializeEditor();
-		setPreferenceStore(new ChainedPreferenceStore(new IPreferenceStore[] {
-				GenericEditorPreferenceConstants.getPreferenceStore(), EditorsUI.getPreferenceStore() }));
+		setPreferenceStore(new ChainedPreferenceStore(new IPreferenceStore[] { GenericEditorPreferenceConstants.getPreferenceStore(), EditorsUI.getPreferenceStore() }));
 	}
 
 	/**
-	 * Configure the {@link ICharacterPairMatcher} from the
-	 * "org.eclipse.ui.genericeditor.characterPairMatchers" extension point.
+	 * Configure the {@link ICharacterPairMatcher} from the "org.eclipse.ui.genericeditor.characterPairMatchers" extension point.
 	 * 
-	 * @param viewer  the source viewer.
+	 * @param viewer
+	 *            the source viewer.
 	 * 
-	 * @param support the source viewer decoration support.
+	 * @param support
+	 *            the source viewer decoration support.
 	 */
 	private void configureCharacterPairMatcher(ISourceViewer viewer, SourceViewerDecorationSupport support) {
-		List<ICharacterPairMatcher> matchers = GenericEditorPlugin.getDefault().getCharacterPairMatcherRegistry()
-				.getCharacterPairMatchers(viewer, this, configuration.getContentTypes());
+		List<ICharacterPairMatcher> matchers = GenericEditorPlugin.getDefault().getCharacterPairMatcherRegistry().getCharacterPairMatchers(viewer, this, configuration.getContentTypes(viewer));
 		if (!matchers.isEmpty()) {
 			ICharacterPairMatcher matcher = matchers.get(0);
 			support.setCharacterPairMatcher(matcher);
-			support.setMatchingCharacterPainterPreferenceKeys(MATCHING_BRACKETS, MATCHING_BRACKETS_COLOR,
-					HIGHLIGHT_BRACKET_AT_CARET_LOCATION, ENCLOSING_BRACKETS);
+			support.setMatchingCharacterPainterPreferenceKeys(MATCHING_BRACKETS, MATCHING_BRACKETS_COLOR, HIGHLIGHT_BRACKET_AT_CARET_LOCATION, ENCLOSING_BRACKETS);
 		}
 	}
 }
diff --git a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/ExtensionBasedTextViewerConfiguration.java b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/ExtensionBasedTextViewerConfiguration.java
index 28a2c64..f35d79b 100644
--- a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/ExtensionBasedTextViewerConfiguration.java
+++ b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/ExtensionBasedTextViewerConfiguration.java
@@ -18,6 +18,7 @@
 package org.eclipse.ui.internal.genericeditor;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -25,6 +26,8 @@
 import java.util.Queue;
 import java.util.Set;
 
+import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.filebuffers.ITextFileBuffer;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.content.IContentType;
@@ -45,7 +48,6 @@
 import org.eclipse.jface.text.reconciler.IReconciler;
 import org.eclipse.jface.text.source.ISourceViewer;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.editors.text.TextSourceViewerConfiguration;
 import org.eclipse.ui.internal.editors.text.EditorsPlugin;
 import org.eclipse.ui.internal.genericeditor.folding.DefaultFoldingReconciler;
@@ -55,15 +57,13 @@
 import org.eclipse.ui.texteditor.spelling.SpellingCorrectionProcessor;
 
 /**
- * The configuration of the {@link ExtensionBasedTextEditor}. It registers the
- * proxy composite for hover, completion, syntax highlighting, and then those
- * proxy take care of resolving to the right extensions on-demand.
+ * The configuration of the {@link ExtensionBasedTextEditor}. It registers the proxy composite for hover, completion, syntax highlighting, and then those proxy take care of resolving to the right
+ * extensions on-demand.
  *
  * @since 1.0
  */
 @SuppressWarnings("restriction")
-public final class ExtensionBasedTextViewerConfiguration extends TextSourceViewerConfiguration
-		implements IDocumentPartitioningListener {
+public final class ExtensionBasedTextViewerConfiguration extends TextSourceViewerConfiguration implements IDocumentPartitioningListener {
 
 	private ITextEditor editor;
 	private Set<IContentType> contentTypes;
@@ -74,24 +74,35 @@
 
 	/**
 	 *
-	 * @param editor          the editor we're creating.
-	 * @param preferenceStore the preference store.
+	 * @param editor
+	 *            the editor we're creating.
+	 * @param preferenceStore
+	 *            the preference store.
 	 */
 	public ExtensionBasedTextViewerConfiguration(ITextEditor editor, IPreferenceStore preferenceStore) {
 		super(preferenceStore);
 		this.editor = editor;
-		this.editor.addPropertyListener((source, propId) -> {
-			if (propId == IEditorPart.PROP_INPUT) {
-				watchDocument(editor.getDocumentProvider().getDocument(editor.getEditorInput()));
-			}
-		});
 	}
 
-	Set<IContentType> getContentTypes() {
+	Set<IContentType> getContentTypes(ISourceViewer viewer) {
 		if (this.contentTypes == null) {
 			this.contentTypes = new LinkedHashSet<>();
-			Queue<IContentType> types = new LinkedList<>(Arrays
-					.asList(Platform.getContentTypeManager().findContentTypesFor(editor.getEditorInput().getName())));
+			String fileName = null;
+			if (this.editor != null) {
+				fileName = editor.getEditorInput().getName();
+			} else {
+				IDocument document = viewer.getDocument();
+				if (document != null) {
+					ITextFileBuffer buffer = FileBuffers.getTextFileBufferManager().getTextFileBuffer(document);
+					if (buffer != null) {
+						fileName = buffer.getLocation().lastSegment();
+					}
+				}
+			}
+			if (fileName == null) {
+				return Collections.emptySet();
+			}
+			Queue<IContentType> types = new LinkedList<>(Arrays.asList(Platform.getContentTypeManager().findContentTypesFor(fileName)));
 			while (!types.isEmpty()) {
 				IContentType type = types.poll();
 				this.contentTypes.add(type);
@@ -104,10 +115,8 @@
 		return this.contentTypes;
 	}
 
-	@Override
-	public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
-		List<ITextHover> hovers = GenericEditorPlugin.getDefault().getHoverRegistry().getAvailableHovers(sourceViewer,
-				editor, getContentTypes());
+	@Override public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
+		List<ITextHover> hovers = GenericEditorPlugin.getDefault().getHoverRegistry().getAvailableHovers(sourceViewer, editor, getContentTypes(sourceViewer));
 		if (hovers == null || hovers.isEmpty()) {
 			return null;
 		} else if (hovers.size() == 1) {
@@ -117,8 +126,7 @@
 		}
 	}
 
-	@Override
-	public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
+	@Override public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
 		ContentAssistProcessorRegistry registry = GenericEditorPlugin.getDefault().getContentAssistProcessorRegistry();
 		contentAssistant = new ContentAssistant(true);
 		contentAssistant.setContextInformationPopupOrientation(ContentAssistant.CONTEXT_INFO_BELOW);
@@ -126,7 +134,7 @@
 		contentAssistant.setAutoActivationDelay(0);
 		contentAssistant.enableColoredLabels(true);
 		contentAssistant.enableAutoActivation(true);
-		this.processors = registry.getContentAssistProcessors(sourceViewer, editor, getContentTypes());
+		this.processors = registry.getContentAssistProcessors(sourceViewer, editor, getContentTypes(sourceViewer));
 		if (this.processors.isEmpty()) {
 			this.processors.add(new DefaultContentAssistProcessor());
 		}
@@ -137,19 +145,17 @@
 			associateTokenContentTypes(this.document);
 		}
 		contentAssistant.setInformationControlCreator(new AbstractReusableInformationControlCreator() {
-			@Override
-			protected IInformationControl doCreateInformationControl(Shell parent) {
+			@Override protected IInformationControl doCreateInformationControl(Shell parent) {
 				return new DefaultInformationControl(parent);
 			}
 		});
+		watchDocument(sourceViewer.getDocument());
 		return contentAssistant;
 	}
 
-	@Override
-	public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
+	@Override public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
 		PresentationReconcilerRegistry registry = GenericEditorPlugin.getDefault().getPresentationReconcilerRegistry();
-		List<IPresentationReconciler> reconciliers = registry.getPresentationReconcilers(sourceViewer, editor,
-				getContentTypes());
+		List<IPresentationReconciler> reconciliers = registry.getPresentationReconcilers(sourceViewer, editor, getContentTypes(sourceViewer));
 		if (!reconciliers.isEmpty()) {
 			return reconciliers.get(0);
 		}
@@ -163,13 +169,14 @@
 		if (this.document != null) {
 			this.document.removeDocumentPartitioningListener(this);
 		}
-		this.document = document;
-		associateTokenContentTypes(document);
-		document.addDocumentPartitioningListener(this);
+		if (document != null) {
+			this.document = document;
+			associateTokenContentTypes(document);
+			document.addDocumentPartitioningListener(this);
+		}
 	}
 
-	@Override
-	public void documentPartitioningChanged(IDocument document) {
+	@Override public void documentPartitioningChanged(IDocument document) {
 		associateTokenContentTypes(document);
 	}
 
@@ -184,33 +191,27 @@
 		}
 	}
 
-	@Override
-	public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) {
+	@Override public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) {
 		QuickAssistAssistant quickAssistAssistant = new QuickAssistAssistant();
-		CompositeQuickAssistProcessor processor = new CompositeQuickAssistProcessor(
-				Arrays.asList(new MarkerResoltionQuickAssistProcessor(), new SpellingCorrectionProcessor()));
+		CompositeQuickAssistProcessor processor = new CompositeQuickAssistProcessor(Arrays.asList(new MarkerResoltionQuickAssistProcessor(), new SpellingCorrectionProcessor()));
 		quickAssistAssistant.setQuickAssistProcessor(processor);
-		quickAssistAssistant.setRestoreCompletionProposalSize(
-				EditorsPlugin.getDefault().getDialogSettingsSection("quick_assist_proposal_size")); //$NON-NLS-1$
-		quickAssistAssistant.setInformationControlCreator(
-				parent -> new DefaultInformationControl(parent, EditorsPlugin.getAdditionalInfoAffordanceString()));
+		quickAssistAssistant.setRestoreCompletionProposalSize(EditorsPlugin.getDefault().getDialogSettingsSection("quick_assist_proposal_size")); //$NON-NLS-1$
+		quickAssistAssistant.setInformationControlCreator(parent -> new DefaultInformationControl(parent, EditorsPlugin.getAdditionalInfoAffordanceString()));
 		return quickAssistAssistant;
 	}
 
-	@Override
-	public IReconciler getReconciler(ISourceViewer sourceViewer) {
+	@Override public IReconciler getReconciler(ISourceViewer sourceViewer) {
 		ReconcilerRegistry registry = GenericEditorPlugin.getDefault().getReconcilerRegistry();
-		List<IReconciler> reconcilers = registry.getReconcilers(sourceViewer, editor, getContentTypes());
+		List<IReconciler> reconcilers = registry.getReconcilers(sourceViewer, editor, getContentTypes(sourceViewer));
 		// Fill with highlight reconcilers
-		List<IReconciler> highlightReconcilers = registry.getHighlightReconcilers(sourceViewer, editor,
-				getContentTypes());
+		List<IReconciler> highlightReconcilers = registry.getHighlightReconcilers(sourceViewer, editor, getContentTypes(sourceViewer));
 		if (!highlightReconcilers.isEmpty()) {
 			reconcilers.addAll(highlightReconcilers);
 		} else {
 			reconcilers.add(new DefaultWordHighlightReconciler());
 		}
 		// Fill with folding reconcilers
-		List<IReconciler> foldingReconcilers = registry.getFoldingReconcilers(sourceViewer, editor, getContentTypes());
+		List<IReconciler> foldingReconcilers = registry.getFoldingReconcilers(sourceViewer, editor, getContentTypes(sourceViewer));
 		if (!foldingReconcilers.isEmpty()) {
 			reconcilers.addAll(foldingReconcilers);
 		} else {
@@ -223,19 +224,16 @@
 		return null;
 	}
 
-	@Override
-	public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) {
+	@Override public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) {
 		AutoEditStrategyRegistry registry = GenericEditorPlugin.getDefault().getAutoEditStrategyRegistry();
-		List<IAutoEditStrategy> editStrategies = registry.getAutoEditStrategies(sourceViewer, editor,
-				getContentTypes());
+		List<IAutoEditStrategy> editStrategies = registry.getAutoEditStrategies(sourceViewer, editor, getContentTypes(sourceViewer));
 		if (!editStrategies.isEmpty()) {
 			return editStrategies.toArray(new IAutoEditStrategy[editStrategies.size()]);
 		}
 		return super.getAutoEditStrategies(sourceViewer, contentType);
 	}
 
-	@Override
-	protected Map<String, IAdaptable> getHyperlinkDetectorTargets(ISourceViewer sourceViewer) {
+	@Override protected Map<String, IAdaptable> getHyperlinkDetectorTargets(ISourceViewer sourceViewer) {
 		Map<String, IAdaptable> targets = super.getHyperlinkDetectorTargets(sourceViewer);
 		targets.put("org.eclipse.ui.genericeditor.GenericEditor", editor); //$NON-NLS-1$
 		return targets;
diff --git a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/GenericContentTypeRelatedExtension.java b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/GenericContentTypeRelatedExtension.java
index b707112..7159e37 100644
--- a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/GenericContentTypeRelatedExtension.java
+++ b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/GenericContentTypeRelatedExtension.java
@@ -28,11 +28,10 @@
 import org.eclipse.ui.texteditor.ITextEditor;
 
 /**
- * This class wraps and proxies an instance of T provided through extensions
- * and loads it lazily when it can contribute to the editor, then delegates all operations to
- * actual instance.
+ * This class wraps and proxies an instance of T provided through extensions and loads it lazily when it can contribute to the editor, then delegates all operations to actual instance.
  * 
- * @param <T> the actual type to proxy, typically the one defined on the extension point.
+ * @param <T>
+ *            the actual type to proxy, typically the one defined on the extension point.
  */
 public class GenericContentTypeRelatedExtension<T> {
 	private static final String ID_ATTRIBUTE = "id"; //$NON-NLS-1$
@@ -46,13 +45,11 @@
 
 	public GenericContentTypeRelatedExtension(IConfigurationElement element) throws Exception {
 		this.extension = element;
-		this.targetContentType = Platform.getContentTypeManager()
-				.getContentType(element.getAttribute(CONTENT_TYPE_ATTRIBUTE));
+		this.targetContentType = Platform.getContentTypeManager().getContentType(element.getAttribute(CONTENT_TYPE_ATTRIBUTE));
 		this.enabledWhen = buildEnabledWhen(element);
 	}
 
-	@SuppressWarnings("unchecked")
-	public T createDelegate() {
+	@SuppressWarnings("unchecked") public T createDelegate() {
 		try {
 			return (T) extension.createExecutableExtension(CLASS_ATTRIBUTE);
 		} catch (CoreException e) {
@@ -62,22 +59,21 @@
 	}
 
 	/**
-	 * Returns the expression {@link Expression} declared in the
-	 * <code>enabledWhen</code> element.
+	 * Returns the expression {@link Expression} declared in the <code>enabledWhen</code> element.
 	 *
-	 * @param configElement the configuration element
-	 * @return the expression {@link Expression} declared in the enabledWhen
-	 *         element.
-	 * @throws CoreException when enabledWhen expression is not valid.
+	 * @param configElement
+	 *            the configuration element
+	 * @return the expression {@link Expression} declared in the enabledWhen element.
+	 * @throws CoreException
+	 *             when enabledWhen expression is not valid.
 	 */
 	private static Expression buildEnabledWhen(IConfigurationElement configElement) throws CoreException {
 		final IConfigurationElement[] children = configElement.getChildren(ENABLED_WHEN_ATTRIBUTE);
 		if (children.length > 0) {
 			IConfigurationElement[] subChildren = children[0].getChildren();
 			if (subChildren.length != 1) {
-				throw new CoreException(new Status(IStatus.ERROR, GenericEditorPlugin.BUNDLE_ID,
-						"One <enabledWhen> element is accepted. Disabling " //$NON-NLS-1$
-								+ configElement.getAttribute(ID_ATTRIBUTE)));
+				throw new CoreException(new Status(IStatus.ERROR, GenericEditorPlugin.BUNDLE_ID, "One <enabledWhen> element is accepted. Disabling " //$NON-NLS-1$
+						+ configElement.getAttribute(ID_ATTRIBUTE)));
 			}
 			final ElementHandler elementHandler = ElementHandler.getDefault();
 			final ExpressionConverter converter = ExpressionConverter.getDefault();
@@ -87,28 +83,32 @@
 	}
 
 	/**
-	 * Returns true if the given viewer, editor matches the enabledWhen expression
-	 * and false otherwise.
+	 * Returns true if the given viewer, editor matches the enabledWhen expression and false otherwise.
 	 *
-	 * @param viewer the viewer
-	 * @param editor the editor
-	 * @return true if the given viewer, editor matches the enabledWhen expression
-	 *         and false otherwise.
+	 * @param viewer
+	 *            the viewer
+	 * @param editor
+	 *            the editor
+	 * @return true if the given viewer, editor matches the enabledWhen expression and false otherwise.
 	 */
 	public boolean matches(ISourceViewer viewer, ITextEditor editor) {
 		if (enabledWhen == null) {
 			return true;
 		}
-		EvaluationContext context = new EvaluationContext(null, editor);
+		EvaluationContext context = new EvaluationContext(null, editor != null ? editor : viewer);
 		context.setAllowPluginActivation(true);
 		context.addVariable("viewer", viewer); //$NON-NLS-1$
-		context.addVariable("editor", editor); //$NON-NLS-1$
-		context.addVariable("editorInput", editor.getEditorInput()); //$NON-NLS-1$
+		if (viewer.getDocument() != null) {
+			context.addVariable("document", viewer.getDocument()); //$NON-NLS-1$
+		}
+		if (editor != null) {
+			context.addVariable("editor", editor); //$NON-NLS-1$
+			context.addVariable("editorInput", editor.getEditorInput()); //$NON-NLS-1$
+		}
 		try {
 			return enabledWhen.evaluate(context) == EvaluationResult.TRUE;
 		} catch (CoreException e) {
-			GenericEditorPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, GenericEditorPlugin.BUNDLE_ID,
-					"Error while 'enabledWhen' evaluation", e)); //$NON-NLS-1$
+			GenericEditorPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, GenericEditorPlugin.BUNDLE_ID, "Error while 'enabledWhen' evaluation", e)); //$NON-NLS-1$
 			return false;
 		}
 	}
diff --git a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/compare/CompareViewerCreator.java b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/compare/CompareViewerCreator.java
new file mode 100644
index 0000000..22e9a96
--- /dev/null
+++ b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/compare/CompareViewerCreator.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Red Hat Inc. 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:
+ * - Mickael Istria (Red Hat Inc.)
+ *******************************************************************************/
+package org.eclipse.ui.internal.genericeditor.compare;
+
+import org.eclipse.compare.CompareConfiguration;
+import org.eclipse.compare.IViewerCreator;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.widgets.Composite;
+
+public class CompareViewerCreator implements IViewerCreator {
+
+	@Override public Viewer createViewer(Composite parent, CompareConfiguration compareConfiguration) {
+		return new GenericEditorMergeViewer(parent, compareConfiguration);
+	}
+
+}
diff --git a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/compare/GenericEditorMergeViewer.java b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/compare/GenericEditorMergeViewer.java
new file mode 100644
index 0000000..296876c
--- /dev/null
+++ b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/compare/GenericEditorMergeViewer.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Red Hat Inc. 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:
+ * - Mickael Istria (Red Hat Inc.)
+ *******************************************************************************/
+package org.eclipse.ui.internal.genericeditor.compare;
+
+import org.eclipse.compare.CompareConfiguration;
+import org.eclipse.compare.contentmergeviewer.TextMergeViewer;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextInputListener;
+import org.eclipse.jface.text.TextViewer;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.internal.genericeditor.ExtensionBasedTextViewerConfiguration;
+import org.eclipse.ui.internal.genericeditor.GenericEditorPlugin;
+
+public class GenericEditorMergeViewer extends TextMergeViewer {
+
+	public GenericEditorMergeViewer(Composite parent, CompareConfiguration configuration) {
+		super(parent, configuration);
+	}
+
+	@Override protected SourceViewer createSourceViewer(Composite parent, int textOrientation) {
+		SourceViewer res = super.createSourceViewer(parent, textOrientation);
+		res.addTextInputListener(new ITextInputListener() {
+			@Override public void inputDocumentChanged(IDocument oldInput, IDocument newInput) {
+				configureTextViewer(res);
+			}
+
+			@Override public void inputDocumentAboutToBeChanged(IDocument oldInput, IDocument newInput) {
+				// Nothing to do
+			}
+		});
+		return res;
+	}
+
+	@Override protected void configureTextViewer(TextViewer textViewer) {
+		if (textViewer.getDocument() != null && textViewer instanceof ISourceViewer) {
+			((ISourceViewer) textViewer).configure(new ExtensionBasedTextViewerConfiguration(null, GenericEditorPlugin.getDefault().getPreferenceStore()));
+		}
+	}
+
+}
diff --git a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/folding/DefaultFoldingReconciler.java b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/folding/DefaultFoldingReconciler.java
index 694f5ff..cb88382 100644
--- a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/folding/DefaultFoldingReconciler.java
+++ b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/folding/DefaultFoldingReconciler.java
@@ -29,42 +29,39 @@
 		this.foldingStrategy = new IndentFoldingStrategy();
 	}
 
-	@Override
-	public void install(ITextViewer textViewer) {
+	@Override public void install(ITextViewer textViewer) {
 		super.install(textViewer);
-		ProjectionViewer viewer = (ProjectionViewer) textViewer;
-		foldingStrategy.setViewer(viewer);
+		if (textViewer instanceof ProjectionViewer) {
+			ProjectionViewer viewer = (ProjectionViewer) textViewer;
+			foldingStrategy.setViewer(viewer);
+		}
 	}
 
-	@Override
-	public void uninstall() {
+	@Override public void uninstall() {
 		super.uninstall();
-		foldingStrategy.uninstall();
+		if (foldingStrategy != null) {
+			foldingStrategy.uninstall();
+		}
 	}
 
-	@Override
-	protected void process(DirtyRegion dirtyRegion) {
+	@Override protected void process(DirtyRegion dirtyRegion) {
 		foldingStrategy.reconcile(dirtyRegion, null);
 	}
 
-	@Override
-	protected void reconcilerDocumentChanged(IDocument newDocument) {
+	@Override protected void reconcilerDocumentChanged(IDocument newDocument) {
 		foldingStrategy.setDocument(newDocument);
 	}
 
-	@Override
-	public IReconcilingStrategy getReconcilingStrategy(String contentType) {
+	@Override public IReconcilingStrategy getReconcilingStrategy(String contentType) {
 		return foldingStrategy;
 	}
 
-	@Override
-	public void setProgressMonitor(IProgressMonitor monitor) {
+	@Override public void setProgressMonitor(IProgressMonitor monitor) {
 		super.setProgressMonitor(monitor);
 		foldingStrategy.setProgressMonitor(monitor);
 	}
 
-	@Override
-	protected void initialProcess() {
+	@Override protected void initialProcess() {
 		super.initialProcess();
 		foldingStrategy.initialReconcile();
 	}
diff --git a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/markers/MarkerAnnotationHover.java b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/markers/MarkerAnnotationHover.java
index 867d548..a5ba82e 100644
--- a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/markers/MarkerAnnotationHover.java
+++ b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/markers/MarkerAnnotationHover.java
@@ -14,6 +14,7 @@
 package org.eclipse.ui.internal.genericeditor.markers;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.core.resources.IMarker;
@@ -38,25 +39,23 @@
 		if (!(annotation instanceof MarkerAnnotation)) {
 			return false;
 		}
-		AnnotationPreference preference= EditorsUI.getAnnotationPreferenceLookup().getAnnotationPreference(annotation);
+		AnnotationPreference preference = EditorsUI.getAnnotationPreferenceLookup().getAnnotationPreference(annotation);
 		if (preference == null) {
 			return false;
 		}
-		String key= preference.getTextPreferenceKey();
+		String key = preference.getTextPreferenceKey();
 		if (key != null) {
 			if (!EditorsUI.getPreferenceStore().getBoolean(key))
 				return false;
 		} else {
-			key= preference.getHighlightPreferenceKey();
+			key = preference.getHighlightPreferenceKey();
 			if (key == null || !EditorsUI.getPreferenceStore().getBoolean(key))
 				return false;
 		}
 		return true;
 	}
 
-
-	@Override
-	public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
+	@Override public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
 		Object hoverInfo = getHoverInfo2(textViewer, hoverRegion);
 		if (hoverInfo == null) {
 			return null;
@@ -64,12 +63,11 @@
 		return hoverInfo.toString();
 	}
 
-	@Override
-	public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
+	@Override public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
 		if (!(textViewer instanceof ISourceViewerExtension2)) {
 			return null;
 		}
-		ISourceViewerExtension2 viewer = (ISourceViewerExtension2)textViewer;
+		ISourceViewerExtension2 viewer = (ISourceViewerExtension2) textViewer;
 		List<MarkerAnnotation> annotations = findMarkerAnnotations(viewer, new Region(offset, 0));
 		if (annotations.isEmpty()) {
 			return null;
@@ -86,12 +84,11 @@
 		return new Region(highestOffsetStart, Math.max(0, lowestOffsetEnd - highestOffsetStart));
 	}
 
-	@Override
-	public List<IMarker> getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
+	@Override public List<IMarker> getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
 		if (!(textViewer instanceof ISourceViewerExtension2)) {
 			return null;
 		}
-		List<MarkerAnnotation> annotations = findMarkerAnnotations((ISourceViewerExtension2)textViewer, hoverRegion);
+		List<MarkerAnnotation> annotations = findMarkerAnnotations((ISourceViewerExtension2) textViewer, hoverRegion);
 		if (annotations.isEmpty()) {
 			return null;
 		}
@@ -101,23 +98,25 @@
 		}
 		return markers;
 	}
-	
+
 	private static List<MarkerAnnotation> findMarkerAnnotations(ISourceViewerExtension2 viewer, IRegion region) {
 		List<MarkerAnnotation> res = new ArrayList<>();
 		IAnnotationModel annotationModel = viewer.getVisualAnnotationModel();
+		if (annotationModel == null) {
+			return Collections.emptyList();
+		}
 		annotationModel.getAnnotationIterator().forEachRemaining(annotation -> {
 			if (isIncluded(annotation)) {
 				Position position = annotationModel.getPosition(annotation);
 				if (region.getOffset() >= position.getOffset() && region.getOffset() + region.getLength() <= position.getOffset() + position.getLength()) {
-					res.add((MarkerAnnotation)annotation);
+					res.add((MarkerAnnotation) annotation);
 				}
 			}
 		});
 		return res;
 	}
 
-	@Override
-	public IInformationControlCreator getHoverControlCreator() {
+	@Override public IInformationControlCreator getHoverControlCreator() {
 		return new MarkerHoverControlCreator();
 	}
 
