]> git.uio.no Git - ifi-stolz-refaktor.git/blobdiff - case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/text/JavaCompositeReconcilingStrategy.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui / org / eclipse / jdt / internal / ui / text / JavaCompositeReconcilingStrategy.java
diff --git a/case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/text/JavaCompositeReconcilingStrategy.java b/case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/text/JavaCompositeReconcilingStrategy.java
new file mode 100644 (file)
index 0000000..303b0aa
--- /dev/null
@@ -0,0 +1,166 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.text;
+
+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.jface.text.source.ISourceViewer;
+
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.text.java.IProblemRequestorExtension;
+import org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy;
+import org.eclipse.jdt.internal.ui.text.spelling.JavaSpellingReconcileStrategy;
+
+
+/**
+ * Reconciling strategy for Java code. This is a composite strategy containing the
+ * regular java model reconciler and the comment spelling strategy.
+ *
+ * @since 3.0
+ */
+public class JavaCompositeReconcilingStrategy  extends CompositeReconcilingStrategy {
+
+       private ITextEditor fEditor;
+       private JavaReconcilingStrategy fJavaStrategy;
+
+       /**
+        * Creates a new Java reconciling strategy.
+        *
+        * @param viewer the source viewer
+        * @param editor the editor of the strategy's reconciler
+        * @param documentPartitioning the document partitioning this strategy uses for configuration
+        */
+       public JavaCompositeReconcilingStrategy(ISourceViewer viewer, ITextEditor editor, String documentPartitioning) {
+               fEditor= editor;
+               fJavaStrategy= new JavaReconcilingStrategy(editor);
+               setReconcilingStrategies(new IReconcilingStrategy[] {
+                       fJavaStrategy,
+                       new JavaSpellingReconcileStrategy(viewer, editor)
+               });
+       }
+
+       /**
+        * 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) {
+                       // work around for https://bugs.eclipse.org/bugs/show_bug.cgi?id=51522
+                       p= JavaPlugin.getDefault().getCompilationUnitDocumentProvider();
+               }
+               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)
+        */
+       @Override
+       public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) {
+               try {
+                       IProblemRequestorExtension e= getProblemRequestorExtension();
+                       if (e != null) {
+                               try {
+                                       e.beginReportingSequence();
+                                       super.reconcile(dirtyRegion, subRegion);
+                               } finally {
+                                       e.endReportingSequence();
+                               }
+                       } else {
+                               super.reconcile(dirtyRegion, subRegion);
+                       }
+               } finally {
+                       reconciled();
+               }
+       }
+
+       /*
+        * @see org.eclipse.jface.text.reconciler.CompositeReconcilingStrategy#reconcile(org.eclipse.jface.text.IRegion)
+        */
+       @Override
+       public void reconcile(IRegion partition) {
+               try {
+                       IProblemRequestorExtension e= getProblemRequestorExtension();
+                       if (e != null) {
+                               try {
+                                       e.beginReportingSequence();
+                                       super.reconcile(partition);
+                               } finally {
+                                       e.endReportingSequence();
+                               }
+                       } else {
+                               super.reconcile(partition);
+                       }
+               } finally {
+                       reconciled();
+               }
+       }
+
+
+       /**
+        * 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()
+        */
+       @Override
+       public void initialReconcile() {
+               try {
+                       IProblemRequestorExtension e= getProblemRequestorExtension();
+                       if (e != null) {
+                               try {
+                                       e.beginReportingSequence();
+                                       super.initialReconcile();
+                               } finally {
+                                       e.endReportingSequence();
+                               }
+                       } else {
+                               super.initialReconcile();
+                       }
+               } finally {
+                       reconciled();
+               }
+       }
+
+       /**
+        * Called before reconciling is started.
+        *
+        * @since 3.0
+        */
+       public void aboutToBeReconciled() {
+               fJavaStrategy.aboutToBeReconciled();
+
+       }
+
+       /**
+        * Called when reconcile has finished.
+        *
+        * @since 3.4
+        */
+       private void reconciled() {
+               fJavaStrategy.reconciled();
+       }
+}