refactoring, so it can be used without subclassing
diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/compare/ScriptMergeViewer.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/compare/ScriptMergeViewer.java
index eb8559d..9d842ca 100644
--- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/compare/ScriptMergeViewer.java
+++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/compare/ScriptMergeViewer.java
@@ -11,6 +11,8 @@
*******************************************************************************/
package org.eclipse.dltk.ui.compare;
+import java.util.Stack;
+
import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.contentmergeviewer.TextMergeViewer;
import org.eclipse.core.runtime.Assert;
@@ -32,7 +34,24 @@
* so it descendants should not be anonymous classes, because their class name
* is unpredictable.
*/
-public abstract class ScriptMergeViewer extends TextMergeViewer {
+public class ScriptMergeViewer extends TextMergeViewer {
+
+ private static final Stack<IDLTKUILanguageToolkit> toolkitStorage = new Stack<IDLTKUILanguageToolkit>();
+
+ /*
+ * Unfortunately, super constructor creates controls and calls getTitle().
+ * But the fields of this instance aren't initialized yet. So, this
+ * workaround is used to temporary save toolkit into the static variable.
+ */
+ private static int pushToolkit(IDLTKUILanguageToolkit toolkit) {
+ Assert.isNotNull(toolkit);
+ toolkitStorage.push(toolkit);
+ return SWT.LEFT_TO_RIGHT;
+ }
+
+ private static void popToolkit() {
+ toolkitStorage.pop();
+ }
private final IDLTKUILanguageToolkit fToolkit;
@@ -43,8 +62,8 @@
*/
public ScriptMergeViewer(Composite parent,
CompareConfiguration configuration, IDLTKUILanguageToolkit toolkit) {
- super(parent, SWT.LEFT_TO_RIGHT, configuration);
- Assert.isNotNull(toolkit);
+ super(parent, pushToolkit(toolkit), configuration);
+ popToolkit();
this.fToolkit = toolkit;
}
@@ -54,16 +73,20 @@
.getLanguageToolkit(natureId));
}
+ protected IDLTKUILanguageToolkit getToolkit() {
+ return fToolkit != null ? fToolkit : toolkitStorage.peek();
+ }
+
protected ScriptTextTools getTextTools() {
- return fToolkit.getTextTools();
+ return getToolkit().getTextTools();
}
protected IPreferenceStore getPreferenceStore() {
- return fToolkit.getPreferenceStore();
+ return getToolkit().getPreferenceStore();
}
public String getTitle() {
- return NLS.bind("{0} Compare", fToolkit.getCoreToolkit()
+ return NLS.bind("{0} Compare", getToolkit().getCoreToolkit()
.getLanguageName());
}