/******************************************************************************* * Copyright (c) 2000, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jdt.internal.compiler; import org.eclipse.jdt.core.compiler.CategorizedProblem; /** * Part of the source element parser responsible for building the output. It gets notified of * structural information as they are detected, relying on the requestor to assemble them together, * based on the notifications it got. * * The structural investigation includes: - package statement - import statements - top-level types: * package member, member types (member types of member types...) - fields - methods * * If reference information is requested, then all source constructs are investigated and type, * field & method references are provided as well. * * Any (parsing) problem encountered is also provided. * * All positions are relative to the exact source fed to the parser. * * Elements which are complex are notified in two steps: - enter<Element> : once the element header * has been identified - exit<Element> : once the element has been fully consumed * * other simpler elements (package, import) are read all at once: - accept<Element> */ public interface IDocumentElementRequestor { /** * @param declarationStart - a source position corresponding to the start of the package * declaration * @param declarationEnd - a source position corresponding to the end of the package declaration * @param javaDocPositions - answer back an array of sourceStart/sourceEnd positions of the * available JavaDoc comments. The array is a flattened structure: 2*n entries with * consecutives start and end positions. If no JavaDoc is available, then null is * answered instead of an empty array. e.g. { 10, 20, 25, 45 } --> javadoc1 from 10 * to 20, javadoc2 from 25 to 45 The array is equals to null if there are no javadoc * comments * @param name - the name of the package * @param nameStartPosition - a source position corresponding to the first character of the name * @param onDemand - a boolean equals to true if the import is an import on demand */ void acceptImport( int declarationStart, int declarationEnd, int[] javaDocPositions, char[] name, int nameStartPosition, boolean onDemand, int modifiers); /** * @param declarationStart - a source position corresponding to the start of the package * declaration * @param declarationEnd - a source position corresponding to the end of the package declaration * @param javaDocPositions - answer back an array of sourceStart/sourceEnd positions of the * available JavaDoc comments. The array is a flattened structure: 2*n entries with * consecutives start and end positions. If no JavaDoc is available, then null is * answered instead of an empty array. e.g. { 10, 20, 25, 45 } --> javadoc1 from 10 * to 20, javadoc2 from 25 to 45 The array is equals to null if there are no javadoc * comments * @param modifiers - the modifiers for this initializer * @param modifiersStart - a source position corresponding to the start of the textual * modifiers, is < 0 if there are no textual modifiers * @param bodyStart - the position of the '{' * @param bodyEnd - the position of the '}' */ void acceptInitializer( int declarationStart, int declarationEnd, int[] javaDocPositions, int modifiers, int modifiersStart, int bodyStart, int bodyEnd); /* * Table of line separator position. This table is passed once at the end * of the parse action, so as to allow computation of normalized ranges. * * A line separator might corresponds to several characters in the source, * */ void acceptLineSeparatorPositions(int[] positions); /** * @param declarationStart - a source position corresponding to the start of the package * declaration * @param declarationEnd - a source position corresponding to the end of the package declaration * @param javaDocPositions - answer back an array of sourceStart/sourceEnd positions of the * available JavaDoc comments. The array is a flattened structure: 2*n entries with * consecutives start and end positions. If no JavaDoc is available, then null is * answered instead of an empty array. e.g. { 10, 20, 25, 45 } --> javadoc1 from 10 * to 20, javadoc2 from 25 to 45 The array is equals to null if there are no javadoc * comments * @param name - the name of the package * @param nameStartPosition - a source position corresponding to the first character of the name */ void acceptPackage( int declarationStart, int declarationEnd, int[] javaDocPositions, char[] name, int nameStartPosition); /** * @param problem - Used to report a problem while running the JDOM */ void acceptProblem(CategorizedProblem problem); /** * @param declarationStart - a source position corresponding to the start of this class. * @param javaDocPositions - answer back an array of sourceStart/sourceEnd positions of the * available JavaDoc comments. The array is a flattened structure: 2*n entries with * consecutives start and end positions. If no JavaDoc is available, then null is * answered instead of an empty array. e.g. { 10, 20, 25, 45 } --> javadoc1 from 10 * to 20, javadoc2 from 25 to 45 The array is equals to null if there are no javadoc * comments * @param modifiers - the modifiers for this class * @param modifiersStart - a source position corresponding to the start of the textual * modifiers, is < 0 if there are no textual modifiers * @param classStart - a source position corresponding to the start of the keyword 'class' * @param name - the name of the class * @param nameStart - a source position corresponding to the start of the name * @param nameEnd - a source position corresponding to the end of the name * @param superclass - the name of the superclass * @param superclassStart - a source position corresponding to the start of the superclass name * @param superclassEnd - a source position corresponding to the end of the superclass name * @param superinterfaces - the name of the superinterfaces * @param superinterfaceStarts - an array of source positions corresponding to the start of * their respective superinterface names * @param superinterfaceEnds - an array of source positions corresponding to the end of their * respective superinterface names * @param bodyStart - a source position corresponding to the open bracket of the class body */ void enterClass( int declarationStart, int[] javaDocPositions, int modifiers, int modifiersStart, int classStart, char[] name, int nameStart, int nameEnd, char[] superclass, int superclassStart, int superclassEnd, char[][] superinterfaces, int[] superinterfaceStarts, int[] superinterfaceEnds, int bodyStart); void enterCompilationUnit(); /** * @param declarationStart - a source position corresponding to the first character of this * constructor declaration * @param javaDocPositions - answer back an array of sourceStart/sourceEnd positions of the * available JavaDoc comments. The array is a flattened structure: 2*n entries with * consecutives start and end positions. If no JavaDoc is available, then null is * answered instead of an empty array. e.g. { 10, 20, 25, 45 } --> javadoc1 from 10 * to 20, javadoc2 from 25 to 45 The array is equals to null if there are no javadoc * comments * @param modifiers - the modifiers for this constructor converted to a flag * @param modifiersStart - a source position corresponding to the first character of the textual * modifiers * @param name - the name of this constructor * @param nameStart - a source position corresponding to the first character of the name * @param nameEnd - a source position corresponding to the last character of the name * @param parameterTypes - a list of parameter type names * @param parameterTypeStarts - a list of source positions corresponding to the first character * of each parameter type name * @param parameterTypeEnds - a list of source positions corresponding to the last character of * each parameter type name * @param parameterNames - a list of the names of the parameters * @param parametersEnd - a source position corresponding to the last character of the parameter * list * @param exceptionTypes - a list of the exception types * @param exceptionTypeStarts - a list of source positions corresponding to the first character * of the respective exception types * @param exceptionTypeEnds - a list of source positions corresponding to the last character of * the respective exception types * @param bodyStart - a source position corresponding to the start of this constructor's body */ void enterConstructor( int declarationStart, int[] javaDocPositions, int modifiers, int modifiersStart, char[] name, int nameStart, int nameEnd, char[][] parameterTypes, int[] parameterTypeStarts, int[] parameterTypeEnds, char[][] parameterNames, int[] parameterNameStarts, int[] parameterNameEnds, int parametersEnd, char[][] exceptionTypes, int[] exceptionTypeStarts, int[] exceptionTypeEnds, int bodyStart); /** * @param declarationStart - a source position corresponding to the first character of this * field * @param javaDocPositions - answer back an array of sourceStart/sourceEnd positions of the * available JavaDoc comments. The array is a flattened structure: 2*n entries with * consecutives start and end positions. If no JavaDoc is available, then null is * answered instead of an empty array. e.g. { 10, 20, 25, 45 } --> javadoc1 from 10 * to 20, javadoc2 from 25 to 45 The array is equals to null if there are no javadoc * comments * @param modifiers - the modifiers for this field converted to a flag * @param modifiersStart - a source position corresponding to the first character of the textual * modifiers * @param type - the name of the field type * @param typeStart - a source position corresponding to the start of the fields type * @param typeEnd - a source position corresponding to the end of the fields type * @param typeDimensionCount - the array dimension indicated on the type (for example, 'int[] * v') * @param name - the name of this constructor * @param nameStart - a source position corresponding to the first character of the name * @param nameEnd - a source position corresponding to the last character of the name * @param extendedTypeDimensionCount - the array dimension indicated on the variable, (for * example, 'int v[]') * @param extendedTypeDimensionEnd - a source position corresponding to the end of the extened * type dimension. This position should be -1 in case there is no extended dimension * for the type. */ void enterField( int declarationStart, int[] javaDocPositions, int modifiers, int modifiersStart, char[] type, int typeStart, int typeEnd, int typeDimensionCount, char[] name, int nameStart, int nameEnd, int extendedTypeDimensionCount, int extendedTypeDimensionEnd); /** * @param declarationStart - a source position corresponding to the start of this class. * @param javaDocPositions - answer back an array of sourceStart/sourceEnd positions of the * available JavaDoc comments. The array is a flattened structure: 2*n entries with * consecutives start and end positions. If no JavaDoc is available, then null is * answered instead of an empty array. e.g. { 10, 20, 25, 45 } --> javadoc1 from 10 * to 20, javadoc2 from 25 to 45 The array is equals to null if there are no javadoc * comments * @param modifiers - the modifiers for this class * @param modifiersStart - a source position corresponding to the start of the textual * modifiers, is < 0 if there are no textual modifiers * @param interfaceStart - a source position corresponding to the start of the keyword * 'interface' * @param name - the name of the class * @param nameStart - a source position corresponding to the start of the name * @param nameEnd - a source position corresponding to the end of the name * @param superinterfaces - the name of the superinterfaces * @param superinterfaceStarts - an array of source positions corresponding to the start of * their respective superinterface names * @param superinterfaceEnds - an array of source positions corresponding to the end of their * respective superinterface names * @param bodyStart - a source position corresponding to the open bracket of the class body */ void enterInterface( int declarationStart, int[] javaDocPositions, int modifiers, int modifiersStart, int interfaceStart, char[] name, int nameStart, int nameEnd, char[][] superinterfaces, int[] superinterfaceStarts, int[] superinterfaceEnds, int bodyStart); /** * @param declarationStart - a source position corresponding to the first character of this * constructor declaration * @param javaDocPositions - answer back an array of sourceStart/sourceEnd positions of the * available JavaDoc comments. The array is a flattened structure: 2*n entries with * consecutives start and end positions. If no JavaDoc is available, then null is * answered instead of an empty array. e.g. { 10, 20, 25, 45 } --> javadoc1 from 10 * to 20, javadoc2 from 25 to 45 The array is equals to null if there are no javadoc * comments * @param modifiers - the modifiers for this constructor converted to a flag * @param modifiersStart - a source position corresponding to the first character of the textual * modifiers * @param returnType - the name of the return type * @param returnTypeStart - a source position corresponding to the first character of the return * type * @param returnTypeEnd - a source position corresponding to the last character of the return * type * @param returnTypeDimensionCount - the array dimension count as supplied on the return type * (for example, 'public int[] foo() {}') * @param name - the name of this constructor * @param nameStart - a source position corresponding to the first character of the name * @param nameEnd - a source position corresponding to the last character of the name * @param parameterTypes - a list of parameter type names * @param parameterTypeStarts - a list of source positions corresponding to the first character * of each parameter type name * @param parameterTypeEnds - a list of source positions corresponding to the last character of * each parameter type name * @param parameterNames - a list of the names of the parameters * @param parametersEnd - a source position corresponding to the last character of the parameter * list * @param extendedReturnTypeDimensionCount - the array dimension count as supplied on the end of * the parameter list (for example, 'public int foo()[] {}') * @param extendedReturnTypeDimensionEnd - a source position corresponding to the last character * of the extended return type dimension. This position should be -1 in case there is * no extended dimension for the type. * @param exceptionTypes - a list of the exception types * @param exceptionTypeStarts - a list of source positions corresponding to the first character * of the respective exception types * @param exceptionTypeEnds - a list of source positions corresponding to the last character of * the respective exception types * @param bodyStart - a source position corresponding to the start of this method's body */ void enterMethod( int declarationStart, int[] javaDocPositions, int modifiers, int modifiersStart, char[] returnType, int returnTypeStart, int returnTypeEnd, int returnTypeDimensionCount, char[] name, int nameStart, int nameEnd, char[][] parameterTypes, int[] parameterTypeStarts, int[] parameterTypeEnds, char[][] parameterNames, int[] parameterNameStarts, int[] parameterNameEnds, int parametersEnd, int extendedReturnTypeDimensionCount, int extendedReturnTypeDimensionEnd, char[][] exceptionTypes, int[] exceptionTypeStarts, int[] exceptionTypeEnds, int bodyStart); /** * @param bodyEnd - a source position corresponding to the closing bracket of the class * @param declarationEnd - a source position corresponding to the end of the class declaration. * This can include whitespace and comments following the closing bracket. */ void exitClass( int bodyEnd, int declarationEnd); /** * @param declarationEnd - a source position corresponding to the end of the compilation unit */ void exitCompilationUnit( int declarationEnd); /** * @param bodyEnd - a source position corresponding to the closing bracket of the method * @param declarationEnd - a source position corresponding to the end of the method declaration. * This can include whitespace and comments following the closing bracket. */ void exitConstructor( int bodyEnd, int declarationEnd); /** * @param bodyEnd - a source position corresponding to the end of the field. * @param declarationEnd - a source position corresponding to the end of the field. This can * include whitespace and comments following the semi-colon. */ void exitField( int bodyEnd, int declarationEnd); /** * @param bodyEnd - a source position corresponding to the closing bracket of the interface * @param declarationEnd - a source position corresponding to the end of the interface * declaration. This can include whitespace and comments following the closing * bracket. */ void exitInterface( int bodyEnd, int declarationEnd); /** * @param bodyEnd - a source position corresponding to the closing bracket of the method * @param declarationEnd - a source position corresponding to the end of the method declaration. * This can include whitespace and comments following the closing bracket. */ void exitMethod( int bodyEnd, int declarationEnd); }