1) Reintroduced finishedBuilding
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / DocumentElementParser.java
index 509ac89..dfc0471 100644 (file)
 package net.sourceforge.phpdt.internal.compiler;
 
 import net.sourceforge.phpdt.core.compiler.IProblem;
+import net.sourceforge.phpdt.internal.compiler.ast.CompilationUnitDeclaration;
 import net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit;
 import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions;
 import net.sourceforge.phpdt.internal.compiler.parser.UnitParser;
 import net.sourceforge.phpdt.internal.compiler.problem.AbortCompilation;
 import net.sourceforge.phpdt.internal.compiler.problem.ProblemReporter;
-import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
-
-import org.eclipse.core.resources.IResource;
 
 /*
- * A document element parser extracts structural information from a piece of source, providing detailed source positions info.
+ * A document element parser extracts structural information from a piece of
+ * source, providing detailed source positions info.
  * 
  * also see @IDocumentElementRequestor
  * 
- * The structural investigation includes: - the package statement - import statements - top-level types: package member, member
- * types (member types of member types...) - fields - methods
+ * The structural investigation includes: - the package statement - import
+ * statements - top-level types: package member, member types (member types of
+ * member types...) - fields - methods
  * 
  * Any (parsing) problem encountered is also provided.
  */
 public class DocumentElementParser extends UnitParser {
-  IDocumentElementRequestor requestor;
-
-  private int localIntPtr;
+       IDocumentElementRequestor requestor;
 
-  private int lastFieldEndPosition;
+       //private int localIntPtr;
 
-  private int lastFieldBodyEndPosition;
+       //private int lastFieldEndPosition;
 
-  private int typeStartPosition;
+       //private int lastFieldBodyEndPosition;
 
-  private long selectorSourcePositions;
+//     private int typeStartPosition;
 
-  private int typeDims;
+       //private long selectorSourcePositions;
 
-  private int extendsDim;
+       //private int typeDims;
 
-  private int declarationSourceStart;
+       //private int extendsDim;
 
-  /* int[] stack for storing javadoc positions */
-  int[][] intArrayStack;
+       //private int declarationSourceStart;
 
-  int intArrayPtr;
+       /* int[] stack for storing javadoc positions */
+       int[][] intArrayStack;
 
-  //   CompilerOptions options;
+       int intArrayPtr;
 
-  public DocumentElementParser(final IDocumentElementRequestor requestor, IProblemFactory problemFactory,
-      CompilerOptions options) {
-    super(new ProblemReporter(DefaultErrorHandlingPolicies.exitAfterAllProblems(), options, problemFactory) {
-      public void record(IProblem problem, CompilationResult unitResult) {
-        requestor.acceptProblem(problem);
-      }
-    });
-    // false,
-    // options.sourceLevel >= CompilerOptions.JDK1_4);
-    this.requestor = requestor;
-    intArrayStack = new int[30][];
-    this.options = options;
-  }
+       // CompilerOptions options;
 
-  /**
-   * 
-   * INTERNAL USE-ONLY
-   */
-  //protected void adjustInterfaceModifiers() {
-  //   intStack[intPtr - 2] |= AccInterface;
-  //}
-  /*
-   * Will clear the comment stack when looking for a potential JavaDoc which might contain @deprecated.
-   * 
-   * Additionally, before investigating for @deprecated, retrieve the positions of the JavaDoc comments so as to notify requestor
-   * with them.
-   */
-  //public void checkAnnotation() {
-  //
-  //   /* persisting javadoc positions */
-  //   pushOnIntArrayStack(this.getJavaDocPositions());
-  //   boolean deprecated = false;
-  //   int lastAnnotationIndex = -1;
-  //   int commentPtr = scanner.commentPtr;
-  //
-  //   //since jdk1.2 look only in the last java doc comment...
-  //   nextComment : for (lastAnnotationIndex = scanner.commentPtr; lastAnnotationIndex >= 0; lastAnnotationIndex--){
-  //           //look for @deprecated into the first javadoc comment preceeding the declaration
-  //           int commentSourceStart = scanner.commentStarts[lastAnnotationIndex];
-  //           // javadoc only (non javadoc comment have negative end positions.)
-  //           if (modifiersSourceStart != -1 && modifiersSourceStart < commentSourceStart) {
-  //                   continue nextComment;
-  //           }
-  //           if (scanner.commentStops[lastAnnotationIndex] < 0) {
-  //                   continue nextComment;
-  //           }
-  //           int commentSourceEnd = scanner.commentStops[lastAnnotationIndex] - 1; //stop is one over
-  //           char[] comment = scanner.source;
-  //
-  //           deprecated =
-  //                   checkDeprecation(
-  //                           commentSourceStart,
-  //                           commentSourceEnd,
-  //                           comment);
-  //           break nextComment;
-  //   }
-  //   if (deprecated) {
-  //           checkAndSetModifiers(AccDeprecated);
-  //   }
-  //   // modify the modifier source start to point at the first comment
-  //   if (commentPtr >= 0) {
-  //           declarationSourceStart = scanner.commentStarts[0];
-  //   }
-  //}
-  /**
-   * 
-   * INTERNAL USE-ONLY
-   */
-  //protected void consumeClassBodyDeclaration() {
-  //   // ClassBodyDeclaration ::= Diet Block
-  //   //push an Initializer
-  //   //optimize the push/pop
-  //
-  //   super.consumeClassBodyDeclaration();
-  //   Initializer initializer = (Initializer) astStack[astPtr];
-  //   requestor.acceptInitializer(
-  //           initializer.declarationSourceStart,
-  //           initializer.declarationSourceEnd,
-  //           intArrayStack[intArrayPtr--],
-  //           0,
-  //           modifiersSourceStart,
-  //           initializer.block.sourceStart,
-  //           initializer.block.sourceEnd);
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeClassDeclaration() {
-  //   super.consumeClassDeclaration();
-  //   // we know that we have a TypeDeclaration on the top of the astStack
-  //   if (isLocalDeclaration()) {
-  //           // we ignore the local variable declarations
-  //           return;
-  //   }
-  //   requestor.exitClass(endStatementPosition, // '}' is the end of the body
-  //    ((TypeDeclaration) astStack[astPtr]).declarationSourceEnd);
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeClassHeader() {
-  //   //ClassHeader ::= $empty
-  //   super.consumeClassHeader();
-  //   if (isLocalDeclaration()) {
-  //           // we ignore the local variable declarations
-  //           intArrayPtr--;
-  //           return;
-  //   }
-  //   TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
-  //   TypeReference[] superInterfaces = typeDecl.superInterfaces;
-  //   char[][] interfaceNames = null;
-  //   int[] interfaceNameStarts = null;
-  //   int[] interfaceNameEnds = null;
-  //   if (superInterfaces != null) {
-  //           int superInterfacesLength = superInterfaces.length;
-  //           interfaceNames = new char[superInterfacesLength][];
-  //           interfaceNameStarts = new int[superInterfacesLength];
-  //           interfaceNameEnds = new int[superInterfacesLength];
-  //           for (int i = 0; i < superInterfacesLength; i++) {
-  //                   TypeReference superInterface = superInterfaces[i];
-  //                   interfaceNames[i] = CharOperation.concatWith(superInterface.getTypeName(), '.');
-  //                   interfaceNameStarts[i] = superInterface.sourceStart;
-  //                   interfaceNameEnds[i] = superInterface.sourceEnd;
-  //           }
-  //   }
-  //   // flush the comments related to the class header
-  //   scanner.commentPtr = -1;
-  //   TypeReference superclass = typeDecl.superclass;
-  //   if (superclass == null) {
-  //           requestor.enterClass(
-  //                   typeDecl.declarationSourceStart,
-  //                   intArrayStack[intArrayPtr--],
-  //                   typeDecl.modifiers,
-  //                   typeDecl.modifiersSourceStart,
-  //                   typeStartPosition,
-  //                   typeDecl.name,
-  //                   typeDecl.sourceStart,
-  //                   typeDecl.sourceEnd,
-  //                   null,
-  //                   -1,
-  //                   -1,
-  //                   interfaceNames,
-  //                   interfaceNameStarts,
-  //                   interfaceNameEnds,
-  //                   scanner.currentPosition - 1);
-  //   } else {
-  //           requestor.enterClass(
-  //                   typeDecl.declarationSourceStart,
-  //                   intArrayStack[intArrayPtr--],
-  //                   typeDecl.modifiers,
-  //                   typeDecl.modifiersSourceStart,
-  //                   typeStartPosition,
-  //                   typeDecl.name,
-  //                   typeDecl.sourceStart,
-  //                   typeDecl.sourceEnd,
-  //                   CharOperation.concatWith(superclass.getTypeName(), '.'),
-  //                   superclass.sourceStart,
-  //                   superclass.sourceEnd,
-  //                   interfaceNames,
-  //                   interfaceNameStarts,
-  //                   interfaceNameEnds,
-  //                   scanner.currentPosition - 1);
-  //
-  //   }
-  //}
-  //protected void consumeClassHeaderName() {
-  //   // ClassHeaderName ::= Modifiersopt 'class' 'Identifier'
-  //   TypeDeclaration typeDecl;
-  //   if (nestedMethod[nestedType] == 0) {
-  //           if (nestedType != 0) {
-  //                   typeDecl = new MemberTypeDeclaration(this.compilationUnit.compilationResult);
-  //           } else {
-  //                   typeDecl = new TypeDeclaration(this.compilationUnit.compilationResult);
-  //           }
-  //   } else {
-  //           // Record that the block has a declaration for local types
-  //           typeDecl = new LocalTypeDeclaration(this.compilationUnit.compilationResult);
-  //           markEnclosingMemberWithLocalType();
-  //           blockReal();
-  //   }
-  //
-  //   //highlight the name of the type
-  //   long pos = identifierPositionStack[identifierPtr];
-  //   typeDecl.sourceEnd = (int) pos;
-  //   typeDecl.sourceStart = (int) (pos >>> 32);
-  //   typeDecl.name = identifierStack[identifierPtr--];
-  //   identifierLengthPtr--;
-  //
-  //   //compute the declaration source too
-  //   // 'class' and 'interface' push an int position
-  //   typeStartPosition = typeDecl.declarationSourceStart = intStack[intPtr--];
-  //   intPtr--;
-  //   int declarationSourceStart = intStack[intPtr--];
-  //   typeDecl.modifiersSourceStart = intStack[intPtr--];
-  //   typeDecl.modifiers = intStack[intPtr--];
-  //   if (typeDecl.declarationSourceStart > declarationSourceStart) {
-  //           typeDecl.declarationSourceStart = declarationSourceStart;
-  //   }
-  //   typeDecl.bodyStart = typeDecl.sourceEnd + 1;
-  //   pushOnAstStack(typeDecl);
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeCompilationUnit() {
-  //   // CompilationUnit ::= EnterCompilationUnit PackageDeclarationopt ImportDeclarationsopt
-  //   requestor.exitCompilationUnit(scanner.source.length - 1);
-  //}
-  /**
-   * 
-   * INTERNAL USE-ONLY
-   */
-  //protected void consumeConstructorDeclaration() {
-  //   // ConstructorDeclaration ::= ConstructorHeader ConstructorBody
-  //   super.consumeConstructorDeclaration();
-  //   if (isLocalDeclaration()) {
-  //           // we ignore the local variable declarations
-  //           return;
-  //   }
-  //   ConstructorDeclaration cd = (ConstructorDeclaration) astStack[astPtr];
-  //   requestor.exitConstructor(endStatementPosition, cd.declarationSourceEnd);
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeConstructorHeader() {
-  //   // ConstructorHeader ::= ConstructorHeaderName MethodHeaderParameters MethodHeaderThrowsClauseopt
-  //   super.consumeConstructorHeader();
-  //   if (isLocalDeclaration()) {
-  //           // we ignore the local variable declarations
-  //           intArrayPtr--;
-  //           return;
-  //   }
-  //   ConstructorDeclaration cd = (ConstructorDeclaration) astStack[astPtr];
-  //   Argument[] arguments = cd.arguments;
-  //   char[][] argumentTypes = null;
-  //   char[][] argumentNames = null;
-  //   int[] argumentTypeStarts = null;
-  //   int[] argumentTypeEnds = null;
-  //   int[] argumentNameStarts = null;
-  //   int[] argumentNameEnds = null;
-  //   if (arguments != null) {
-  //           int argumentLength = arguments.length;
-  //           argumentTypes = new char[argumentLength][];
-  //           argumentNames = new char[argumentLength][];
-  //           argumentNameStarts = new int[argumentLength];
-  //           argumentNameEnds = new int[argumentLength];
-  //           argumentTypeStarts = new int[argumentLength];
-  //           argumentTypeEnds = new int[argumentLength];
-  //           for (int i = 0; i < argumentLength; i++) {
-  //                   Argument argument = arguments[i];
-  //                   TypeReference argumentType = argument.type;
-  //                   argumentTypes[i] = returnTypeName(argumentType);
-  //                   argumentNames[i] = argument.name;
-  //                   argumentNameStarts[i] = argument.sourceStart;
-  //                   argumentNameEnds[i] = argument.sourceEnd;
-  //                   argumentTypeStarts[i] = argumentType.sourceStart;
-  //                   argumentTypeEnds[i] = argumentType.sourceEnd;
-  //           }
-  //   }
-  //   TypeReference[] thrownExceptions = cd.thrownExceptions;
-  //   char[][] exceptionTypes = null;
-  //   int[] exceptionTypeStarts = null;
-  //   int[] exceptionTypeEnds = null;
-  //   if (thrownExceptions != null) {
-  //           int thrownExceptionLength = thrownExceptions.length;
-  //           exceptionTypes = new char[thrownExceptionLength][];
-  //           exceptionTypeStarts = new int[thrownExceptionLength];
-  //           exceptionTypeEnds = new int[thrownExceptionLength];
-  //           for (int i = 0; i < thrownExceptionLength; i++) {
-  //                   TypeReference exception = thrownExceptions[i];
-  //                   exceptionTypes[i] = CharOperation.concatWith(exception.getTypeName(), '.');
-  //                   exceptionTypeStarts[i] = exception.sourceStart;
-  //                   exceptionTypeEnds[i] = exception.sourceEnd;
-  //           }
-  //   }
-  //   requestor
-  //           .enterConstructor(
-  //                   cd.declarationSourceStart,
-  //                   intArrayStack[intArrayPtr--],
-  //                   cd.modifiers,
-  //                   cd.modifiersSourceStart,
-  //                   cd.selector,
-  //                   cd.sourceStart,
-  //                   (int) (selectorSourcePositions & 0xFFFFFFFFL),
-  //                   // retrieve the source end of the name
-  //                   argumentTypes,
-  //                   argumentTypeStarts,
-  //                   argumentTypeEnds,
-  //                   argumentNames,
-  //                   argumentNameStarts,
-  //                   argumentNameEnds,
-  //                   rParenPos,
-  //                   // right parenthesis
-  //                   exceptionTypes,
-  //                   exceptionTypeStarts,
-  //                   exceptionTypeEnds,
-  //                   scanner.currentPosition - 1);
-  //}
-  //protected void consumeConstructorHeaderName() {
-  //   // ConstructorHeaderName ::= Modifiersopt 'Identifier' '('
-  //   ConstructorDeclaration cd = new ConstructorDeclaration(this.compilationUnit.compilationResult);
-  //
-  //   //name -- this is not really revelant but we do .....
-  //   cd.selector = identifierStack[identifierPtr];
-  //   selectorSourcePositions = identifierPositionStack[identifierPtr--];
-  //   identifierLengthPtr--;
-  //
-  //   //modifiers
-  //   cd.declarationSourceStart = intStack[intPtr--];
-  //   cd.modifiersSourceStart = intStack[intPtr--];
-  //   cd.modifiers = intStack[intPtr--];
-  //
-  //   //highlight starts at the selector starts
-  //   cd.sourceStart = (int) (selectorSourcePositions >>> 32);
-  //   pushOnAstStack(cd);
-  //
-  //   cd.sourceEnd = lParenPos;
-  //   cd.bodyStart = lParenPos + 1;
-  //}
-  //protected void consumeDefaultModifiers() {
-  //   checkAnnotation(); // might update modifiers with AccDeprecated
-  //   pushOnIntStack(modifiers); // modifiers
-  //   pushOnIntStack(-1);
-  //   pushOnIntStack(
-  //           declarationSourceStart >= 0 ? declarationSourceStart : scanner.startPosition);
-  //   resetModifiers();
-  //}
-  //protected void consumeDiet() {
-  //   // Diet ::= $empty
-  //   super.consumeDiet();
-  //   /* persisting javadoc positions
-  //    * Will be consume in consumeClassBodyDeclaration
-  //    */
-  //   pushOnIntArrayStack(this.getJavaDocPositions());
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeEnterCompilationUnit() {
-  //   // EnterCompilationUnit ::= $empty
-  //   requestor.enterCompilationUnit();
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeEnterVariable() {
-  //   // EnterVariable ::= $empty
-  //   boolean isLocalDeclaration = isLocalDeclaration();
-  //   if (!isLocalDeclaration && (variablesCounter[nestedType] != 0)) {
-  //           requestor.exitField(lastFieldBodyEndPosition, lastFieldEndPosition);
-  //   }
-  //   char[] name = identifierStack[identifierPtr];
-  //   long namePosition = identifierPositionStack[identifierPtr--];
-  //   int extendedTypeDimension = intStack[intPtr--];
-  //
-  //   AbstractVariableDeclaration declaration;
-  //   if (nestedMethod[nestedType] != 0) {
-  //           // create the local variable declarations
-  //           declaration =
-  //                   new LocalDeclaration(null, name, (int) (namePosition >>> 32), (int) namePosition);
-  //   } else {
-  //           // create the field declaration
-  //           declaration =
-  //                   new FieldDeclaration(null, name, (int) (namePosition >>> 32), (int) namePosition);
-  //   }
-  //   identifierLengthPtr--;
-  //   TypeReference type;
-  //   int variableIndex = variablesCounter[nestedType];
-  //   int typeDim = 0;
-  //   if (variableIndex == 0) {
-  //           // first variable of the declaration (FieldDeclaration or LocalDeclaration)
-  //           if (nestedMethod[nestedType] != 0) {
-  //                   // local declaration
-  //                   declaration.declarationSourceStart = intStack[intPtr--];
-  //                   declaration.modifiersSourceStart = intStack[intPtr--];
-  //                   declaration.modifiers = intStack[intPtr--];
-  //                   type = getTypeReference(typeDim = intStack[intPtr--]); // type dimension
-  //                   pushOnAstStack(type);
-  //           } else {
-  //                   // field declaration
-  //                   type = getTypeReference(typeDim = intStack[intPtr--]); // type dimension
-  //                   pushOnAstStack(type);
-  //                   declaration.declarationSourceStart = intStack[intPtr--];
-  //                   declaration.modifiersSourceStart = intStack[intPtr--];
-  //                   declaration.modifiers = intStack[intPtr--];
-  //           }
-  //   } else {
-  //           type = (TypeReference) astStack[astPtr - variableIndex];
-  //           typeDim = type.dimensions();
-  //           AbstractVariableDeclaration previousVariable =
-  //                   (AbstractVariableDeclaration) astStack[astPtr];
-  //           declaration.declarationSourceStart = previousVariable.declarationSourceStart;
-  //           declaration.modifiers = previousVariable.modifiers;
-  //           declaration.modifiersSourceStart = previousVariable.modifiersSourceStart;
-  //   }
-  //
-  //   localIntPtr = intPtr;
-  //
-  //   if (extendedTypeDimension == 0) {
-  //           declaration.type = type;
-  //   } else {
-  //           int dimension = typeDim + extendedTypeDimension;
-  //           //on the identifierLengthStack there is the information about the type....
-  //           int baseType;
-  //           if ((baseType = identifierLengthStack[identifierLengthPtr + 1]) < 0) {
-  //                   //it was a baseType
-  //                   declaration.type = TypeReference.baseTypeReference(-baseType, dimension);
-  //                   declaration.type.sourceStart = type.sourceStart;
-  //                   declaration.type.sourceEnd = type.sourceEnd;
-  //           } else {
-  //                   declaration.type = this.copyDims(type, dimension);
-  //           }
-  //   }
-  //   variablesCounter[nestedType]++;
-  //   nestedMethod[nestedType]++;
-  //   pushOnAstStack(declaration);
-  //
-  //   int[] javadocPositions = intArrayStack[intArrayPtr];
-  //   if (!isLocalDeclaration) {
-  //           requestor
-  //                   .enterField(
-  //                           declaration.declarationSourceStart,
-  //                           javadocPositions,
-  //                           declaration.modifiers,
-  //                           declaration.modifiersSourceStart,
-  //                           returnTypeName(declaration.type),
-  //                           type.sourceStart,
-  //                           type.sourceEnd,
-  //                           typeDims,
-  //                           name,
-  //                           (int) (namePosition >>> 32),
-  //                           (int) namePosition,
-  //                           extendedTypeDimension,
-  //                           extendedTypeDimension == 0 ? -1 : endPosition);
-  //   }
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeExitVariableWithInitialization() {
-  //   // ExitVariableWithInitialization ::= $empty
-  //   // the scanner is located after the comma or the semi-colon.
-  //   // we want to include the comma or the semi-colon
-  //   super.consumeExitVariableWithInitialization();
-  //   nestedMethod[nestedType]--;
-  //   lastFieldEndPosition = scanner.currentPosition - 1;
-  //   lastFieldBodyEndPosition = ((AbstractVariableDeclaration) astStack[astPtr]).initialization.sourceEnd;
-  //}
-  //protected void consumeExitVariableWithoutInitialization() {
-  //   // ExitVariableWithoutInitialization ::= $empty
-  //   // do nothing by default
-  //   super.consumeExitVariableWithoutInitialization();
-  //   nestedMethod[nestedType]--;
-  //   lastFieldEndPosition = scanner.currentPosition - 1;
-  //   lastFieldBodyEndPosition = scanner.startPosition - 1;
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeFieldDeclaration() {
-  //   // See consumeLocalVariableDeclarationDefaultModifier() in case of change: duplicated code
-  //   // FieldDeclaration ::= Modifiersopt Type VariableDeclarators ';'
-  //   // the super.consumeFieldDeclaration will reinitialize the variableCounter[nestedType]
-  //   int variableIndex = variablesCounter[nestedType];
-  //   super.consumeFieldDeclaration();
-  //   intArrayPtr--;
-  //   if (isLocalDeclaration())
-  //           return;
-  //   if (variableIndex != 0) {
-  //           requestor.exitField(lastFieldBodyEndPosition, lastFieldEndPosition);
-  //   }
-  //}
-  //protected void consumeFormalParameter() {
-  //   // FormalParameter ::= Type VariableDeclaratorId ==> false
-  //   // FormalParameter ::= Modifiers Type VariableDeclaratorId ==> true
-  //   /*
-  //   astStack :
-  //   identifierStack : type identifier
-  //   intStack : dim dim
-  //    ==>
-  //   astStack : Argument
-  //   identifierStack :
-  //   intStack :
-  //   */
-  //
-  //   identifierLengthPtr--;
-  //   char[] name = identifierStack[identifierPtr];
-  //   long namePositions = identifierPositionStack[identifierPtr--];
-  //   TypeReference type = getTypeReference(intStack[intPtr--] + intStack[intPtr--]);
-  //   intPtr -= 3;
-  //   Argument arg =
-  //           new Argument(
-  //                   name,
-  //                   namePositions,
-  //                   type,
-  //                   intStack[intPtr + 1]); // modifiers
-  //   pushOnAstStack(arg);
-  //   intArrayPtr--;
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeInterfaceDeclaration() {
-  //   super.consumeInterfaceDeclaration();
-  //   // we know that we have a TypeDeclaration on the top of the astStack
-  //   if (isLocalDeclaration()) {
-  //           // we ignore the local variable declarations
-  //           return;
-  //   }
-  //   requestor.exitInterface(endStatementPosition, // the '}' is the end of the body
-  //    ((TypeDeclaration) astStack[astPtr]).declarationSourceEnd);
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeInterfaceHeader() {
-  //   //InterfaceHeader ::= $empty
-  //   super.consumeInterfaceHeader();
-  //   if (isLocalDeclaration()) {
-  //           // we ignore the local variable declarations
-  //           intArrayPtr--;
-  //           return;
-  //   }
-  //   TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
-  //   TypeReference[] superInterfaces = typeDecl.superInterfaces;
-  //   char[][] interfaceNames = null;
-  //   int[] interfaceNameStarts = null;
-  //   int[] interfacenameEnds = null;
-  //   int superInterfacesLength = 0;
-  //   if (superInterfaces != null) {
-  //           superInterfacesLength = superInterfaces.length;
-  //           interfaceNames = new char[superInterfacesLength][];
-  //           interfaceNameStarts = new int[superInterfacesLength];
-  //           interfacenameEnds = new int[superInterfacesLength];
-  //   }
-  //   if (superInterfaces != null) {
-  //           for (int i = 0; i < superInterfacesLength; i++) {
-  //                   TypeReference superInterface = superInterfaces[i];
-  //                   interfaceNames[i] = CharOperation.concatWith(superInterface.getTypeName(), '.');
-  //                   interfaceNameStarts[i] = superInterface.sourceStart;
-  //                   interfacenameEnds[i] = superInterface.sourceEnd;
-  //           }
-  //   }
-  //   // flush the comments related to the interface header
-  //   scanner.commentPtr = -1;
-  //   requestor.enterInterface(
-  //           typeDecl.declarationSourceStart,
-  //           intArrayStack[intArrayPtr--],
-  //           typeDecl.modifiers,
-  //           typeDecl.modifiersSourceStart,
-  //           typeStartPosition,
-  //           typeDecl.name,
-  //           typeDecl.sourceStart,
-  //           typeDecl.sourceEnd,
-  //           interfaceNames,
-  //           interfaceNameStarts,
-  //           interfacenameEnds,
-  //           scanner.currentPosition - 1);
-  //}
-  //protected void consumeInterfaceHeaderName() {
-  //   // InterfaceHeaderName ::= Modifiersopt 'interface' 'Identifier'
-  //   TypeDeclaration typeDecl;
-  //   if (nestedMethod[nestedType] == 0) {
-  //           if (nestedType != 0) {
-  //                   typeDecl = new MemberTypeDeclaration(this.compilationUnit.compilationResult);
-  //           } else {
-  //                   typeDecl = new TypeDeclaration(this.compilationUnit.compilationResult);
-  //           }
-  //   } else {
-  //           // Record that the block has a declaration for local types
-  //           typeDecl = new LocalTypeDeclaration(this.compilationUnit.compilationResult);
-  //           markEnclosingMemberWithLocalType();
-  //           blockReal();
-  //   }
-  //
-  //   //highlight the name of the type
-  //   long pos = identifierPositionStack[identifierPtr];
-  //   typeDecl.sourceEnd = (int) pos;
-  //   typeDecl.sourceStart = (int) (pos >>> 32);
-  //   typeDecl.name = identifierStack[identifierPtr--];
-  //   identifierLengthPtr--;
-  //
-  //   //compute the declaration source too
-  //   // 'class' and 'interface' push an int position
-  //   typeStartPosition = typeDecl.declarationSourceStart = intStack[intPtr--];
-  //   intPtr--;
-  //   int declarationSourceStart = intStack[intPtr--];
-  //   typeDecl.modifiersSourceStart = intStack[intPtr--];
-  //   typeDecl.modifiers = intStack[intPtr--];
-  //   if (typeDecl.declarationSourceStart > declarationSourceStart) {
-  //           typeDecl.declarationSourceStart = declarationSourceStart;
-  //   }
-  //   typeDecl.bodyStart = typeDecl.sourceEnd + 1;
-  //   pushOnAstStack(typeDecl);
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeLocalVariableDeclaration() {
-  //   // See consumeLocalVariableDeclarationDefaultModifier() in case of change: duplicated code
-  //   // FieldDeclaration ::= Modifiersopt Type VariableDeclarators ';'
-  //
-  //   super.consumeLocalVariableDeclaration();
-  //   intArrayPtr--;
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeMethodDeclaration(boolean isNotAbstract) {
-  //   // MethodDeclaration ::= MethodHeader MethodBody
-  //   // AbstractMethodDeclaration ::= MethodHeader ';'
-  //   super.consumeMethodDeclaration(isNotAbstract);
-  //   if (isLocalDeclaration()) {
-  //           // we ignore the local variable declarations
-  //           return;
-  //   }
-  //   MethodDeclaration md = (MethodDeclaration) astStack[astPtr];
-  //   requestor.exitMethod(endStatementPosition, md.declarationSourceEnd);
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeMethodHeader() {
-  //   // MethodHeader ::= MethodHeaderName MethodHeaderParameters MethodHeaderExtendedDims ThrowsClauseopt
-  //   super.consumeMethodHeader();
-  //   if (isLocalDeclaration()) {
-  //           // we ignore the local variable declarations
-  //           intArrayPtr--;
-  //           return;
-  //   }
-  //   MethodDeclaration md = (MethodDeclaration) astStack[astPtr];
-  //
-  //   TypeReference returnType = md.returnType;
-  //   char[] returnTypeName = returnTypeName(returnType);
-  //   Argument[] arguments = md.arguments;
-  //   char[][] argumentTypes = null;
-  //   char[][] argumentNames = null;
-  //   int[] argumentTypeStarts = null;
-  //   int[] argumentTypeEnds = null;
-  //   int[] argumentNameStarts = null;
-  //   int[] argumentNameEnds = null;
-  //   if (arguments != null) {
-  //           int argumentLength = arguments.length;
-  //           argumentTypes = new char[argumentLength][];
-  //           argumentNames = new char[argumentLength][];
-  //           argumentNameStarts = new int[argumentLength];
-  //           argumentNameEnds = new int[argumentLength];
-  //           argumentTypeStarts = new int[argumentLength];
-  //           argumentTypeEnds = new int[argumentLength];
-  //           for (int i = 0; i < argumentLength; i++) {
-  //                   Argument argument = arguments[i];
-  //                   TypeReference argumentType = argument.type;
-  //                   argumentTypes[i] = returnTypeName(argumentType);
-  //                   argumentNames[i] = argument.name;
-  //                   argumentNameStarts[i] = argument.sourceStart;
-  //                   argumentNameEnds[i] = argument.sourceEnd;
-  //                   argumentTypeStarts[i] = argumentType.sourceStart;
-  //                   argumentTypeEnds[i] = argumentType.sourceEnd;
-  //           }
-  //   }
-  //   TypeReference[] thrownExceptions = md.thrownExceptions;
-  //   char[][] exceptionTypes = null;
-  //   int[] exceptionTypeStarts = null;
-  //   int[] exceptionTypeEnds = null;
-  //   if (thrownExceptions != null) {
-  //           int thrownExceptionLength = thrownExceptions.length;
-  //           exceptionTypeStarts = new int[thrownExceptionLength];
-  //           exceptionTypeEnds = new int[thrownExceptionLength];
-  //           exceptionTypes = new char[thrownExceptionLength][];
-  //           for (int i = 0; i < thrownExceptionLength; i++) {
-  //                   TypeReference exception = thrownExceptions[i];
-  //                   exceptionTypes[i] = CharOperation.concatWith(exception.getTypeName(), '.');
-  //                   exceptionTypeStarts[i] = exception.sourceStart;
-  //                   exceptionTypeEnds[i] = exception.sourceEnd;
-  //           }
-  //   }
-  //   requestor
-  //           .enterMethod(
-  //                   md.declarationSourceStart,
-  //                   intArrayStack[intArrayPtr--],
-  //                   md.modifiers,
-  //                   md.modifiersSourceStart,
-  //                   returnTypeName,
-  //                   returnType.sourceStart,
-  //                   returnType.sourceEnd,
-  //                   typeDims,
-  //                   md.selector,
-  //                   md.sourceStart,
-  //                   (int) (selectorSourcePositions & 0xFFFFFFFFL),
-  //                   argumentTypes,
-  //                   argumentTypeStarts,
-  //                   argumentTypeEnds,
-  //                   argumentNames,
-  //                   argumentNameStarts,
-  //                   argumentNameEnds,
-  //                   rParenPos,
-  //                   extendsDim,
-  //                   extendsDim == 0 ? -1 : endPosition,
-  //                   exceptionTypes,
-  //                   exceptionTypeStarts,
-  //                   exceptionTypeEnds,
-  //                   scanner.currentPosition - 1);
-  //}
-  //protected void consumeMethodHeaderExtendedDims() {
-  //   // MethodHeaderExtendedDims ::= Dimsopt
-  //   // now we update the returnType of the method
-  //   MethodDeclaration md = (MethodDeclaration) astStack[astPtr];
-  //   int extendedDims = intStack[intPtr--];
-  //   extendsDim = extendedDims;
-  //   if (extendedDims != 0) {
-  //           TypeReference returnType = md.returnType;
-  //           md.sourceEnd = endPosition;
-  //           int dims = returnType.dimensions() + extendedDims;
-  //           int baseType;
-  //           if ((baseType = identifierLengthStack[identifierLengthPtr + 1]) < 0) {
-  //                   //it was a baseType
-  //                   int sourceStart = returnType.sourceStart;
-  //                   int sourceEnd = returnType.sourceEnd;
-  //                   returnType = TypeReference.baseTypeReference(-baseType, dims);
-  //                   returnType.sourceStart = sourceStart;
-  //                   returnType.sourceEnd = sourceEnd;
-  //                   md.returnType = returnType;
-  //           } else {
-  //                   md.returnType = this.copyDims(md.returnType, dims);
-  //           }
-  //           if (currentToken == TokenNameLBRACE) {
-  //                   md.bodyStart = endPosition + 1;
-  //           }
-  //   }
-  //}
-  //protected void consumeMethodHeaderName() {
-  //   // MethodHeaderName ::= Modifiersopt Type 'Identifier' '('
-  //   MethodDeclaration md = new MethodDeclaration(this.compilationUnit.compilationResult);
-  //
-  //   //name
-  //   md.selector = identifierStack[identifierPtr];
-  //   selectorSourcePositions = identifierPositionStack[identifierPtr--];
-  //   identifierLengthPtr--;
-  //   //type
-  //   md.returnType = getTypeReference(typeDims = intStack[intPtr--]);
-  //   //modifiers
-  //   md.declarationSourceStart = intStack[intPtr--];
-  //   md.modifiersSourceStart = intStack[intPtr--];
-  //   md.modifiers = intStack[intPtr--];
-  //
-  //   //highlight starts at selector start
-  //   md.sourceStart = (int) (selectorSourcePositions >>> 32);
-  //   pushOnAstStack(md);
-  //   md.bodyStart = scanner.currentPosition-1;
-  //}
-  //protected void consumeModifiers() {
-  //   checkAnnotation(); // might update modifiers with AccDeprecated
-  //   pushOnIntStack(modifiers); // modifiers
-  //   pushOnIntStack(modifiersSourceStart);
-  //   pushOnIntStack(
-  //           declarationSourceStart >= 0 ? declarationSourceStart : modifiersSourceStart);
-  //   resetModifiers();
-  //}
-  /**
-   * 
-   * INTERNAL USE-ONLY
-   */
-  //protected void consumePackageDeclarationName() {
-  //   /* persisting javadoc positions */
-  //   pushOnIntArrayStack(this.getJavaDocPositions());
-  //
-  //   super.consumePackageDeclarationName();
-  //   ImportReference importReference = compilationUnit.currentPackage;
-  //
-  //   requestor.acceptPackage(
-  //           importReference.declarationSourceStart,
-  //           importReference.declarationSourceEnd,
-  //           intArrayStack[intArrayPtr--],
-  //           CharOperation.concatWith(importReference.getImportName(), '.'),
-  //           importReference.sourceStart);
-  //}
-  //protected void consumePushModifiers() {
-  //   checkAnnotation(); // might update modifiers with AccDeprecated
-  //   pushOnIntStack(modifiers); // modifiers
-  //   if (modifiersSourceStart < 0) {
-  //           pushOnIntStack(-1);
-  //           pushOnIntStack(
-  //                   declarationSourceStart >= 0 ? declarationSourceStart : scanner.startPosition);
-  //   } else {
-  //           pushOnIntStack(modifiersSourceStart);
-  //           pushOnIntStack(
-  //                   declarationSourceStart >= 0 ? declarationSourceStart : modifiersSourceStart);
-  //   }
-  //   resetModifiers();
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeSingleTypeImportDeclarationName() {
-  //   // SingleTypeImportDeclarationName ::= 'import' Name
-  //
-  //   /* persisting javadoc positions */
-  //   pushOnIntArrayStack(this.getJavaDocPositions());
-  //
-  //   super.consumeSingleTypeImportDeclarationName();
-  //   ImportReference importReference = (ImportReference) astStack[astPtr];
-  //   requestor.acceptImport(
-  //           importReference.declarationSourceStart,
-  //           importReference.declarationSourceEnd,
-  //           intArrayStack[intArrayPtr--],
-  //           CharOperation.concatWith(importReference.getImportName(), '.'),
-  //           importReference.sourceStart,
-  //           false);
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeStaticInitializer() {
-  //   // StaticInitializer ::= StaticOnly Block
-  //   //push an Initializer
-  //   //optimize the push/pop
-  //   super.consumeStaticInitializer();
-  //   Initializer initializer = (Initializer) astStack[astPtr];
-  //   requestor.acceptInitializer(
-  //           initializer.declarationSourceStart,
-  //           initializer.declarationSourceEnd,
-  //           intArrayStack[intArrayPtr--],
-  //           AccStatic,
-  //           intStack[intPtr--],
-  //           initializer.block.sourceStart,
-  //           initializer.declarationSourceEnd);
-  //}
-  //protected void consumeStaticOnly() {
-  //   // StaticOnly ::= 'static'
-  //   checkAnnotation(); // might update declaration source start
-  //   pushOnIntStack(modifiersSourceStart);
-  //   pushOnIntStack(
-  //           declarationSourceStart >= 0 ? declarationSourceStart : modifiersSourceStart);
-  //   jumpOverMethodBody();
-  //   nestedMethod[nestedType]++;
-  //   resetModifiers();
-  //}
-  ///**
-  // *
-  // * INTERNAL USE-ONLY
-  // */
-  //protected void consumeTypeImportOnDemandDeclarationName() {
-  //   // TypeImportOnDemandDeclarationName ::= 'import' Name '.' '*'
-  //
-  //   /* persisting javadoc positions */
-  //   pushOnIntArrayStack(this.getJavaDocPositions());
-  //
-  //   super.consumeTypeImportOnDemandDeclarationName();
-  //   ImportReference importReference = (ImportReference) astStack[astPtr];
-  //   requestor.acceptImport(
-  //           importReference.declarationSourceStart,
-  //           importReference.declarationSourceEnd,
-  //           intArrayStack[intArrayPtr--],
-  //           CharOperation.concatWith(importReference.getImportName(), '.'),
-  //           importReference.sourceStart,
-  //           true);
-  //}
-  public CompilationUnitDeclaration endParse(int act) {
-    if (scanner.recordLineSeparator) {
-      requestor.acceptLineSeparatorPositions(scanner.getLineEnds());
-    }
-    return super.endParse(act);
-  }
+       public DocumentElementParser(final IDocumentElementRequestor requestor,
+                       IProblemFactory problemFactory, CompilerOptions options) {
+               super(new ProblemReporter(DefaultErrorHandlingPolicies
+                               .exitAfterAllProblems(), options, problemFactory) {
+                       public void record(IProblem problem, CompilationResult unitResult) {
+                               requestor.acceptProblem(problem);
+                       }
+               });
+               // false,
+               // options.sourceLevel >= CompilerOptions.JDK1_4);
+               this.requestor = requestor;
+               intArrayStack = new int[30][];
+               this.options = options;
+       }
 
-  /*
-   * Flush annotations defined prior to a given positions.
-   * 
-   * Note: annotations are stacked in syntactical order
-   * 
-   * Either answer given <position>, or the end position of a comment line immediately following the <position> (same line)
-   * 
-   * e.g. void foo(){ } // end of method foo
-   */
+       /**
+        * 
+        * INTERNAL USE-ONLY
+        */
+       // protected void adjustInterfaceModifiers() {
+       // intStack[intPtr - 2] |= AccInterface;
+       // }
+       /*
+        * Will clear the comment stack when looking for a potential JavaDoc which
+        * might contain @deprecated.
+        * 
+        * Additionally, before investigating for @deprecated, retrieve the
+        * positions of the JavaDoc comments so as to notify requestor with them.
+        */
+       // public void checkAnnotation() {
+       //
+       // /* persisting javadoc positions */
+       // pushOnIntArrayStack(this.getJavaDocPositions());
+       // boolean deprecated = false;
+       // int lastAnnotationIndex = -1;
+       // int commentPtr = scanner.commentPtr;
+       //
+       // //since jdk1.2 look only in the last java doc comment...
+       // nextComment : for (lastAnnotationIndex = scanner.commentPtr;
+       // lastAnnotationIndex >= 0; lastAnnotationIndex--){
+       // //look for @deprecated into the first javadoc comment preceeding the
+       // declaration
+       // int commentSourceStart = scanner.commentStarts[lastAnnotationIndex];
+       // // javadoc only (non javadoc comment have negative end positions.)
+       // if (modifiersSourceStart != -1 && modifiersSourceStart <
+       // commentSourceStart) {
+       // continue nextComment;
+       // }
+       // if (scanner.commentStops[lastAnnotationIndex] < 0) {
+       // continue nextComment;
+       // }
+       // int commentSourceEnd = scanner.commentStops[lastAnnotationIndex] - 1;
+       // //stop is one over
+       // char[] comment = scanner.source;
+       //
+       // deprecated =
+       // checkDeprecation(
+       // commentSourceStart,
+       // commentSourceEnd,
+       // comment);
+       // break nextComment;
+       // }
+       // if (deprecated) {
+       // checkAndSetModifiers(AccDeprecated);
+       // }
+       // // modify the modifier source start to point at the first comment
+       // if (commentPtr >= 0) {
+       // declarationSourceStart = scanner.commentStarts[0];
+       // }
+       // }
+       /**
+        * 
+        * INTERNAL USE-ONLY
+        */
+       // protected void consumeClassBodyDeclaration() {
+       // // ClassBodyDeclaration ::= Diet Block
+       // //push an Initializer
+       // //optimize the push/pop
+       //
+       // super.consumeClassBodyDeclaration();
+       // Initializer initializer = (Initializer) astStack[astPtr];
+       // requestor.acceptInitializer(
+       // initializer.declarationSourceStart,
+       // initializer.declarationSourceEnd,
+       // intArrayStack[intArrayPtr--],
+       // 0,
+       // modifiersSourceStart,
+       // initializer.block.sourceStart,
+       // initializer.block.sourceEnd);
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeClassDeclaration() {
+       // super.consumeClassDeclaration();
+       // // we know that we have a TypeDeclaration on the top of the astStack
+       // if (isLocalDeclaration()) {
+       // // we ignore the local variable declarations
+       // return;
+       // }
+       // requestor.exitClass(endStatementPosition, // '}' is the end of the body
+       // ((TypeDeclaration) astStack[astPtr]).declarationSourceEnd);
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeClassHeader() {
+       // //ClassHeader ::= $empty
+       // super.consumeClassHeader();
+       // if (isLocalDeclaration()) {
+       // // we ignore the local variable declarations
+       // intArrayPtr--;
+       // return;
+       // }
+       // TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
+       // TypeReference[] superInterfaces = typeDecl.superInterfaces;
+       // char[][] interfaceNames = null;
+       // int[] interfaceNameStarts = null;
+       // int[] interfaceNameEnds = null;
+       // if (superInterfaces != null) {
+       // int superInterfacesLength = superInterfaces.length;
+       // interfaceNames = new char[superInterfacesLength][];
+       // interfaceNameStarts = new int[superInterfacesLength];
+       // interfaceNameEnds = new int[superInterfacesLength];
+       // for (int i = 0; i < superInterfacesLength; i++) {
+       // TypeReference superInterface = superInterfaces[i];
+       // interfaceNames[i] =
+       // CharOperation.concatWith(superInterface.getTypeName(), '.');
+       // interfaceNameStarts[i] = superInterface.sourceStart;
+       // interfaceNameEnds[i] = superInterface.sourceEnd;
+       // }
+       // }
+       // // flush the comments related to the class header
+       // scanner.commentPtr = -1;
+       // TypeReference superclass = typeDecl.superclass;
+       // if (superclass == null) {
+       // requestor.enterClass(
+       // typeDecl.declarationSourceStart,
+       // intArrayStack[intArrayPtr--],
+       // typeDecl.modifiers,
+       // typeDecl.modifiersSourceStart,
+       // typeStartPosition,
+       // typeDecl.name,
+       // typeDecl.sourceStart,
+       // typeDecl.sourceEnd,
+       // null,
+       // -1,
+       // -1,
+       // interfaceNames,
+       // interfaceNameStarts,
+       // interfaceNameEnds,
+       // scanner.currentPosition - 1);
+       // } else {
+       // requestor.enterClass(
+       // typeDecl.declarationSourceStart,
+       // intArrayStack[intArrayPtr--],
+       // typeDecl.modifiers,
+       // typeDecl.modifiersSourceStart,
+       // typeStartPosition,
+       // typeDecl.name,
+       // typeDecl.sourceStart,
+       // typeDecl.sourceEnd,
+       // CharOperation.concatWith(superclass.getTypeName(), '.'),
+       // superclass.sourceStart,
+       // superclass.sourceEnd,
+       // interfaceNames,
+       // interfaceNameStarts,
+       // interfaceNameEnds,
+       // scanner.currentPosition - 1);
+       //
+       // }
+       // }
+       // protected void consumeClassHeaderName() {
+       // // ClassHeaderName ::= Modifiersopt 'class' 'Identifier'
+       // TypeDeclaration typeDecl;
+       // if (nestedMethod[nestedType] == 0) {
+       // if (nestedType != 0) {
+       // typeDecl = new
+       // MemberTypeDeclaration(this.compilationUnit.compilationResult);
+       // } else {
+       // typeDecl = new TypeDeclaration(this.compilationUnit.compilationResult);
+       // }
+       // } else {
+       // // Record that the block has a declaration for local types
+       // typeDecl = new
+       // LocalTypeDeclaration(this.compilationUnit.compilationResult);
+       // markEnclosingMemberWithLocalType();
+       // blockReal();
+       // }
+       //
+       // //highlight the name of the type
+       // long pos = identifierPositionStack[identifierPtr];
+       // typeDecl.sourceEnd = (int) pos;
+       // typeDecl.sourceStart = (int) (pos >>> 32);
+       // typeDecl.name = identifierStack[identifierPtr--];
+       // identifierLengthPtr--;
+       //
+       // //compute the declaration source too
+       // // 'class' and 'interface' push an int position
+       // typeStartPosition = typeDecl.declarationSourceStart = intStack[intPtr--];
+       // intPtr--;
+       // int declarationSourceStart = intStack[intPtr--];
+       // typeDecl.modifiersSourceStart = intStack[intPtr--];
+       // typeDecl.modifiers = intStack[intPtr--];
+       // if (typeDecl.declarationSourceStart > declarationSourceStart) {
+       // typeDecl.declarationSourceStart = declarationSourceStart;
+       // }
+       // typeDecl.bodyStart = typeDecl.sourceEnd + 1;
+       // pushOnAstStack(typeDecl);
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeCompilationUnit() {
+       // // CompilationUnit ::= EnterCompilationUnit PackageDeclarationopt
+       // ImportDeclarationsopt
+       // requestor.exitCompilationUnit(scanner.source.length - 1);
+       // }
+       /**
+        * 
+        * INTERNAL USE-ONLY
+        */
+       // protected void consumeConstructorDeclaration() {
+       // // ConstructorDeclaration ::= ConstructorHeader ConstructorBody
+       // super.consumeConstructorDeclaration();
+       // if (isLocalDeclaration()) {
+       // // we ignore the local variable declarations
+       // return;
+       // }
+       // ConstructorDeclaration cd = (ConstructorDeclaration) astStack[astPtr];
+       // requestor.exitConstructor(endStatementPosition, cd.declarationSourceEnd);
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeConstructorHeader() {
+       // // ConstructorHeader ::= ConstructorHeaderName MethodHeaderParameters
+       // MethodHeaderThrowsClauseopt
+       // super.consumeConstructorHeader();
+       // if (isLocalDeclaration()) {
+       // // we ignore the local variable declarations
+       // intArrayPtr--;
+       // return;
+       // }
+       // ConstructorDeclaration cd = (ConstructorDeclaration) astStack[astPtr];
+       // Argument[] arguments = cd.arguments;
+       // char[][] argumentTypes = null;
+       // char[][] argumentNames = null;
+       // int[] argumentTypeStarts = null;
+       // int[] argumentTypeEnds = null;
+       // int[] argumentNameStarts = null;
+       // int[] argumentNameEnds = null;
+       // if (arguments != null) {
+       // int argumentLength = arguments.length;
+       // argumentTypes = new char[argumentLength][];
+       // argumentNames = new char[argumentLength][];
+       // argumentNameStarts = new int[argumentLength];
+       // argumentNameEnds = new int[argumentLength];
+       // argumentTypeStarts = new int[argumentLength];
+       // argumentTypeEnds = new int[argumentLength];
+       // for (int i = 0; i < argumentLength; i++) {
+       // Argument argument = arguments[i];
+       // TypeReference argumentType = argument.type;
+       // argumentTypes[i] = returnTypeName(argumentType);
+       // argumentNames[i] = argument.name;
+       // argumentNameStarts[i] = argument.sourceStart;
+       // argumentNameEnds[i] = argument.sourceEnd;
+       // argumentTypeStarts[i] = argumentType.sourceStart;
+       // argumentTypeEnds[i] = argumentType.sourceEnd;
+       // }
+       // }
+       // TypeReference[] thrownExceptions = cd.thrownExceptions;
+       // char[][] exceptionTypes = null;
+       // int[] exceptionTypeStarts = null;
+       // int[] exceptionTypeEnds = null;
+       // if (thrownExceptions != null) {
+       // int thrownExceptionLength = thrownExceptions.length;
+       // exceptionTypes = new char[thrownExceptionLength][];
+       // exceptionTypeStarts = new int[thrownExceptionLength];
+       // exceptionTypeEnds = new int[thrownExceptionLength];
+       // for (int i = 0; i < thrownExceptionLength; i++) {
+       // TypeReference exception = thrownExceptions[i];
+       // exceptionTypes[i] = CharOperation.concatWith(exception.getTypeName(),
+       // '.');
+       // exceptionTypeStarts[i] = exception.sourceStart;
+       // exceptionTypeEnds[i] = exception.sourceEnd;
+       // }
+       // }
+       // requestor
+       // .enterConstructor(
+       // cd.declarationSourceStart,
+       // intArrayStack[intArrayPtr--],
+       // cd.modifiers,
+       // cd.modifiersSourceStart,
+       // cd.selector,
+       // cd.sourceStart,
+       // (int) (selectorSourcePositions & 0xFFFFFFFFL),
+       // // retrieve the source end of the name
+       // argumentTypes,
+       // argumentTypeStarts,
+       // argumentTypeEnds,
+       // argumentNames,
+       // argumentNameStarts,
+       // argumentNameEnds,
+       // rParenPos,
+       // // right parenthesis
+       // exceptionTypes,
+       // exceptionTypeStarts,
+       // exceptionTypeEnds,
+       // scanner.currentPosition - 1);
+       // }
+       // protected void consumeConstructorHeaderName() {
+       // // ConstructorHeaderName ::= Modifiersopt 'Identifier' '('
+       // ConstructorDeclaration cd = new
+       // ConstructorDeclaration(this.compilationUnit.compilationResult);
+       //
+       // //name -- this is not really revelant but we do .....
+       // cd.selector = identifierStack[identifierPtr];
+       // selectorSourcePositions = identifierPositionStack[identifierPtr--];
+       // identifierLengthPtr--;
+       //
+       // //modifiers
+       // cd.declarationSourceStart = intStack[intPtr--];
+       // cd.modifiersSourceStart = intStack[intPtr--];
+       // cd.modifiers = intStack[intPtr--];
+       //
+       // //highlight starts at the selector starts
+       // cd.sourceStart = (int) (selectorSourcePositions >>> 32);
+       // pushOnAstStack(cd);
+       //
+       // cd.sourceEnd = lParenPos;
+       // cd.bodyStart = lParenPos + 1;
+       // }
+       // protected void consumeDefaultModifiers() {
+       // checkAnnotation(); // might update modifiers with AccDeprecated
+       // pushOnIntStack(modifiers); // modifiers
+       // pushOnIntStack(-1);
+       // pushOnIntStack(
+       // declarationSourceStart >= 0 ? declarationSourceStart :
+       // scanner.startPosition);
+       // resetModifiers();
+       // }
+       // protected void consumeDiet() {
+       // // Diet ::= $empty
+       // super.consumeDiet();
+       // /* persisting javadoc positions
+       // * Will be consume in consumeClassBodyDeclaration
+       // */
+       // pushOnIntArrayStack(this.getJavaDocPositions());
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeEnterCompilationUnit() {
+       // // EnterCompilationUnit ::= $empty
+       // requestor.enterCompilationUnit();
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeEnterVariable() {
+       // // EnterVariable ::= $empty
+       // boolean isLocalDeclaration = isLocalDeclaration();
+       // if (!isLocalDeclaration && (variablesCounter[nestedType] != 0)) {
+       // requestor.exitField(lastFieldBodyEndPosition, lastFieldEndPosition);
+       // }
+       // char[] name = identifierStack[identifierPtr];
+       // long namePosition = identifierPositionStack[identifierPtr--];
+       // int extendedTypeDimension = intStack[intPtr--];
+       //
+       // AbstractVariableDeclaration declaration;
+       // if (nestedMethod[nestedType] != 0) {
+       // // create the local variable declarations
+       // declaration =
+       // new LocalDeclaration(null, name, (int) (namePosition >>> 32), (int)
+       // namePosition);
+       // } else {
+       // // create the field declaration
+       // declaration =
+       // new FieldDeclaration(null, name, (int) (namePosition >>> 32), (int)
+       // namePosition);
+       // }
+       // identifierLengthPtr--;
+       // TypeReference type;
+       // int variableIndex = variablesCounter[nestedType];
+       // int typeDim = 0;
+       // if (variableIndex == 0) {
+       // // first variable of the declaration (FieldDeclaration or
+       // LocalDeclaration)
+       // if (nestedMethod[nestedType] != 0) {
+       // // local declaration
+       // declaration.declarationSourceStart = intStack[intPtr--];
+       // declaration.modifiersSourceStart = intStack[intPtr--];
+       // declaration.modifiers = intStack[intPtr--];
+       // type = getTypeReference(typeDim = intStack[intPtr--]); // type dimension
+       // pushOnAstStack(type);
+       // } else {
+       // // field declaration
+       // type = getTypeReference(typeDim = intStack[intPtr--]); // type dimension
+       // pushOnAstStack(type);
+       // declaration.declarationSourceStart = intStack[intPtr--];
+       // declaration.modifiersSourceStart = intStack[intPtr--];
+       // declaration.modifiers = intStack[intPtr--];
+       // }
+       // } else {
+       // type = (TypeReference) astStack[astPtr - variableIndex];
+       // typeDim = type.dimensions();
+       // AbstractVariableDeclaration previousVariable =
+       // (AbstractVariableDeclaration) astStack[astPtr];
+       // declaration.declarationSourceStart =
+       // previousVariable.declarationSourceStart;
+       // declaration.modifiers = previousVariable.modifiers;
+       // declaration.modifiersSourceStart = previousVariable.modifiersSourceStart;
+       // }
+       //
+       // localIntPtr = intPtr;
+       //
+       // if (extendedTypeDimension == 0) {
+       // declaration.type = type;
+       // } else {
+       // int dimension = typeDim + extendedTypeDimension;
+       // //on the identifierLengthStack there is the information about the
+       // type....
+       // int baseType;
+       // if ((baseType = identifierLengthStack[identifierLengthPtr + 1]) < 0) {
+       // //it was a baseType
+       // declaration.type = TypeReference.baseTypeReference(-baseType, dimension);
+       // declaration.type.sourceStart = type.sourceStart;
+       // declaration.type.sourceEnd = type.sourceEnd;
+       // } else {
+       // declaration.type = this.copyDims(type, dimension);
+       // }
+       // }
+       // variablesCounter[nestedType]++;
+       // nestedMethod[nestedType]++;
+       // pushOnAstStack(declaration);
+       //
+       // int[] javadocPositions = intArrayStack[intArrayPtr];
+       // if (!isLocalDeclaration) {
+       // requestor
+       // .enterField(
+       // declaration.declarationSourceStart,
+       // javadocPositions,
+       // declaration.modifiers,
+       // declaration.modifiersSourceStart,
+       // returnTypeName(declaration.type),
+       // type.sourceStart,
+       // type.sourceEnd,
+       // typeDims,
+       // name,
+       // (int) (namePosition >>> 32),
+       // (int) namePosition,
+       // extendedTypeDimension,
+       // extendedTypeDimension == 0 ? -1 : endPosition);
+       // }
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeExitVariableWithInitialization() {
+       // // ExitVariableWithInitialization ::= $empty
+       // // the scanner is located after the comma or the semi-colon.
+       // // we want to include the comma or the semi-colon
+       // super.consumeExitVariableWithInitialization();
+       // nestedMethod[nestedType]--;
+       // lastFieldEndPosition = scanner.currentPosition - 1;
+       // lastFieldBodyEndPosition = ((AbstractVariableDeclaration)
+       // astStack[astPtr]).initialization.sourceEnd;
+       // }
+       // protected void consumeExitVariableWithoutInitialization() {
+       // // ExitVariableWithoutInitialization ::= $empty
+       // // do nothing by default
+       // super.consumeExitVariableWithoutInitialization();
+       // nestedMethod[nestedType]--;
+       // lastFieldEndPosition = scanner.currentPosition - 1;
+       // lastFieldBodyEndPosition = scanner.startPosition - 1;
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeFieldDeclaration() {
+       // // See consumeLocalVariableDeclarationDefaultModifier() in case of
+       // change: duplicated code
+       // // FieldDeclaration ::= Modifiersopt Type VariableDeclarators ';'
+       // // the super.consumeFieldDeclaration will reinitialize the
+       // variableCounter[nestedType]
+       // int variableIndex = variablesCounter[nestedType];
+       // super.consumeFieldDeclaration();
+       // intArrayPtr--;
+       // if (isLocalDeclaration())
+       // return;
+       // if (variableIndex != 0) {
+       // requestor.exitField(lastFieldBodyEndPosition, lastFieldEndPosition);
+       // }
+       // }
+       // protected void consumeFormalParameter() {
+       // // FormalParameter ::= Type VariableDeclaratorId ==> false
+       // // FormalParameter ::= Modifiers Type VariableDeclaratorId ==> true
+       // /*
+       // astStack :
+       // identifierStack : type identifier
+       // intStack : dim dim
+       // ==>
+       // astStack : Argument
+       // identifierStack :
+       // intStack :
+       // */
+       //
+       // identifierLengthPtr--;
+       // char[] name = identifierStack[identifierPtr];
+       // long namePositions = identifierPositionStack[identifierPtr--];
+       // TypeReference type = getTypeReference(intStack[intPtr--] +
+       // intStack[intPtr--]);
+       // intPtr -= 3;
+       // Argument arg =
+       // new Argument(
+       // name,
+       // namePositions,
+       // type,
+       // intStack[intPtr + 1]); // modifiers
+       // pushOnAstStack(arg);
+       // intArrayPtr--;
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeInterfaceDeclaration() {
+       // super.consumeInterfaceDeclaration();
+       // // we know that we have a TypeDeclaration on the top of the astStack
+       // if (isLocalDeclaration()) {
+       // // we ignore the local variable declarations
+       // return;
+       // }
+       // requestor.exitInterface(endStatementPosition, // the '}' is the end of
+       // the body
+       // ((TypeDeclaration) astStack[astPtr]).declarationSourceEnd);
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeInterfaceHeader() {
+       // //InterfaceHeader ::= $empty
+       // super.consumeInterfaceHeader();
+       // if (isLocalDeclaration()) {
+       // // we ignore the local variable declarations
+       // intArrayPtr--;
+       // return;
+       // }
+       // TypeDeclaration typeDecl = (TypeDeclaration) astStack[astPtr];
+       // TypeReference[] superInterfaces = typeDecl.superInterfaces;
+       // char[][] interfaceNames = null;
+       // int[] interfaceNameStarts = null;
+       // int[] interfacenameEnds = null;
+       // int superInterfacesLength = 0;
+       // if (superInterfaces != null) {
+       // superInterfacesLength = superInterfaces.length;
+       // interfaceNames = new char[superInterfacesLength][];
+       // interfaceNameStarts = new int[superInterfacesLength];
+       // interfacenameEnds = new int[superInterfacesLength];
+       // }
+       // if (superInterfaces != null) {
+       // for (int i = 0; i < superInterfacesLength; i++) {
+       // TypeReference superInterface = superInterfaces[i];
+       // interfaceNames[i] =
+       // CharOperation.concatWith(superInterface.getTypeName(), '.');
+       // interfaceNameStarts[i] = superInterface.sourceStart;
+       // interfacenameEnds[i] = superInterface.sourceEnd;
+       // }
+       // }
+       // // flush the comments related to the interface header
+       // scanner.commentPtr = -1;
+       // requestor.enterInterface(
+       // typeDecl.declarationSourceStart,
+       // intArrayStack[intArrayPtr--],
+       // typeDecl.modifiers,
+       // typeDecl.modifiersSourceStart,
+       // typeStartPosition,
+       // typeDecl.name,
+       // typeDecl.sourceStart,
+       // typeDecl.sourceEnd,
+       // interfaceNames,
+       // interfaceNameStarts,
+       // interfacenameEnds,
+       // scanner.currentPosition - 1);
+       // }
+       // protected void consumeInterfaceHeaderName() {
+       // // InterfaceHeaderName ::= Modifiersopt 'interface' 'Identifier'
+       // TypeDeclaration typeDecl;
+       // if (nestedMethod[nestedType] == 0) {
+       // if (nestedType != 0) {
+       // typeDecl = new
+       // MemberTypeDeclaration(this.compilationUnit.compilationResult);
+       // } else {
+       // typeDecl = new TypeDeclaration(this.compilationUnit.compilationResult);
+       // }
+       // } else {
+       // // Record that the block has a declaration for local types
+       // typeDecl = new
+       // LocalTypeDeclaration(this.compilationUnit.compilationResult);
+       // markEnclosingMemberWithLocalType();
+       // blockReal();
+       // }
+       //
+       // //highlight the name of the type
+       // long pos = identifierPositionStack[identifierPtr];
+       // typeDecl.sourceEnd = (int) pos;
+       // typeDecl.sourceStart = (int) (pos >>> 32);
+       // typeDecl.name = identifierStack[identifierPtr--];
+       // identifierLengthPtr--;
+       //
+       // //compute the declaration source too
+       // // 'class' and 'interface' push an int position
+       // typeStartPosition = typeDecl.declarationSourceStart = intStack[intPtr--];
+       // intPtr--;
+       // int declarationSourceStart = intStack[intPtr--];
+       // typeDecl.modifiersSourceStart = intStack[intPtr--];
+       // typeDecl.modifiers = intStack[intPtr--];
+       // if (typeDecl.declarationSourceStart > declarationSourceStart) {
+       // typeDecl.declarationSourceStart = declarationSourceStart;
+       // }
+       // typeDecl.bodyStart = typeDecl.sourceEnd + 1;
+       // pushOnAstStack(typeDecl);
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeLocalVariableDeclaration() {
+       // // See consumeLocalVariableDeclarationDefaultModifier() in case of
+       // change: duplicated code
+       // // FieldDeclaration ::= Modifiersopt Type VariableDeclarators ';'
+       //
+       // super.consumeLocalVariableDeclaration();
+       // intArrayPtr--;
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeMethodDeclaration(boolean isNotAbstract) {
+       // // MethodDeclaration ::= MethodHeader MethodBody
+       // // AbstractMethodDeclaration ::= MethodHeader ';'
+       // super.consumeMethodDeclaration(isNotAbstract);
+       // if (isLocalDeclaration()) {
+       // // we ignore the local variable declarations
+       // return;
+       // }
+       // MethodDeclaration md = (MethodDeclaration) astStack[astPtr];
+       // requestor.exitMethod(endStatementPosition, md.declarationSourceEnd);
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeMethodHeader() {
+       // // MethodHeader ::= MethodHeaderName MethodHeaderParameters
+       // MethodHeaderExtendedDims ThrowsClauseopt
+       // super.consumeMethodHeader();
+       // if (isLocalDeclaration()) {
+       // // we ignore the local variable declarations
+       // intArrayPtr--;
+       // return;
+       // }
+       // MethodDeclaration md = (MethodDeclaration) astStack[astPtr];
+       //
+       // TypeReference returnType = md.returnType;
+       // char[] returnTypeName = returnTypeName(returnType);
+       // Argument[] arguments = md.arguments;
+       // char[][] argumentTypes = null;
+       // char[][] argumentNames = null;
+       // int[] argumentTypeStarts = null;
+       // int[] argumentTypeEnds = null;
+       // int[] argumentNameStarts = null;
+       // int[] argumentNameEnds = null;
+       // if (arguments != null) {
+       // int argumentLength = arguments.length;
+       // argumentTypes = new char[argumentLength][];
+       // argumentNames = new char[argumentLength][];
+       // argumentNameStarts = new int[argumentLength];
+       // argumentNameEnds = new int[argumentLength];
+       // argumentTypeStarts = new int[argumentLength];
+       // argumentTypeEnds = new int[argumentLength];
+       // for (int i = 0; i < argumentLength; i++) {
+       // Argument argument = arguments[i];
+       // TypeReference argumentType = argument.type;
+       // argumentTypes[i] = returnTypeName(argumentType);
+       // argumentNames[i] = argument.name;
+       // argumentNameStarts[i] = argument.sourceStart;
+       // argumentNameEnds[i] = argument.sourceEnd;
+       // argumentTypeStarts[i] = argumentType.sourceStart;
+       // argumentTypeEnds[i] = argumentType.sourceEnd;
+       // }
+       // }
+       // TypeReference[] thrownExceptions = md.thrownExceptions;
+       // char[][] exceptionTypes = null;
+       // int[] exceptionTypeStarts = null;
+       // int[] exceptionTypeEnds = null;
+       // if (thrownExceptions != null) {
+       // int thrownExceptionLength = thrownExceptions.length;
+       // exceptionTypeStarts = new int[thrownExceptionLength];
+       // exceptionTypeEnds = new int[thrownExceptionLength];
+       // exceptionTypes = new char[thrownExceptionLength][];
+       // for (int i = 0; i < thrownExceptionLength; i++) {
+       // TypeReference exception = thrownExceptions[i];
+       // exceptionTypes[i] = CharOperation.concatWith(exception.getTypeName(),
+       // '.');
+       // exceptionTypeStarts[i] = exception.sourceStart;
+       // exceptionTypeEnds[i] = exception.sourceEnd;
+       // }
+       // }
+       // requestor
+       // .enterMethod(
+       // md.declarationSourceStart,
+       // intArrayStack[intArrayPtr--],
+       // md.modifiers,
+       // md.modifiersSourceStart,
+       // returnTypeName,
+       // returnType.sourceStart,
+       // returnType.sourceEnd,
+       // typeDims,
+       // md.selector,
+       // md.sourceStart,
+       // (int) (selectorSourcePositions & 0xFFFFFFFFL),
+       // argumentTypes,
+       // argumentTypeStarts,
+       // argumentTypeEnds,
+       // argumentNames,
+       // argumentNameStarts,
+       // argumentNameEnds,
+       // rParenPos,
+       // extendsDim,
+       // extendsDim == 0 ? -1 : endPosition,
+       // exceptionTypes,
+       // exceptionTypeStarts,
+       // exceptionTypeEnds,
+       // scanner.currentPosition - 1);
+       // }
+       // protected void consumeMethodHeaderExtendedDims() {
+       // // MethodHeaderExtendedDims ::= Dimsopt
+       // // now we update the returnType of the method
+       // MethodDeclaration md = (MethodDeclaration) astStack[astPtr];
+       // int extendedDims = intStack[intPtr--];
+       // extendsDim = extendedDims;
+       // if (extendedDims != 0) {
+       // TypeReference returnType = md.returnType;
+       // md.sourceEnd = endPosition;
+       // int dims = returnType.dimensions() + extendedDims;
+       // int baseType;
+       // if ((baseType = identifierLengthStack[identifierLengthPtr + 1]) < 0) {
+       // //it was a baseType
+       // int sourceStart = returnType.sourceStart;
+       // int sourceEnd = returnType.sourceEnd;
+       // returnType = TypeReference.baseTypeReference(-baseType, dims);
+       // returnType.sourceStart = sourceStart;
+       // returnType.sourceEnd = sourceEnd;
+       // md.returnType = returnType;
+       // } else {
+       // md.returnType = this.copyDims(md.returnType, dims);
+       // }
+       // if (currentToken == TokenNameLBRACE) {
+       // md.bodyStart = endPosition + 1;
+       // }
+       // }
+       // }
+       // protected void consumeMethodHeaderName() {
+       // // MethodHeaderName ::= Modifiersopt Type 'Identifier' '('
+       // MethodDeclaration md = new
+       // MethodDeclaration(this.compilationUnit.compilationResult);
+       //
+       // //name
+       // md.selector = identifierStack[identifierPtr];
+       // selectorSourcePositions = identifierPositionStack[identifierPtr--];
+       // identifierLengthPtr--;
+       // //type
+       // md.returnType = getTypeReference(typeDims = intStack[intPtr--]);
+       // //modifiers
+       // md.declarationSourceStart = intStack[intPtr--];
+       // md.modifiersSourceStart = intStack[intPtr--];
+       // md.modifiers = intStack[intPtr--];
+       //
+       // //highlight starts at selector start
+       // md.sourceStart = (int) (selectorSourcePositions >>> 32);
+       // pushOnAstStack(md);
+       // md.bodyStart = scanner.currentPosition-1;
+       // }
+       // protected void consumeModifiers() {
+       // checkAnnotation(); // might update modifiers with AccDeprecated
+       // pushOnIntStack(modifiers); // modifiers
+       // pushOnIntStack(modifiersSourceStart);
+       // pushOnIntStack(
+       // declarationSourceStart >= 0 ? declarationSourceStart :
+       // modifiersSourceStart);
+       // resetModifiers();
+       // }
+       /**
+        * 
+        * INTERNAL USE-ONLY
+        */
+       // protected void consumePackageDeclarationName() {
+       // /* persisting javadoc positions */
+       // pushOnIntArrayStack(this.getJavaDocPositions());
+       //
+       // super.consumePackageDeclarationName();
+       // ImportReference importReference = compilationUnit.currentPackage;
+       //
+       // requestor.acceptPackage(
+       // importReference.declarationSourceStart,
+       // importReference.declarationSourceEnd,
+       // intArrayStack[intArrayPtr--],
+       // CharOperation.concatWith(importReference.getImportName(), '.'),
+       // importReference.sourceStart);
+       // }
+       // protected void consumePushModifiers() {
+       // checkAnnotation(); // might update modifiers with AccDeprecated
+       // pushOnIntStack(modifiers); // modifiers
+       // if (modifiersSourceStart < 0) {
+       // pushOnIntStack(-1);
+       // pushOnIntStack(
+       // declarationSourceStart >= 0 ? declarationSourceStart :
+       // scanner.startPosition);
+       // } else {
+       // pushOnIntStack(modifiersSourceStart);
+       // pushOnIntStack(
+       // declarationSourceStart >= 0 ? declarationSourceStart :
+       // modifiersSourceStart);
+       // }
+       // resetModifiers();
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeSingleTypeImportDeclarationName() {
+       // // SingleTypeImportDeclarationName ::= 'import' Name
+       //
+       // /* persisting javadoc positions */
+       // pushOnIntArrayStack(this.getJavaDocPositions());
+       //
+       // super.consumeSingleTypeImportDeclarationName();
+       // ImportReference importReference = (ImportReference) astStack[astPtr];
+       // requestor.acceptImport(
+       // importReference.declarationSourceStart,
+       // importReference.declarationSourceEnd,
+       // intArrayStack[intArrayPtr--],
+       // CharOperation.concatWith(importReference.getImportName(), '.'),
+       // importReference.sourceStart,
+       // false);
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeStaticInitializer() {
+       // // StaticInitializer ::= StaticOnly Block
+       // //push an Initializer
+       // //optimize the push/pop
+       // super.consumeStaticInitializer();
+       // Initializer initializer = (Initializer) astStack[astPtr];
+       // requestor.acceptInitializer(
+       // initializer.declarationSourceStart,
+       // initializer.declarationSourceEnd,
+       // intArrayStack[intArrayPtr--],
+       // AccStatic,
+       // intStack[intPtr--],
+       // initializer.block.sourceStart,
+       // initializer.declarationSourceEnd);
+       // }
+       // protected void consumeStaticOnly() {
+       // // StaticOnly ::= 'static'
+       // checkAnnotation(); // might update declaration source start
+       // pushOnIntStack(modifiersSourceStart);
+       // pushOnIntStack(
+       // declarationSourceStart >= 0 ? declarationSourceStart :
+       // modifiersSourceStart);
+       // jumpOverMethodBody();
+       // nestedMethod[nestedType]++;
+       // resetModifiers();
+       // }
+       // /**
+       // *
+       // * INTERNAL USE-ONLY
+       // */
+       // protected void consumeTypeImportOnDemandDeclarationName() {
+       // // TypeImportOnDemandDeclarationName ::= 'import' Name '.' '*'
+       //
+       // /* persisting javadoc positions */
+       // pushOnIntArrayStack(this.getJavaDocPositions());
+       //
+       // super.consumeTypeImportOnDemandDeclarationName();
+       // ImportReference importReference = (ImportReference) astStack[astPtr];
+       // requestor.acceptImport(
+       // importReference.declarationSourceStart,
+       // importReference.declarationSourceEnd,
+       // intArrayStack[intArrayPtr--],
+       // CharOperation.concatWith(importReference.getImportName(), '.'),
+       // importReference.sourceStart,
+       // true);
+       // }
+       public CompilationUnitDeclaration endParse(int act) {
+               if (scanner.recordLineSeparator) {
+                       requestor.acceptLineSeparatorPositions(scanner.getLineEnds());
+               }
+               return super.endParse(act);
+       }
 
-  //public int flushAnnotationsDefinedPriorTo(int position) {
-  //
-  //   return lastFieldEndPosition = super.flushAnnotationsDefinedPriorTo(position);
-  //}
-  //protected TypeReference getTypeReference(int dim) { /* build a Reference on a variable that may be qualified or not
-  //This variable is a type reference and dim will be its dimensions*/
-  //
-  //   int length;
-  //   TypeReference ref;
-  //   if ((length = identifierLengthStack[identifierLengthPtr--]) == 1) {
-  //           // single variable reference
-  //           if (dim == 0) {
-  //                   ref =
-  //                           new SingleTypeReference(
-  //                                   identifierStack[identifierPtr],
-  //                                   identifierPositionStack[identifierPtr--]);
-  //           } else {
-  //                   ref =
-  //                           new ArrayTypeReference(
-  //                                   identifierStack[identifierPtr],
-  //                                   dim,
-  //                                   identifierPositionStack[identifierPtr--]);
-  //                   ref.sourceEnd = endPosition;
-  //           }
-  //   } else {
-  //           if (length < 0) { //flag for precompiled type reference on base types
-  //                   ref = TypeReference.baseTypeReference(-length, dim);
-  //                   ref.sourceStart = intStack[intPtr--];
-  //                   if (dim == 0) {
-  //                           ref.sourceEnd = intStack[intPtr--];
-  //                   } else {
-  //                           intPtr--;
-  //                           ref.sourceEnd = endPosition;
-  //                   }
-  //           } else { //Qualified variable reference
-  //                   char[][] tokens = new char[length][];
-  //                   identifierPtr -= length;
-  //                   long[] positions = new long[length];
-  //                   System.arraycopy(identifierStack, identifierPtr + 1, tokens, 0, length);
-  //                   System.arraycopy(
-  //                           identifierPositionStack,
-  //                           identifierPtr + 1,
-  //                           positions,
-  //                           0,
-  //                           length);
-  //                   if (dim == 0) {
-  //                           ref = new QualifiedTypeReference(tokens, positions);
-  //                   } else {
-  //                           ref = new ArrayQualifiedTypeReference(tokens, dim, positions);
-  //                           ref.sourceEnd = endPosition;
-  //                   }
-  //           }
-  //   };
-  //   return ref;
-  //}
-  public void initialize() {
-    //positionning the parser for a new compilation unit
-    //avoiding stack reallocation and all that....
-    super.initialize(false);
-    intArrayPtr = -1;
-  }
+       /*
+        * Flush annotations defined prior to a given positions.
+        * 
+        * Note: annotations are stacked in syntactical order
+        * 
+        * Either answer given <position>, or the end position of a comment line
+        * immediately following the <position> (same line)
+        * 
+        * e.g. void foo(){ } // end of method foo
+        */
 
-  /**
-   * 
-   * INTERNAL USE-ONLY
-   */
-  //private boolean isLocalDeclaration() {
-  //   int nestedDepth = nestedType;
-  //   while (nestedDepth >= 0) {
-  //           if (nestedMethod[nestedDepth] != 0) {
-  //                   return true;
-  //           }
-  //           nestedDepth--;
-  //   }
-  //   return false;
-  //}
-  /*
-   * Investigate one entire unit.
-   */
-  public void parseCompilationUnit(ICompilationUnit unit) {
-    char[] regionSource = unit.getContents();
-    try {
-      initialize();
-      goForCompilationUnit();
-      referenceContext = compilationUnit = new CompilationUnitDeclaration(problemReporter(),
-          new CompilationResult(unit, 0, 0, 10), //this.options.maxProblemsPerUnit),
-          regionSource.length);
-      scanner.resetTo(0, regionSource.length);
-      scanner.setSource(regionSource);
-      parse();
-    } catch (AbortCompilation ex) {
-    }
-  }
+       // public int flushAnnotationsDefinedPriorTo(int position) {
+       //
+       // return lastFieldEndPosition =
+       // super.flushAnnotationsDefinedPriorTo(position);
+       // }
+       // protected TypeReference getTypeReference(int dim) { /* build a Reference
+       // on a variable that may be qualified or not
+       // This variable is a type reference and dim will be its dimensions*/
+       //
+       // int length;
+       // TypeReference ref;
+       // if ((length = identifierLengthStack[identifierLengthPtr--]) == 1) {
+       // // single variable reference
+       // if (dim == 0) {
+       // ref =
+       // new SingleTypeReference(
+       // identifierStack[identifierPtr],
+       // identifierPositionStack[identifierPtr--]);
+       // } else {
+       // ref =
+       // new ArrayTypeReference(
+       // identifierStack[identifierPtr],
+       // dim,
+       // identifierPositionStack[identifierPtr--]);
+       // ref.sourceEnd = endPosition;
+       // }
+       // } else {
+       // if (length < 0) { //flag for precompiled type reference on base types
+       // ref = TypeReference.baseTypeReference(-length, dim);
+       // ref.sourceStart = intStack[intPtr--];
+       // if (dim == 0) {
+       // ref.sourceEnd = intStack[intPtr--];
+       // } else {
+       // intPtr--;
+       // ref.sourceEnd = endPosition;
+       // }
+       // } else { //Qualified variable reference
+       // char[][] tokens = new char[length][];
+       // identifierPtr -= length;
+       // long[] positions = new long[length];
+       // System.arraycopy(identifierStack, identifierPtr + 1, tokens, 0, length);
+       // System.arraycopy(
+       // identifierPositionStack,
+       // identifierPtr + 1,
+       // positions,
+       // 0,
+       // length);
+       // if (dim == 0) {
+       // ref = new QualifiedTypeReference(tokens, positions);
+       // } else {
+       // ref = new ArrayQualifiedTypeReference(tokens, dim, positions);
+       // ref.sourceEnd = endPosition;
+       // }
+       // }
+       // };
+       // return ref;
+       // }
+       public void initialize() {
+               // positionning the parser for a new compilation unit
+               // avoiding stack reallocation and all that....
+               super.initialize(false);
+               intArrayPtr = -1;
+       }
 
-  /*
-   * Investigate one constructor declaration.
-   */
-  //public void parseConstructor(char[] regionSource) {
-  //   try {
-  //           initialize();
-  //           goForClassBodyDeclarations();
-  //           referenceContext =
-  //                   compilationUnit =
-  //                           compilationUnit =
-  //                                   new CompilationUnitDeclaration(
-  //                                           problemReporter(),
-  //                                           new CompilationResult(regionSource, 0, 0, 10), //this.options.maxProblemsPerUnit),
-  //                                           regionSource.length);
-  //           scanner.resetTo(0, regionSource.length);
-  //           scanner.setSource(regionSource);
-  //           parse();
-  //   } catch (AbortCompilation ex) {
-  //   }
-  //}
-  /*
-   * Investigate one field declaration statement (might have multiple declarations in it).
-   */
-  //public void parseField(char[] regionSource) {
-  //   try {
-  //           initialize();
-  //           goForFieldDeclaration();
-  //           referenceContext =
-  //                   compilationUnit =
-  //                           compilationUnit =
-  //                                   new CompilationUnitDeclaration(
-  //                                           problemReporter(),
-  //                                           new CompilationResult(regionSource, 0, 0, this.options.maxProblemsPerUnit),
-  //                                           regionSource.length);
-  //           scanner.resetTo(0, regionSource.length);
-  //           scanner.setSource(regionSource);
-  //           parse();
-  //   } catch (AbortCompilation ex) {
-  //   }
-  //
-  //}
-  ///*
-  // * Investigate one import statement declaration.
-  // */
-  //public void parseImport(char[] regionSource) {
-  //   try {
-  //           initialize();
-  //           goForImportDeclaration();
-  //           referenceContext =
-  //                   compilationUnit =
-  //                           compilationUnit =
-  //                                   new CompilationUnitDeclaration(
-  //                                           problemReporter(),
-  //                                           new CompilationResult(regionSource, 0, 0, this.options.maxProblemsPerUnit),
-  //                                           regionSource.length);
-  //           scanner.resetTo(0, regionSource.length);
-  //           scanner.setSource(regionSource);
-  //           parse();
-  //   } catch (AbortCompilation ex) {
-  //   }
-  //
-  //}
-  ///*
-  // * Investigate one initializer declaration.
-  // * regionSource need to content exactly an initializer declaration.
-  // * e.g: static { i = 4; }
-  // * { name = "test"; }
-  // */
-  //public void parseInitializer(char[] regionSource) {
-  //   try {
-  //           initialize();
-  //           goForInitializer();
-  //           referenceContext =
-  //                   compilationUnit =
-  //                           compilationUnit =
-  //                                   new CompilationUnitDeclaration(
-  //                                           problemReporter(),
-  //                                           new CompilationResult(regionSource, 0, 0, this.options.maxProblemsPerUnit),
-  //                                           regionSource.length);
-  //           scanner.resetTo(0, regionSource.length);
-  //           scanner.setSource(regionSource);
-  //           parse();
-  //   } catch (AbortCompilation ex) {
-  //   }
-  //
-  //}
-  ///*
-  // * Investigate one method declaration.
-  // */
-  //public void parseMethod(char[] regionSource) {
-  //   try {
-  //           initialize();
-  //           goForGenericMethodDeclaration();
-  //           referenceContext =
-  //                   compilationUnit =
-  //                           compilationUnit =
-  //                                   new CompilationUnitDeclaration(
-  //                                           problemReporter(),
-  //                                           new CompilationResult(regionSource, 0, 0, this.options.maxProblemsPerUnit),
-  //                                           regionSource.length);
-  //           scanner.resetTo(0, regionSource.length);
-  //           scanner.setSource(regionSource);
-  //           parse();
-  //   } catch (AbortCompilation ex) {
-  //   }
-  //
-  //}
-  ///*
-  // * Investigate one package statement declaration.
-  // */
-  //public void parsePackage(char[] regionSource) {
-  //   try {
-  //           initialize();
-  //           goForPackageDeclaration();
-  //           referenceContext =
-  //                   compilationUnit =
-  //                           compilationUnit =
-  //                                   new CompilationUnitDeclaration(
-  //                                           problemReporter(),
-  //                                           new CompilationResult(regionSource, 0, 0, this.options.maxProblemsPerUnit),
-  //                                           regionSource.length);
-  //           scanner.resetTo(0, regionSource.length);
-  //           scanner.setSource(regionSource);
-  //           parse();
-  //   } catch (AbortCompilation ex) {
-  //   }
-  //
-  //}
-  ///*
-  // * Investigate one type declaration, its fields, methods and member types.
-  // */
-  //public void parseType(char[] regionSource) {
-  //   try {
-  //           initialize();
-  //           goForTypeDeclaration();
-  //           referenceContext =
-  //                   compilationUnit =
-  //                           compilationUnit =
-  //                                   new CompilationUnitDeclaration(
-  //                                           problemReporter(),
-  //                                           new CompilationResult(regionSource, 0, 0, this.options.maxProblemsPerUnit),
-  //                                           regionSource.length);
-  //           scanner.resetTo(0, regionSource.length);
-  //           scanner.setSource(regionSource);
-  //           parse();
-  //   } catch (AbortCompilation ex) {
-  //   }
-  //
-  //}
-  /**
-   * Returns this parser's problem reporter initialized with its reference context. Also it is assumed that a problem is going to be
-   * reported, so initializes the compilation result's line positions.
-   */
-  public ProblemReporter problemReporter() {
-    problemReporter.referenceContext = referenceContext;
-    return problemReporter;
-  }
+       /**
+        * 
+        * INTERNAL USE-ONLY
+        */
+       // private boolean isLocalDeclaration() {
+       // int nestedDepth = nestedType;
+       // while (nestedDepth >= 0) {
+       // if (nestedMethod[nestedDepth] != 0) {
+       // return true;
+       // }
+       // nestedDepth--;
+       // }
+       // return false;
+       // }
+       /*
+        * Investigate one entire unit.
+        */
+       public void parseCompilationUnit(ICompilationUnit unit) {
+               char[] regionSource = unit.getContents();
+               try {
+                       initialize();
+                       goForCompilationUnit();
+                       referenceContext = compilationUnit = new CompilationUnitDeclaration(
+                                       problemReporter(), new CompilationResult(unit, 0, 0, 10), // this.options.maxProblemsPerUnit),
+                                       regionSource.length);
+                       scanner.resetTo(0, regionSource.length);
+                       scanner.setSource(regionSource);
+                       parse();
+               } catch (AbortCompilation ex) {
+               }
+       }
 
-  protected void pushOnIntArrayStack(int[] positions) {
+       /*
+        * Investigate one constructor declaration.
+        */
+       // public void parseConstructor(char[] regionSource) {
+       // try {
+       // initialize();
+       // goForClassBodyDeclarations();
+       // referenceContext =
+       // compilationUnit =
+       // compilationUnit =
+       // new CompilationUnitDeclaration(
+       // problemReporter(),
+       // new CompilationResult(regionSource, 0, 0, 10),
+       // //this.options.maxProblemsPerUnit),
+       // regionSource.length);
+       // scanner.resetTo(0, regionSource.length);
+       // scanner.setSource(regionSource);
+       // parse();
+       // } catch (AbortCompilation ex) {
+       // }
+       // }
+       /*
+        * Investigate one field declaration statement (might have multiple
+        * declarations in it).
+        */
+       // public void parseField(char[] regionSource) {
+       // try {
+       // initialize();
+       // goForFieldDeclaration();
+       // referenceContext =
+       // compilationUnit =
+       // compilationUnit =
+       // new CompilationUnitDeclaration(
+       // problemReporter(),
+       // new CompilationResult(regionSource, 0, 0,
+       // this.options.maxProblemsPerUnit),
+       // regionSource.length);
+       // scanner.resetTo(0, regionSource.length);
+       // scanner.setSource(regionSource);
+       // parse();
+       // } catch (AbortCompilation ex) {
+       // }
+       //
+       // }
+       // /*
+       // * Investigate one import statement declaration.
+       // */
+       // public void parseImport(char[] regionSource) {
+       // try {
+       // initialize();
+       // goForImportDeclaration();
+       // referenceContext =
+       // compilationUnit =
+       // compilationUnit =
+       // new CompilationUnitDeclaration(
+       // problemReporter(),
+       // new CompilationResult(regionSource, 0, 0,
+       // this.options.maxProblemsPerUnit),
+       // regionSource.length);
+       // scanner.resetTo(0, regionSource.length);
+       // scanner.setSource(regionSource);
+       // parse();
+       // } catch (AbortCompilation ex) {
+       // }
+       //
+       // }
+       // /*
+       // * Investigate one initializer declaration.
+       // * regionSource need to content exactly an initializer declaration.
+       // * e.g: static { i = 4; }
+       // * { name = "test"; }
+       // */
+       // public void parseInitializer(char[] regionSource) {
+       // try {
+       // initialize();
+       // goForInitializer();
+       // referenceContext =
+       // compilationUnit =
+       // compilationUnit =
+       // new CompilationUnitDeclaration(
+       // problemReporter(),
+       // new CompilationResult(regionSource, 0, 0,
+       // this.options.maxProblemsPerUnit),
+       // regionSource.length);
+       // scanner.resetTo(0, regionSource.length);
+       // scanner.setSource(regionSource);
+       // parse();
+       // } catch (AbortCompilation ex) {
+       // }
+       //
+       // }
+       // /*
+       // * Investigate one method declaration.
+       // */
+       // public void parseMethod(char[] regionSource) {
+       // try {
+       // initialize();
+       // goForGenericMethodDeclaration();
+       // referenceContext =
+       // compilationUnit =
+       // compilationUnit =
+       // new CompilationUnitDeclaration(
+       // problemReporter(),
+       // new CompilationResult(regionSource, 0, 0,
+       // this.options.maxProblemsPerUnit),
+       // regionSource.length);
+       // scanner.resetTo(0, regionSource.length);
+       // scanner.setSource(regionSource);
+       // parse();
+       // } catch (AbortCompilation ex) {
+       // }
+       //
+       // }
+       // /*
+       // * Investigate one package statement declaration.
+       // */
+       // public void parsePackage(char[] regionSource) {
+       // try {
+       // initialize();
+       // goForPackageDeclaration();
+       // referenceContext =
+       // compilationUnit =
+       // compilationUnit =
+       // new CompilationUnitDeclaration(
+       // problemReporter(),
+       // new CompilationResult(regionSource, 0, 0,
+       // this.options.maxProblemsPerUnit),
+       // regionSource.length);
+       // scanner.resetTo(0, regionSource.length);
+       // scanner.setSource(regionSource);
+       // parse();
+       // } catch (AbortCompilation ex) {
+       // }
+       //
+       // }
+       // /*
+       // * Investigate one type declaration, its fields, methods and member types.
+       // */
+       // public void parseType(char[] regionSource) {
+       // try {
+       // initialize();
+       // goForTypeDeclaration();
+       // referenceContext =
+       // compilationUnit =
+       // compilationUnit =
+       // new CompilationUnitDeclaration(
+       // problemReporter(),
+       // new CompilationResult(regionSource, 0, 0,
+       // this.options.maxProblemsPerUnit),
+       // regionSource.length);
+       // scanner.resetTo(0, regionSource.length);
+       // scanner.setSource(regionSource);
+       // parse();
+       // } catch (AbortCompilation ex) {
+       // }
+       //
+       // }
+       /**
+        * Returns this parser's problem reporter initialized with its reference
+        * context. Also it is assumed that a problem is going to be reported, so
+        * initializes the compilation result's line positions.
+        */
+       public ProblemReporter problemReporter() {
+               problemReporter.referenceContext = referenceContext;
+               return problemReporter;
+       }
 
-    try {
-      intArrayStack[++intArrayPtr] = positions;
-    } catch (IndexOutOfBoundsException e) {
-      //intPtr is correct
-      int oldStackLength = intArrayStack.length;
-      int oldStack[][] = intArrayStack;
-      intArrayStack = new int[oldStackLength + StackIncrement][];
-      System.arraycopy(oldStack, 0, intArrayStack, 0, oldStackLength);
-      intArrayStack[intArrayPtr] = positions;
-    }
-  }
+//     protected void pushOnIntArrayStack(int[] positions) {
+//
+//             try {
+//                     intArrayStack[++intArrayPtr] = positions;
+//             } catch (IndexOutOfBoundsException e) {
+//                     // intPtr is correct
+//                     int oldStackLength = intArrayStack.length;
+//                     int oldStack[][] = intArrayStack;
+//                     intArrayStack = new int[oldStackLength + StackIncrement][];
+//                     System.arraycopy(oldStack, 0, intArrayStack, 0, oldStackLength);
+//                     intArrayStack[intArrayPtr] = positions;
+//             }
+//     }
 
-  //protected void resetModifiers() {
-  //   super.resetModifiers();
-  //   declarationSourceStart = -1;
-  //}
-  /*
-   * Syntax error was detected. Will attempt to perform some recovery action in order to resume to the regular parse loop.
-   */
-  protected boolean resumeOnSyntaxError() {
-    return false;
-  }
-  /*
-   * Answer a char array representation of the type name formatted like: - type name + dimensions Example: "A[][]".toCharArray()
-   * "java.lang.String".toCharArray()
-   */
-  //private char[] returnTypeName(TypeReference type) {
-  //   int dimension = type.dimensions();
-  //   if (dimension != 0) {
-  //           char[] dimensionsArray = new char[dimension * 2];
-  //           for (int i = 0; i < dimension; i++) {
-  //                   dimensionsArray[i*2] = '[';
-  //                   dimensionsArray[(i*2) + 1] = ']';
-  //           }
-  //           return CharOperation.concat(
-  //                   CharOperation.concatWith(type.getTypeName(), '.'),
-  //                   dimensionsArray);
-  //   }
-  //   return CharOperation.concatWith(type.getTypeName(), '.');
-  //}
-  //public String toString() {
-  //   StringBuffer buffer = new StringBuffer();
-  //   buffer.append("intArrayPtr = " + intArrayPtr + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-  //   buffer.append(super.toString());
-  //   return buffer.toString();
-  //}
-  ///**
-  // * INTERNAL USE ONLY
-  // */
-  //protected TypeReference typeReference(
-  //   int dim,
-  //   int localIdentifierPtr,
-  //   int localIdentifierLengthPtr) {
-  //   /* build a Reference on a variable that may be qualified or not
-  //    * This variable is a type reference and dim will be its dimensions.
-  //    * We don't have any side effect on the stacks' pointers.
-  //    */
-  //
-  //   int length;
-  //   TypeReference ref;
-  //   if ((length = identifierLengthStack[localIdentifierLengthPtr]) == 1) {
-  //           // single variable reference
-  //           if (dim == 0) {
-  //                   ref =
-  //                           new SingleTypeReference(
-  //                                   identifierStack[localIdentifierPtr],
-  //                                   identifierPositionStack[localIdentifierPtr--]);
-  //           } else {
-  //                   ref =
-  //                           new ArrayTypeReference(
-  //                                   identifierStack[localIdentifierPtr],
-  //                                   dim,
-  //                                   identifierPositionStack[localIdentifierPtr--]);
-  //                   ref.sourceEnd = endPosition;
-  //           }
-  //   } else {
-  //           if (length < 0) { //flag for precompiled type reference on base types
-  //                   ref = TypeReference.baseTypeReference(-length, dim);
-  //                   ref.sourceStart = intStack[localIntPtr--];
-  //                   if (dim == 0) {
-  //                           ref.sourceEnd = intStack[localIntPtr--];
-  //                   } else {
-  //                           localIntPtr--;
-  //                           ref.sourceEnd = endPosition;
-  //                   }
-  //           } else { //Qualified variable reference
-  //                   char[][] tokens = new char[length][];
-  //                   localIdentifierPtr -= length;
-  //                   long[] positions = new long[length];
-  //                   System.arraycopy(identifierStack, localIdentifierPtr + 1, tokens, 0, length);
-  //                   System.arraycopy(
-  //                           identifierPositionStack,
-  //                           localIdentifierPtr + 1,
-  //                           positions,
-  //                           0,
-  //                           length);
-  //                   if (dim == 0)
-  //                           ref = new QualifiedTypeReference(tokens, positions);
-  //                   else
-  //                           ref = new ArrayQualifiedTypeReference(tokens, dim, positions);
-  //           }
-  //   };
-  //   return ref;
-  //}
+       // protected void resetModifiers() {
+       // super.resetModifiers();
+       // declarationSourceStart = -1;
+       // }
+       /*
+        * Syntax error was detected. Will attempt to perform some recovery action
+        * in order to resume to the regular parse loop.
+        */
+//     protected boolean resumeOnSyntaxError() {
+//             return false;
+//     }
+       /*
+        * Answer a char array representation of the type name formatted like: -
+        * type name + dimensions Example: "A[][]".toCharArray()
+        * "java.lang.String".toCharArray()
+        */
+       // private char[] returnTypeName(TypeReference type) {
+       // int dimension = type.dimensions();
+       // if (dimension != 0) {
+       // char[] dimensionsArray = new char[dimension * 2];
+       // for (int i = 0; i < dimension; i++) {
+       // dimensionsArray[i*2] = '[';
+       // dimensionsArray[(i*2) + 1] = ']';
+       // }
+       // return CharOperation.concat(
+       // CharOperation.concatWith(type.getTypeName(), '.'),
+       // dimensionsArray);
+       // }
+       // return CharOperation.concatWith(type.getTypeName(), '.');
+       // }
+       // public String toString() {
+       // StringBuffer buffer = new StringBuffer();
+       // buffer.append("intArrayPtr = " + intArrayPtr + "\n"); //$NON-NLS-1$
+       // //$NON-NLS-2$
+       // buffer.append(super.toString());
+       // return buffer.toString();
+       // }
+       // /**
+       // * INTERNAL USE ONLY
+       // */
+       // protected TypeReference typeReference(
+       // int dim,
+       // int localIdentifierPtr,
+       // int localIdentifierLengthPtr) {
+       // /* build a Reference on a variable that may be qualified or not
+       // * This variable is a type reference and dim will be its dimensions.
+       // * We don't have any side effect on the stacks' pointers.
+       // */
+       //
+       // int length;
+       // TypeReference ref;
+       // if ((length = identifierLengthStack[localIdentifierLengthPtr]) == 1) {
+       // // single variable reference
+       // if (dim == 0) {
+       // ref =
+       // new SingleTypeReference(
+       // identifierStack[localIdentifierPtr],
+       // identifierPositionStack[localIdentifierPtr--]);
+       // } else {
+       // ref =
+       // new ArrayTypeReference(
+       // identifierStack[localIdentifierPtr],
+       // dim,
+       // identifierPositionStack[localIdentifierPtr--]);
+       // ref.sourceEnd = endPosition;
+       // }
+       // } else {
+       // if (length < 0) { //flag for precompiled type reference on base types
+       // ref = TypeReference.baseTypeReference(-length, dim);
+       // ref.sourceStart = intStack[localIntPtr--];
+       // if (dim == 0) {
+       // ref.sourceEnd = intStack[localIntPtr--];
+       // } else {
+       // localIntPtr--;
+       // ref.sourceEnd = endPosition;
+       // }
+       // } else { //Qualified variable reference
+       // char[][] tokens = new char[length][];
+       // localIdentifierPtr -= length;
+       // long[] positions = new long[length];
+       // System.arraycopy(identifierStack, localIdentifierPtr + 1, tokens, 0,
+       // length);
+       // System.arraycopy(
+       // identifierPositionStack,
+       // localIdentifierPtr + 1,
+       // positions,
+       // 0,
+       // length);
+       // if (dim == 0)
+       // ref = new QualifiedTypeReference(tokens, positions);
+       // else
+       // ref = new ArrayQualifiedTypeReference(tokens, dim, positions);
+       // }
+       // };
+       // return ref;
+       // }
 }
\ No newline at end of file