/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package net.sourceforge.phpdt.internal.compiler; import java.util.HashMap; import net.sourceforge.phpdt.core.compiler.IProblem; /* * 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 : once the element header has been identified * - exit : once the element has been fully consumed * * other simpler elements (package, import) are read all at once: * - accept */ public interface ISourceElementRequestor { void acceptConstructorReference(char[] typeName, int argCount, int sourcePosition); //void acceptFieldReference(char[] fieldName, int sourcePosition); /** * @param declarationStart This is the position of the first character of the * import keyword. * @param declarationEnd This is the position of the ';' ending the import statement * or the end of the comment following the import. * @param name This is the name of the import like specified in the source including the dots. The '.*' * is never included in the name. * @param onDemand set to true if the import is an import on demand (e.g. import java.io.*). False otherwise. */ void acceptImport( int declarationStart, int declarationEnd, char[] name, boolean onDemand); /* * 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); void acceptMethodReference(char[] methodName, int argCount, int sourcePosition); //void acceptPackage( // int declarationStart, // int declarationEnd, // char[] name); void acceptProblem(IProblem problem); void acceptTypeReference(char[][] typeName, int sourceStart, int sourceEnd); void acceptTypeReference(char[] typeName, int sourcePosition); void acceptUnknownReference(char[][] name, int sourceStart, int sourceEnd); void acceptUnknownReference(char[] name, int sourcePosition); void enterClass( int declarationStart, int modifiers, char[] name, int nameSourceStart, int nameSourceEnd, char[] superclass, char[][] superinterfaces); void enterCompilationUnit(); void enterConstructor( int declarationStart, int modifiers, char[] name, int nameSourceStart, int nameSourceEnd, char[][] parameterTypes, char[][] parameterNames, char[][] exceptionTypes); void enterField(int declarationStart, int modifiers, char[] type, char[] name, int nameSourceStart, int nameSourceEnd); //void enterInitializer( // int declarationStart, // int modifiers); void enterInterface( int declarationStart, int modifiers, char[] name, int nameSourceStart, int nameSourceEnd, char[][] superinterfaces); void enterMethod( int declarationStart, int modifiers, char[] returnType, char[] name, int nameSourceStart, int nameSourceEnd, char[][] parameterTypes, char[][] parameterNames, char[][] exceptionTypes); void exitClass(int declarationEnd); void exitCompilationUnit(int declarationEnd); void exitConstructor(int declarationEnd); /* * initializationStart denotes the source start of the expression used for initializing * the field if any (-1 if no initialization). */ void exitField(int initializationStart, int declarationEnd, int declarationSourceEnd); void exitInitializer(int declarationEnd); void exitInterface(int declarationEnd); void exitMethod(int declarationEnd); }