small improvement for $ variables
authoraxelcl <axelcl>
Fri, 28 Jan 2005 19:31:38 +0000 (19:31 +0000)
committeraxelcl <axelcl>
Fri, 28 Jan 2005 19:31:38 +0000 (19:31 +0000)
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Scanner.java

index a1127f5..4f2832e 100644 (file)
@@ -126,6 +126,16 @@ public class Scanner implements IScanner, ITerminalSymbols {
       charArray_v = new char[] { 'v' }, charArray_w = new char[] { 'w' }, charArray_x = new char[] { 'x' },
       charArray_y = new char[] { 'y' }, charArray_z = new char[] { 'z' };
 
+  static final char[] charArray_va = new char[] { '$', 'a' }, charArray_vb = new char[] { '$', 'b' }, charArray_vc = new char[] { '$', 'c' },
+      charArray_vd = new char[] { '$', 'd' }, charArray_ve = new char[] { '$', 'e' }, charArray_vf = new char[] { '$', 'f' },
+      charArray_vg = new char[] { '$', 'g' }, charArray_vh = new char[] { '$', 'h' }, charArray_vi = new char[] { '$', 'i' },
+      charArray_vj = new char[] { '$', 'j' }, charArray_vk = new char[] { '$', 'k' }, charArray_vl = new char[] { '$', 'l' },
+      charArray_vm = new char[] { '$', 'm' }, charArray_vn = new char[] { '$', 'n' }, charArray_vo = new char[] { '$', 'o' },
+      charArray_vp = new char[] { '$', 'p' }, charArray_vq = new char[] { '$', 'q' }, charArray_vr = new char[] { '$', 'r' },
+      charArray_vs = new char[] { '$', 's' }, charArray_vt = new char[] { '$', 't' }, charArray_vu = new char[] { '$', 'u' },
+      charArray_vv = new char[] { '$', 'v' }, charArray_vw = new char[] { '$', 'w' }, charArray_vx = new char[] { '$', 'x' },
+      charArray_vy = new char[] { '$', 'y' }, charArray_vz = new char[] { '$', 'z' };
+
   static final char[] initCharArray = new char[] { '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000' };
 
   static final int TableSize = 30, InternalTableSize = 6;
@@ -192,15 +202,17 @@ public class Scanner implements IScanner, ITerminalSymbols {
   public char[][] taskTags = null;
 
   public char[][] taskPriorities = null;
+
   public boolean isTaskCaseSensitive = true;
+
   public static final boolean DEBUG = false;
 
   public static final boolean TRACE = false;
 
   public ICompilationUnit compilationUnit = null;
+
   /**
-   * Determines if the specified character is permissible 
-   * as the first character in a PHP identifier.
+   * Determines if the specified character is permissible as the first character in a PHP identifier.
    * 
    * The '$' character for HP variables isn't regarded as the first character !
    */
@@ -209,8 +221,7 @@ public class Scanner implements IScanner, ITerminalSymbols {
   }
 
   /**
-   * Determines if the specified character may be part of a PHP 
-   * identifier as other than the first character
+   * Determines if the specified character may be part of a PHP identifier as other than the first character
    */
   public static boolean isPHPIdentifierPart(char ch) {
     return Character.isLetterOrDigit(ch) || (ch == '_') || (0x7F <= ch && ch <= 0xFF);
@@ -335,6 +346,7 @@ public class Scanner implements IScanner, ITerminalSymbols {
     //    }
     return result;
   }
+
   /*
    * Search the source position corresponding to the end of a given line number
    * 
@@ -1532,7 +1544,7 @@ public class Scanner implements IScanner, ITerminalSymbols {
           case '#':
           case '/': {
             char startChar = currentCharacter;
-            if (getNextChar('=') && startChar=='/') {
+            if (getNextChar('=') && startChar == '/') {
               return TokenNameDIVIDE_EQUAL;
             }
             int test;
@@ -1755,7 +1767,7 @@ public class Scanner implements IScanner, ITerminalSymbols {
                     return TokenNameCOMMENT_PHPDOC;
                   return TokenNameCOMMENT_BLOCK;
                 }
-                
+
                 if (this.taskTags != null) {
                   checkTaskTag(this.startPosition, this.currentPosition);
                 }
@@ -2474,9 +2486,69 @@ public class Scanner implements IScanner, ITerminalSymbols {
   }
 
   final char[] optimizedCurrentTokenSource2() {
-    //try to return the same char[] build only once
     char c0, c1;
-    int hash = (((c0 = source[startPosition]) << 6) + (c1 = source[startPosition + 1])) % TableSize;
+    c0 = source[startPosition];
+    c1 = source[startPosition + 1];
+    if (c0 == '$') {
+      //return always the same char[] build only once
+      //optimization at no speed cost of 99.5 % of the singleCharIdentifier
+      switch (c1) {
+      case 'a':
+        return charArray_va;
+      case 'b':  
+        return charArray_vb;
+      case 'c':
+        return charArray_vc;
+      case 'd':
+        return charArray_vd;
+      case 'e':
+        return charArray_ve;
+      case 'f':
+        return charArray_vf;
+      case 'g':
+        return charArray_vg;
+      case 'h':
+        return charArray_vh;
+      case 'i':
+        return charArray_vi;
+      case 'j':
+        return charArray_vj;
+      case 'k':
+        return charArray_vk;
+      case 'l':
+        return charArray_vl;
+      case 'm':
+        return charArray_vm;
+      case 'n':
+        return charArray_vn;
+      case 'o':
+        return charArray_vo;
+      case 'p':
+        return charArray_vp;
+      case 'q':
+        return charArray_vq;
+      case 'r':
+        return charArray_vr;
+      case 's':
+        return charArray_vs;
+      case 't':
+        return charArray_vt;
+      case 'u':
+        return charArray_vu;
+      case 'v':
+        return charArray_vv;
+      case 'w':
+        return charArray_vw;
+      case 'x':
+        return charArray_vx;
+      case 'y':
+        return charArray_vy;
+      case 'z':
+        return charArray_vz;
+      }
+    }
+    //try to return the same char[] build only once
+    int hash = ((c0 << 6) + c1) % TableSize;
     char[][] table = charArray_length[0][hash];
     int i = newEntry2;
     while (++i < InternalTableSize) {
@@ -3649,7 +3721,7 @@ public class Scanner implements IScanner, ITerminalSymbols {
   public final void setSource(char[] source) {
     setSource(null, source);
   }
-  
+
   public final void setSource(ICompilationUnit compilationUnit, char[] source) {
     //the source-buffer is set to sourceString
     this.compilationUnit = compilationUnit;
@@ -3992,15 +4064,11 @@ public class Scanner implements IScanner, ITerminalSymbols {
 
   public Scanner(boolean tokenizeComments, boolean tokenizeWhiteSpace, boolean checkNonExternalizedStringLiterals,
       boolean assertMode) {
-    this(tokenizeComments, tokenizeWhiteSpace, checkNonExternalizedStringLiterals, assertMode, false, null, null,true);
+    this(tokenizeComments, tokenizeWhiteSpace, checkNonExternalizedStringLiterals, assertMode, false, null, null, true);
   }
 
-  public Scanner(boolean tokenizeComments, boolean tokenizeWhiteSpace, 
-      boolean checkNonExternalizedStringLiterals,
-      boolean assertMode, boolean tokenizeStrings, 
-      char[][] taskTags, 
-      char[][] taskPriorities,
-      boolean isTaskCaseSensitive) {
+  public Scanner(boolean tokenizeComments, boolean tokenizeWhiteSpace, boolean checkNonExternalizedStringLiterals,
+      boolean assertMode, boolean tokenizeStrings, char[][] taskTags, char[][] taskPriorities, boolean isTaskCaseSensitive) {
     this.eofPosition = Integer.MAX_VALUE;
     this.tokenizeComments = tokenizeComments;
     this.tokenizeWhiteSpace = tokenizeWhiteSpace;
@@ -4144,203 +4212,203 @@ public class Scanner implements IScanner, ITerminalSymbols {
     }
   }
 
-//chech presence of task: tags
-//TODO (frederic) see if we need to take unicode characters into account...
-public void checkTaskTag(int commentStart, int commentEnd) {
-       char[] src = this.source;
-       
-       // only look for newer task: tags
-       if (this.foundTaskCount > 0
-               && this.foundTaskPositions[this.foundTaskCount - 1][0] >= commentStart) {
-               return;
-       }
-       int foundTaskIndex = this.foundTaskCount;
-       char previous = src[commentStart+1]; // should be '*' or '/'
-       nextChar : for (
-               int i = commentStart + 2; i < commentEnd && i < this.eofPosition; i++) {
-               char[] tag = null;
-               char[] priority = null;
-               // check for tag occurrence only if not ambiguous with javadoc tag
-               if (previous != '@') {
-                       nextTag : for (int itag = 0; itag < this.taskTags.length; itag++) {
-                               tag = this.taskTags[itag];
-                               int tagLength = tag.length;
-                               if (tagLength == 0) continue nextTag;
-       
-                               // ensure tag is not leaded with letter if tag starts with a letter
-                               if (Character.isJavaIdentifierStart(tag[0])) {
-                                       if (Character.isJavaIdentifierPart(previous)) {
-                                               continue nextTag;
-                                       }
-                               }
-       
-                               for (int t = 0; t < tagLength; t++) {
-                                       char sc, tc;
-                                       int x = i+t;
-                                       if (x >= this.eofPosition || x >= commentEnd) continue nextTag;
-                                       if ((sc = src[i + t]) != (tc = tag[t])) {                                                                                                                                                                       // case sensitive check
-                                               if (this.isTaskCaseSensitive || (Character.toLowerCase(sc) != Character.toLowerCase(tc))) {     // case insensitive check
-                                                       continue nextTag;
-                                               }
-                                       }
-                               }
-                               // ensure tag is not followed with letter if tag finishes with a letter
-                               if (i+tagLength < commentEnd && Character.isJavaIdentifierPart(src[i+tagLength-1])) {
-                                       if (Character.isJavaIdentifierPart(src[i + tagLength]))
-                                               continue nextTag;
-                               }
-                               if (this.foundTaskTags == null) {
-                                       this.foundTaskTags = new char[5][];
-                                       this.foundTaskMessages = new char[5][];
-                                       this.foundTaskPriorities = new char[5][];
-                                       this.foundTaskPositions = new int[5][];
-                               } else if (this.foundTaskCount == this.foundTaskTags.length) {
-                                       System.arraycopy(this.foundTaskTags, 0, this.foundTaskTags = new char[this.foundTaskCount * 2][], 0, this.foundTaskCount);
-                                       System.arraycopy(this.foundTaskMessages, 0, this.foundTaskMessages = new char[this.foundTaskCount * 2][], 0, this.foundTaskCount);
-                                       System.arraycopy(this.foundTaskPriorities, 0, this.foundTaskPriorities = new char[this.foundTaskCount * 2][], 0, this.foundTaskCount);
-                                       System.arraycopy(this.foundTaskPositions, 0, this.foundTaskPositions = new int[this.foundTaskCount * 2][], 0, this.foundTaskCount);
-                               }
-                               
-                               priority = this.taskPriorities != null && itag < this.taskPriorities.length
-                                                       ? this.taskPriorities[itag]
-                                                       : null;
-                               
-                               this.foundTaskTags[this.foundTaskCount] = tag;
-                               this.foundTaskPriorities[this.foundTaskCount] = priority;
-                               this.foundTaskPositions[this.foundTaskCount] = new int[] { i, i + tagLength - 1 };
-                               this.foundTaskMessages[this.foundTaskCount] = CharOperation.NO_CHAR;
-                               this.foundTaskCount++;
-                               i += tagLength - 1; // will be incremented when looping
-                               break nextTag;
-                       }
-               }
-               previous = src[i];
-       }
-       for (int i = foundTaskIndex; i < this.foundTaskCount; i++) {
-               // retrieve message start and end positions
-               int msgStart = this.foundTaskPositions[i][0] + this.foundTaskTags[i].length;
-               int max_value = i + 1 < this.foundTaskCount
-                               ? this.foundTaskPositions[i + 1][0] - 1
-                               : commentEnd - 1;
-               // at most beginning of next task
-               if (max_value < msgStart) {
-                       max_value = msgStart; // would only occur if tag is before EOF.
-               }
-               int end = -1;
-               char c;
-               for (int j = msgStart; j < max_value; j++) {
-                       if ((c = src[j]) == '\n' || c == '\r') {
-                               end = j - 1;
-                               break;
-                       }
-               }
-               if (end == -1) {
-                       for (int j = max_value; j > msgStart; j--) {
-                               if ((c = src[j]) == '*') {
-                                       end = j - 1;
-                                       break;
-                               }
-                       }
-                       if (end == -1)
-                               end = max_value;
-               }
-               if (msgStart == end)
-                       continue; // empty
-               // trim the message
-               while (CharOperation.isWhitespace(src[end]) && msgStart <= end)
-                       end--;
-               while (CharOperation.isWhitespace(src[msgStart]) && msgStart <= end)
-                       msgStart++;
-               // update the end position of the task
-               this.foundTaskPositions[i][1] = end;
-               // get the message source
-               final int messageLength = end - msgStart + 1;
-               char[] message = new char[messageLength];
-               System.arraycopy(src, msgStart, message, 0, messageLength);
-               this.foundTaskMessages[i] = message;
-       }
-}
+  //chech presence of task: tags
+  //TODO (frederic) see if we need to take unicode characters into account...
+  public void checkTaskTag(int commentStart, int commentEnd) {
+    char[] src = this.source;
+
+    // only look for newer task: tags
+    if (this.foundTaskCount > 0 && this.foundTaskPositions[this.foundTaskCount - 1][0] >= commentStart) {
+      return;
+    }
+    int foundTaskIndex = this.foundTaskCount;
+    char previous = src[commentStart + 1]; // should be '*' or '/'
+    nextChar: for (int i = commentStart + 2; i < commentEnd && i < this.eofPosition; i++) {
+      char[] tag = null;
+      char[] priority = null;
+      // check for tag occurrence only if not ambiguous with javadoc tag
+      if (previous != '@') {
+        nextTag: for (int itag = 0; itag < this.taskTags.length; itag++) {
+          tag = this.taskTags[itag];
+          int tagLength = tag.length;
+          if (tagLength == 0)
+            continue nextTag;
+
+          // ensure tag is not leaded with letter if tag starts with a letter
+          if (Character.isJavaIdentifierStart(tag[0])) {
+            if (Character.isJavaIdentifierPart(previous)) {
+              continue nextTag;
+            }
+          }
+
+          for (int t = 0; t < tagLength; t++) {
+            char sc, tc;
+            int x = i + t;
+            if (x >= this.eofPosition || x >= commentEnd)
+              continue nextTag;
+            if ((sc = src[i + t]) != (tc = tag[t])) { // case sensitive check
+              if (this.isTaskCaseSensitive || (Character.toLowerCase(sc) != Character.toLowerCase(tc))) { // case insensitive check
+                continue nextTag;
+              }
+            }
+          }
+          // ensure tag is not followed with letter if tag finishes with a letter
+          if (i + tagLength < commentEnd && Character.isJavaIdentifierPart(src[i + tagLength - 1])) {
+            if (Character.isJavaIdentifierPart(src[i + tagLength]))
+              continue nextTag;
+          }
+          if (this.foundTaskTags == null) {
+            this.foundTaskTags = new char[5][];
+            this.foundTaskMessages = new char[5][];
+            this.foundTaskPriorities = new char[5][];
+            this.foundTaskPositions = new int[5][];
+          } else if (this.foundTaskCount == this.foundTaskTags.length) {
+            System.arraycopy(this.foundTaskTags, 0, this.foundTaskTags = new char[this.foundTaskCount * 2][], 0,
+                this.foundTaskCount);
+            System.arraycopy(this.foundTaskMessages, 0, this.foundTaskMessages = new char[this.foundTaskCount * 2][], 0,
+                this.foundTaskCount);
+            System.arraycopy(this.foundTaskPriorities, 0, this.foundTaskPriorities = new char[this.foundTaskCount * 2][], 0,
+                this.foundTaskCount);
+            System.arraycopy(this.foundTaskPositions, 0, this.foundTaskPositions = new int[this.foundTaskCount * 2][], 0,
+                this.foundTaskCount);
+          }
+
+          priority = this.taskPriorities != null && itag < this.taskPriorities.length ? this.taskPriorities[itag] : null;
+
+          this.foundTaskTags[this.foundTaskCount] = tag;
+          this.foundTaskPriorities[this.foundTaskCount] = priority;
+          this.foundTaskPositions[this.foundTaskCount] = new int[] { i, i + tagLength - 1 };
+          this.foundTaskMessages[this.foundTaskCount] = CharOperation.NO_CHAR;
+          this.foundTaskCount++;
+          i += tagLength - 1; // will be incremented when looping
+          break nextTag;
+        }
+      }
+      previous = src[i];
+    }
+    for (int i = foundTaskIndex; i < this.foundTaskCount; i++) {
+      // retrieve message start and end positions
+      int msgStart = this.foundTaskPositions[i][0] + this.foundTaskTags[i].length;
+      int max_value = i + 1 < this.foundTaskCount ? this.foundTaskPositions[i + 1][0] - 1 : commentEnd - 1;
+      // at most beginning of next task
+      if (max_value < msgStart) {
+        max_value = msgStart; // would only occur if tag is before EOF.
+      }
+      int end = -1;
+      char c;
+      for (int j = msgStart; j < max_value; j++) {
+        if ((c = src[j]) == '\n' || c == '\r') {
+          end = j - 1;
+          break;
+        }
+      }
+      if (end == -1) {
+        for (int j = max_value; j > msgStart; j--) {
+          if ((c = src[j]) == '*') {
+            end = j - 1;
+            break;
+          }
+        }
+        if (end == -1)
+          end = max_value;
+      }
+      if (msgStart == end)
+        continue; // empty
+      // trim the message
+      while (CharOperation.isWhitespace(src[end]) && msgStart <= end)
+        end--;
+      while (CharOperation.isWhitespace(src[msgStart]) && msgStart <= end)
+        msgStart++;
+      // update the end position of the task
+      this.foundTaskPositions[i][1] = end;
+      // get the message source
+      final int messageLength = end - msgStart + 1;
+      char[] message = new char[messageLength];
+      System.arraycopy(src, msgStart, message, 0, messageLength);
+      this.foundTaskMessages[i] = message;
+    }
+  }
 
   // chech presence of task: tags
-//  public void checkTaskTag(int commentStart, int commentEnd) {
-//    // only look for newer task: tags
-//    if (this.foundTaskCount > 0 && this.foundTaskPositions[this.foundTaskCount - 1][0] >= commentStart) {
-//      return;
-//    }
-//    int foundTaskIndex = this.foundTaskCount;
-//    nextChar: for (int i = commentStart; i < commentEnd && i < this.eofPosition; i++) {
-//      char[] tag = null;
-//      char[] priority = null;
-//      // check for tag occurrence
-//      nextTag: for (int itag = 0; itag < this.taskTags.length; itag++) {
-//        tag = this.taskTags[itag];
-//        priority = this.taskPriorities != null && itag < this.taskPriorities.length ? this.taskPriorities[itag] : null;
-//        int tagLength = tag.length;
-//        for (int t = 0; t < tagLength; t++) {
-//          if (this.source[i + t] != tag[t])
-//            continue nextTag;
-//        }
-//        if (this.foundTaskTags == null) {
-//          this.foundTaskTags = new char[5][];
-//          this.foundTaskMessages = new char[5][];
-//          this.foundTaskPriorities = new char[5][];
-//          this.foundTaskPositions = new int[5][];
-//        } else if (this.foundTaskCount == this.foundTaskTags.length) {
-//          System.arraycopy(this.foundTaskTags, 0, this.foundTaskTags = new char[this.foundTaskCount * 2][], 0, this.foundTaskCount);
-//          System.arraycopy(this.foundTaskMessages, 0, this.foundTaskMessages = new char[this.foundTaskCount * 2][], 0,
-//              this.foundTaskCount);
-//          System.arraycopy(this.foundTaskPriorities, 0, this.foundTaskPriorities = new char[this.foundTaskCount * 2][], 0,
-//              this.foundTaskCount);
-//          System.arraycopy(this.foundTaskPositions, 0, this.foundTaskPositions = new int[this.foundTaskCount * 2][], 0,
-//              this.foundTaskCount);
-//        }
-//        this.foundTaskTags[this.foundTaskCount] = tag;
-//        this.foundTaskPriorities[this.foundTaskCount] = priority;
-//        this.foundTaskPositions[this.foundTaskCount] = new int[] { i, i + tagLength - 1 };
-//        this.foundTaskMessages[this.foundTaskCount] = CharOperation.NO_CHAR;
-//        this.foundTaskCount++;
-//        i += tagLength - 1; // will be incremented when looping
-//      }
-//    }
-//    for (int i = foundTaskIndex; i < this.foundTaskCount; i++) {
-//      // retrieve message start and end positions
-//      int msgStart = this.foundTaskPositions[i][0] + this.foundTaskTags[i].length;
-//      int max_value = i + 1 < this.foundTaskCount ? this.foundTaskPositions[i + 1][0] - 1 : commentEnd - 1;
-//      // at most beginning of next task
-//      if (max_value < msgStart)
-//        max_value = msgStart; // would only occur if tag is before EOF.
-//      int end = -1;
-//      char c;
-//      for (int j = msgStart; j < max_value; j++) {
-//        if ((c = this.source[j]) == '\n' || c == '\r') {
-//          end = j - 1;
-//          break;
-//        }
-//      }
-//      if (end == -1) {
-//        for (int j = max_value; j > msgStart; j--) {
-//          if ((c = this.source[j]) == '*') {
-//            end = j - 1;
-//            break;
-//          }
-//        }
-//        if (end == -1)
-//          end = max_value;
-//      }
-//      if (msgStart == end)
-//        continue; // empty
-//      // trim the message
-//      while (CharOperation.isWhitespace(source[end]) && msgStart <= end)
-//        end--;
-//      while (CharOperation.isWhitespace(source[msgStart]) && msgStart <= end)
-//        msgStart++;
-//      // update the end position of the task
-//      this.foundTaskPositions[i][1] = end;
-//      // get the message source
-//      final int messageLength = end - msgStart + 1;
-//      char[] message = new char[messageLength];
-//      System.arraycopy(source, msgStart, message, 0, messageLength);
-//      this.foundTaskMessages[i] = message;
-//    }
-//  }
+  //  public void checkTaskTag(int commentStart, int commentEnd) {
+  //    // only look for newer task: tags
+  //    if (this.foundTaskCount > 0 && this.foundTaskPositions[this.foundTaskCount - 1][0] >= commentStart) {
+  //      return;
+  //    }
+  //    int foundTaskIndex = this.foundTaskCount;
+  //    nextChar: for (int i = commentStart; i < commentEnd && i < this.eofPosition; i++) {
+  //      char[] tag = null;
+  //      char[] priority = null;
+  //      // check for tag occurrence
+  //      nextTag: for (int itag = 0; itag < this.taskTags.length; itag++) {
+  //        tag = this.taskTags[itag];
+  //        priority = this.taskPriorities != null && itag < this.taskPriorities.length ? this.taskPriorities[itag] : null;
+  //        int tagLength = tag.length;
+  //        for (int t = 0; t < tagLength; t++) {
+  //          if (this.source[i + t] != tag[t])
+  //            continue nextTag;
+  //        }
+  //        if (this.foundTaskTags == null) {
+  //          this.foundTaskTags = new char[5][];
+  //          this.foundTaskMessages = new char[5][];
+  //          this.foundTaskPriorities = new char[5][];
+  //          this.foundTaskPositions = new int[5][];
+  //        } else if (this.foundTaskCount == this.foundTaskTags.length) {
+  //          System.arraycopy(this.foundTaskTags, 0, this.foundTaskTags = new char[this.foundTaskCount * 2][], 0, this.foundTaskCount);
+  //          System.arraycopy(this.foundTaskMessages, 0, this.foundTaskMessages = new char[this.foundTaskCount * 2][], 0,
+  //              this.foundTaskCount);
+  //          System.arraycopy(this.foundTaskPriorities, 0, this.foundTaskPriorities = new char[this.foundTaskCount * 2][], 0,
+  //              this.foundTaskCount);
+  //          System.arraycopy(this.foundTaskPositions, 0, this.foundTaskPositions = new int[this.foundTaskCount * 2][], 0,
+  //              this.foundTaskCount);
+  //        }
+  //        this.foundTaskTags[this.foundTaskCount] = tag;
+  //        this.foundTaskPriorities[this.foundTaskCount] = priority;
+  //        this.foundTaskPositions[this.foundTaskCount] = new int[] { i, i + tagLength - 1 };
+  //        this.foundTaskMessages[this.foundTaskCount] = CharOperation.NO_CHAR;
+  //        this.foundTaskCount++;
+  //        i += tagLength - 1; // will be incremented when looping
+  //      }
+  //    }
+  //    for (int i = foundTaskIndex; i < this.foundTaskCount; i++) {
+  //      // retrieve message start and end positions
+  //      int msgStart = this.foundTaskPositions[i][0] + this.foundTaskTags[i].length;
+  //      int max_value = i + 1 < this.foundTaskCount ? this.foundTaskPositions[i + 1][0] - 1 : commentEnd - 1;
+  //      // at most beginning of next task
+  //      if (max_value < msgStart)
+  //        max_value = msgStart; // would only occur if tag is before EOF.
+  //      int end = -1;
+  //      char c;
+  //      for (int j = msgStart; j < max_value; j++) {
+  //        if ((c = this.source[j]) == '\n' || c == '\r') {
+  //          end = j - 1;
+  //          break;
+  //        }
+  //      }
+  //      if (end == -1) {
+  //        for (int j = max_value; j > msgStart; j--) {
+  //          if ((c = this.source[j]) == '*') {
+  //            end = j - 1;
+  //            break;
+  //          }
+  //        }
+  //        if (end == -1)
+  //          end = max_value;
+  //      }
+  //      if (msgStart == end)
+  //        continue; // empty
+  //      // trim the message
+  //      while (CharOperation.isWhitespace(source[end]) && msgStart <= end)
+  //        end--;
+  //      while (CharOperation.isWhitespace(source[msgStart]) && msgStart <= end)
+  //        msgStart++;
+  //      // update the end position of the task
+  //      this.foundTaskPositions[i][1] = end;
+  //      // get the message source
+  //      final int messageLength = end - msgStart + 1;
+  //      char[] message = new char[messageLength];
+  //      System.arraycopy(source, msgStart, message, 0, messageLength);
+  //      this.foundTaskMessages[i] = message;
+  //    }
+  //  }
 }
\ No newline at end of file