Debug session thread and socket leak fixed:
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / JavaAnnotationIterator.java
index 66b9669..ad4eb24 100644 (file)
  *******************************************************************************/
 package net.sourceforge.phpeclipse.phpeditor;
 
+import java.util.Collections;
 import java.util.Iterator;
 
+import org.eclipse.jface.text.source.Annotation;
 import org.eclipse.jface.text.source.IAnnotationModel;
 
 
@@ -21,29 +23,49 @@ import org.eclipse.jface.text.source.IAnnotationModel;
 public class JavaAnnotationIterator implements Iterator {
                        
        private Iterator fIterator;
-       private IJavaAnnotation fNext;
+       private Annotation fNext;
        private boolean fSkipIrrelevants;
+       private boolean fReturnAllAnnotations;
        
+       /**
+        * Equivalent to <code>JavaAnnotationIterator(model, skipIrrelevants, false)</code>.
+        */
        public JavaAnnotationIterator(IAnnotationModel model, boolean skipIrrelevants) {
-               fIterator= model.getAnnotationIterator();
+               this(model, skipIrrelevants, false);
+       }
+       
+       /**
+        * Returns a new JavaAnnotationIterator. 
+        * @param model the annotation model
+        * @param skipIrrelevants whether to skip irrelevant annotations
+        * @param returnAllAnnotations Whether to return non IJavaAnnotations as well
+        */
+       public JavaAnnotationIterator(IAnnotationModel model, boolean skipIrrelevants, boolean returnAllAnnotations) {
+               fReturnAllAnnotations= returnAllAnnotations;
+               if (model != null)
+                       fIterator= model.getAnnotationIterator();
+               else
+                       fIterator= Collections.EMPTY_LIST.iterator();
                fSkipIrrelevants= skipIrrelevants;
                skip();
        }
        
        private void skip() {
                while (fIterator.hasNext()) {
-                       Object next= fIterator.next();
+                       Annotation next= (Annotation) fIterator.next();
                        if (next instanceof IJavaAnnotation) {
-                               IJavaAnnotation a= (IJavaAnnotation) next;
                                if (fSkipIrrelevants) {
-                                       if (a.isRelevant()) {
-                                               fNext= a;
+                                       if (!next.isMarkedDeleted()) {
+                                               fNext= next;
                                                return;
                                        }
                                } else {
-                                       fNext= a;
+                                       fNext= next;
                                        return;
                                }
+                       } else if (fReturnAllAnnotations) {
+                               fNext= next;
+                               return;
                        }
                }
                fNext= null;