X-Git-Url: http://secure.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 <code>true</code> if the change included marker annotations
 	 */
-	public boolean includesMarkerAnnotationChanges() {
-		return fIncludesMarkerAnnotationChanges;
+	public boolean includesProblemMarkerAnnotationChanges() {
+		return fIncludesProblemMarkerAnnotations;
 	}
-	
+
 	/**
 	 * Returns the annotation model's underlying resource
 	 */