refactory: added UI removed from core plugin.
[phpeclipse.git] / net.sourceforge.phpeclipse.ui / src / net / sourceforge / phpdt / internal / ui / text / JavaCompositeReconcilingStrategy.java
diff --git a/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/text/JavaCompositeReconcilingStrategy.java b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/text/JavaCompositeReconcilingStrategy.java
new file mode 100644 (file)
index 0000000..77423a6
--- /dev/null
@@ -0,0 +1,152 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.ui.text;
+
+import net.sourceforge.phpdt.internal.ui.text.java.IProblemRequestorExtension;
+import net.sourceforge.phpdt.internal.ui.text.java.JavaReconcilingStrategy;
+import net.sourceforge.phpdt.internal.ui.text.spelling.SpellReconcileStrategy;
+import net.sourceforge.phpdt.ui.PreferenceConstants;
+import net.sourceforge.phpeclipse.ui.WebUI;
+//import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.reconciler.DirtyRegion;
+import org.eclipse.jface.text.reconciler.IReconcilingStrategy;
+import org.eclipse.jface.text.source.IAnnotationModel;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+/**
+ * Reconciling strategy for Java code. This is a composite strategy containing
+ * the regular java model reconciler and the comment spell checking strategy.
+ * 
+ * @since 3.0
+ */
+public class JavaCompositeReconcilingStrategy extends
+               CompositeReconcilingStrategy {
+
+       private ITextEditor fEditor;
+
+       private JavaReconcilingStrategy fJavaStrategy;
+
+       /**
+        * Creates a new Java reconciling strategy.
+        * 
+        * @param editor
+        *            the editor of the strategy's reconciler
+        * @param documentPartitioning
+        *            the document partitioning this strategy uses for configuration
+        */
+       public JavaCompositeReconcilingStrategy(ITextEditor editor,
+                       String documentPartitioning) {
+               fEditor = editor;
+               fJavaStrategy = new JavaReconcilingStrategy(editor);
+               setReconcilingStrategies(new IReconcilingStrategy[] {
+                               fJavaStrategy,
+                               new SpellReconcileStrategy(editor, documentPartitioning,
+                                               PreferenceConstants.getPreferenceStore()) });
+       }
+
+       /**
+        * Returns the problem requestor for the editor's input element.
+        * 
+        * @return the problem requestor for the editor's input element
+        */
+       private IProblemRequestorExtension getProblemRequestorExtension() {
+               IDocumentProvider p = fEditor.getDocumentProvider();
+               if (p == null) {
+                       try {
+                               // work around for
+                               // https://bugs.eclipse.org/bugs/show_bug.cgi?id=51522
+                               p = WebUI.getDefault()
+                                               .getCompilationUnitDocumentProvider();
+                       } catch (NullPointerException npe) {
+                               return null;
+                       }
+               }
+               IAnnotationModel m = p.getAnnotationModel(fEditor.getEditorInput());
+               if (m instanceof IProblemRequestorExtension)
+                       return (IProblemRequestorExtension) m;
+               return null;
+       }
+
+       /*
+        * @see org.eclipse.jface.text.reconciler.CompositeReconcilingStrategy#reconcile(org.eclipse.jface.text.reconciler.DirtyRegion,
+        *      org.eclipse.jface.text.IRegion)
+        */
+       public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) {
+               IProblemRequestorExtension e = getProblemRequestorExtension();
+               if (e != null) {
+                       try {
+                               e.beginReportingSequence();
+                               super.reconcile(dirtyRegion, subRegion);
+                       } finally {
+                               e.endReportingSequence();
+                       }
+               } else {
+                       super.reconcile(dirtyRegion, subRegion);
+               }
+       }
+
+       /*
+        * @see org.eclipse.jface.text.reconciler.CompositeReconcilingStrategy#reconcile(org.eclipse.jface.text.IRegion)
+        */
+       public void reconcile(IRegion partition) {
+               IProblemRequestorExtension e = getProblemRequestorExtension();
+               if (e != null) {
+                       try {
+                               e.beginReportingSequence();
+                               super.reconcile(partition);
+                       } finally {
+                               e.endReportingSequence();
+                       }
+               } else {
+                       super.reconcile(partition);
+               }
+       }
+
+       /**
+        * Tells this strategy whether to inform its listeners.
+        * 
+        * @param notify
+        *            <code>true</code> if listeners should be notified
+        */
+       public void notifyListeners(boolean notify) {
+               fJavaStrategy.notifyListeners(notify);
+       }
+
+       /*
+        * @see org.eclipse.jface.text.reconciler.CompositeReconcilingStrategy#initialReconcile()
+        */
+       public void initialReconcile() {
+               IProblemRequestorExtension e = getProblemRequestorExtension();
+               if (e != null) {
+                       try {
+                               e.beginReportingSequence();
+                               super.initialReconcile();
+                       } finally {
+                               e.endReportingSequence();
+                       }
+               } else {
+                       super.initialReconcile();
+               }
+       }
+
+       /**
+        * Called before reconciling is started.
+        * 
+        * @since 3.0
+        */
+       public void aboutToBeReconciled() {
+               fJavaStrategy.aboutToBeReconciled();
+
+       }
+}
\ No newline at end of file