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..fa55f33 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/CompilationUnitAnnotationModelEvent.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/CompilationUnitAnnotationModelEvent.java @@ -10,43 +10,101 @@ *******************************************************************************/ package net.sourceforge.phpeclipse.phpeditor; +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; +public class CompilationUnitAnnotationModelEvent extends AnnotationModelEvent { + + private boolean fIncludesProblemMarkerAnnotations; + private IResource fUnderlyingResource; - - + /** * Constructor for CompilationUnitAnnotationModelEvent. + * * @param model - * @param underlyingResource The annotation model's underlying resource - * @param includesMarkerAnnotationChanges + * @param underlyingResource + * The annotation model's underlying resource */ - public CompilationUnitAnnotationModelEvent(IAnnotationModel model, IResource underlyingResource, boolean includesMarkerAnnotationChanges) { + public CompilationUnitAnnotationModelEvent(IAnnotationModel model, + IResource underlyingResource) { super(model); - fIncludesMarkerAnnotationChanges= includesMarkerAnnotationChanges; - fUnderlyingResource= underlyingResource; + 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; } - + /** * Returns the annotation model's underlying resource */