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 80da79e..dfc0471 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 @@ -16,1287 +16,1340 @@ import net.sourceforge.phpdt.internal.compiler.problem.AbortCompilation; import net.sourceforge.phpdt.internal.compiler.problem.ProblemReporter; /* - * 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 , or the end position of a comment line immediately following the (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 , or the end position of a comment line + * immediately following the (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