/******************************************************************************* * 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.core; /** * Represents an entire Java compilation unit (.java source file). * Compilation unit elements need to be opened before they can be navigated or manipulated. * The children are of type IPackageDeclaration, * IImportContainer, and IType, * and appear in the order in which they are declared in the source. * If a .java file cannot be parsed, its structure remains unknown. * Use IJavaElement.isStructureKnown to determine whether this is * the case. *

* This interface is not intended to be implemented by clients. *

*/ public interface ICompilationUnit extends IJavaElement, IParent, IOpenable { //extends IJavaElement, ISourceReference, IParent, IOpenable, IWorkingCopy, ISourceManipulation, ICodeAssist { /** * Creates and returns an import declaration in this compilation unit * with the given name. *

* Optionally, the new element can be positioned before the specified * sibling. If no sibling is specified, the element will be inserted * as the last import declaration in this compilation unit. *

* If the compilation unit already includes the specified import declaration, * the import is not generated (it does not generate duplicates). * Note that it is valid to specify both a single-type import and an on-demand import * for the same package, for example "java.io.File" and * "java.io.*", in which case both are preserved since the semantics * of this are not the same as just importing "java.io.*". * Importing "java.lang.*", or the package in which the compilation unit * is defined, are not treated as special cases. If they are specified, they are * included in the result. * * @param name the name of the import declaration to add as defined by JLS2 7.5. (For example: "java.io.File" or * "java.awt.*") * @param sibling the existing element which the import declaration will be inserted immediately before (if * null , then this import will be inserted as the last import declaration. * @param monitor the progress monitor to notify * @return the newly inserted import declaration (or the previously existing one in case attempting to create a duplicate) * * @exception JavaModelException if the element could not be created. Reasons include: *

*/ //IImportDeclaration createImport(String name, IJavaElement sibling, IProgressMonitor monitor) throws JavaModelException; /** * Creates and returns a package declaration in this compilation unit * with the given package name. * *

If the compilation unit already includes the specified package declaration, * it is not generated (it does not generate duplicates). * * @param name the name of the package declaration to add as defined by JLS2 7.4. (For example, "java.lang") * @param monitor the progress monitor to notify * @return the newly inserted package declaration (or the previously existing one in case attempting to create a duplicate) * * @exception JavaModelException if the element could not be created. Reasons include: *

*/ // IPackageDeclaration createPackageDeclaration(String name, IProgressMonitor monitor) throws JavaModelException; /** * Creates and returns a type in this compilation unit with the * given contents. If this compilation unit does not exist, one * will be created with an appropriate package declaration. *

* Optionally, the new type can be positioned before the specified * sibling. If sibling is null, the type will be appended * to the end of this compilation unit. * *

It is possible that a type with the same name already exists in this compilation unit. * The value of the force parameter effects the resolution of * such a conflict:

* * @param contents the source contents of the type declaration to add. * @param sibling the existing element which the type will be inserted immediately before (if * null , then this type will be inserted as the last type declaration. * @param force a boolean flag indicating how to deal with duplicates * @param monitor the progress monitor to notify * @return the newly inserted type * * @exception JavaModelException if the element could not be created. Reasons include: * */ //IType createType(String contents, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws JavaModelException; /** * Returns all types declared in this compilation unit in the order * in which they appear in the source. * This includes all top-level types and nested member types. * It does NOT include local types (types defined in methods). * * @return the array of top-level and member types defined in a compilation unit, in declaration order. * @exception JavaModelException if this element does not exist or if an * exception occurs while accessing its corresponding resource */ //IType[] getAllTypes() throws JavaModelException; /** * Returns the smallest element within this compilation unit that * includes the given source position (that is, a method, field, etc.), or * null if there is no element other than the compilation * unit itself at the given position, or if the given position is not * within the source range of this compilation unit. * * @param position a source position inside the compilation unit * @return the innermost Java element enclosing a given source position or null * if none (excluding the compilation unit). * @exception JavaModelException if the compilation unit does not exist or if an * exception occurs while accessing its corresponding resource */ //IJavaElement getElementAt(int position) throws JavaModelException; /** * Returns the first import declaration in this compilation unit with the given name. * This is a handle-only method. The import declaration may or may not exist. This * is a convenience method - imports can also be accessed from a compilation unit's * import container. * * @param name the name of the import to find as defined by JLS2 7.5. (For example: "java.io.File" * or "java.awt.*") * @return a handle onto the corresponding import declaration. The import declaration may or may not exist. */ //IImportDeclaration getImport(String name) ; /** * Returns the import container for this compilation unit. * This is a handle-only method. The import container may or * may not exist. The import container can used to access the * imports. * @return a handle onto the corresponding import container. The * import contain may or may not exist. */ //IImportContainer getImportContainer(); /** * Returns the import declarations in this compilation unit * in the order in which they appear in the source. This is * a convenience method - import declarations can also be * accessed from a compilation unit's import container. * * @exception JavaModelException if this element does not exist or if an * exception occurs while accessing its corresponding resource */ //IImportDeclaration[] getImports() throws JavaModelException; /** * Returns the first package declaration in this compilation unit with the given package name * (there normally is at most one package declaration). * This is a handle-only method. The package declaration may or may not exist. * * @param name the name of the package declaration as defined by JLS2 7.4. (For example, "java.lang") */ //IPackageDeclaration getPackageDeclaration(String name); /** * Returns the package declarations in this compilation unit * in the order in which they appear in the source. * There normally is at most one package declaration. * * @return an array of package declaration (normally of size one) * * @exception JavaModelException if this element does not exist or if an * exception occurs while accessing its corresponding resource */ //IPackageDeclaration[] getPackageDeclarations() throws JavaModelException; /** * Returns the top-level type declared in this compilation unit with the given simple type name. * The type name has to be a valid compilation unit name. * This is a handle-only method. The type may or may not exist. * * @param name the simple name of the requested type in the compilation unit * @return a handle onto the corresponding type. The type may or may not exist. * @see JavaConventions#validateCompilationUnitName(String name) */ //IType getType(String name); /** * Returns the top-level types declared in this compilation unit * in the order in which they appear in the source. * * @exception JavaModelException if this element does not exist or if an * exception occurs while accessing its corresponding resource */ //IType[] getTypes() throws JavaModelException; }