X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/CompilationUnitAnnotationModelEvent.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/CompilationUnitAnnotationModelEvent.java index 069e68b..56204d3 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/CompilationUnitAnnotationModelEvent.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/CompilationUnitAnnotationModelEvent.java @@ -12,39 +12,95 @@ package net.sourceforge.phpeclipse.phpeditor; -import org.eclipse.core.resources.IResource; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jface.text.Position; +import org.eclipse.jface.text.source.Annotation; import org.eclipse.jface.text.source.AnnotationModelEvent; import org.eclipse.jface.text.source.IAnnotationModel; +import org.eclipse.ui.texteditor.MarkerAnnotation; + /** * Event sent out by changes of the compilation unit annotation model. */ public class CompilationUnitAnnotationModelEvent extends AnnotationModelEvent { - private boolean fIncludesMarkerAnnotationChanges; + private boolean fIncludesProblemMarkerAnnotations; private IResource fUnderlyingResource; - /** * Constructor for CompilationUnitAnnotationModelEvent. * @param model * @param underlyingResource The annotation model's underlying resource - * @param includesMarkerAnnotationChanges */ - public CompilationUnitAnnotationModelEvent(IAnnotationModel model, IResource underlyingResource, boolean includesMarkerAnnotationChanges) { + public CompilationUnitAnnotationModelEvent(IAnnotationModel model, IResource underlyingResource) { super(model); - fIncludesMarkerAnnotationChanges= includesMarkerAnnotationChanges; fUnderlyingResource= underlyingResource; + fIncludesProblemMarkerAnnotations= false; + } + + private void testIfProblemMarker(Annotation annotation) { + if (fIncludesProblemMarkerAnnotations) { + return; + } + if (annotation instanceof JavaMarkerAnnotation) { + fIncludesProblemMarkerAnnotations= ((JavaMarkerAnnotation) annotation).isProblem(); + } else if (annotation instanceof MarkerAnnotation) { + try { + IMarker marker= ((MarkerAnnotation) annotation).getMarker(); + if (!marker.exists() || marker.isSubtypeOf(IMarker.PROBLEM)) { + fIncludesProblemMarkerAnnotations= true; + } + } catch (CoreException e) { + PHPeclipsePlugin.log(e); + } + } + } + + /* + * @see org.eclipse.jface.text.source.AnnotationModelEvent#annotationAdded(org.eclipse.jface.text.source.Annotation) + */ + public void annotationAdded(Annotation annotation) { + super.annotationAdded(annotation); + testIfProblemMarker(annotation); + } + + + /* + * @see org.eclipse.jface.text.source.AnnotationModelEvent#annotationRemoved(org.eclipse.jface.text.source.Annotation) + */ + public void annotationRemoved(Annotation annotation) { + super.annotationRemoved(annotation); + testIfProblemMarker(annotation); + } + + /* + * @see org.eclipse.jface.text.source.AnnotationModelEvent#annotationRemoved(org.eclipse.jface.text.source.Annotation, org.eclipse.jface.text.Position) + */ + public void annotationRemoved(Annotation annotation, Position position) { + super.annotationRemoved(annotation, position); + testIfProblemMarker(annotation); } + /* + * @see org.eclipse.jface.text.source.AnnotationModelEvent#annotationChanged(org.eclipse.jface.text.source.Annotation) + */ + public void annotationChanged(Annotation annotation) { + testIfProblemMarker(annotation); + super.annotationChanged(annotation); + } + /** - * Returns whether the change included marker annotations. + * Returns whether the change included problem marker annotations. * * @return true if the change included marker annotations */ - public boolean includesMarkerAnnotationChanges() { - return fIncludesMarkerAnnotationChanges; + public boolean includesProblemMarkerAnnotationChanges() { + return fIncludesProblemMarkerAnnotations; } /**