X-Git-Url: http://secure.phpeclipse.com

diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/DocumentElementParser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/DocumentElementParser.java
index 488e618..d68c7a2 100644
--- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/DocumentElementParser.java
+++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/DocumentElementParser.java
@@ -8,1295 +8,1348 @@
 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;
 
 /*
- * 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;
+	IDocumentElementRequestor requestor;
 
-  private int localIntPtr;
+	private int localIntPtr;
 
-  private int lastFieldEndPosition;
+	private int lastFieldEndPosition;
 
-  private int lastFieldBodyEndPosition;
+	private int lastFieldBodyEndPosition;
 
-  private int typeStartPosition;
+	private int typeStartPosition;
 
-  private long selectorSourcePositions;
+	private long selectorSourcePositions;
 
-  private int typeDims;
+	private int typeDims;
 
-  private int extendsDim;
+	private int extendsDim;
 
-  private int declarationSourceStart;
+	private int declarationSourceStart;
 
-  /* int[] stack for storing javadoc positions */
-  int[][] intArrayStack;
+	/* int[] stack for storing javadoc positions */
+	int[][] intArrayStack;
 
-  int intArrayPtr;
+	int intArrayPtr;
 
-  //	CompilerOptions options;
+	// CompilerOptions options;
 
-  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;
-  }
+	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;
+	}
 
-  /**
-   * 
-   * 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);
-  }
+	/**
+	 * 
+	 * 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);
+	}
 
-  /*
-   * 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
-   */
+	/*
+	 * 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
+	 */
 
-  //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;
-  }
+	// 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;
+	}
 
-  /**
-   * 
-   * 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) {
-    }
-  }
+	/**
+	 * 
+	 * 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) {
+		}
+	}
 
-  /*
-   * 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;
-  }
+	/*
+	 * 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;
+	}
 
-  protected void pushOnIntArrayStack(int[] 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;
-    }
-  }
+		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