X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=case-study%2Fjdt-after%2Fui%2Forg%2Feclipse%2Fjdt%2Finternal%2Fui%2Ftext%2FJavaCompositeReconcilingStrategy.java;fp=case-study%2Fjdt-after%2Fui%2Forg%2Feclipse%2Fjdt%2Finternal%2Fui%2Ftext%2FJavaCompositeReconcilingStrategy.java;h=303b0aa3ab176b1e3a96ad0e447c14ebdabebcb2;hb=1b2798f607d741df30e5197f427381cbff326adc;hp=0000000000000000000000000000000000000000;hpb=246231e4bd9b24345490f369747c0549ca308c4d;p=ifi-stolz-refaktor.git 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 index 00000000..303b0aa3 --- /dev/null +++ b/case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/text/JavaCompositeReconcilingStrategy.java @@ -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 true 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(); + } +}