| /******************************************************************************* |
| * Copyright (c) 2005, 2007 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 |
| * |
| |
| *******************************************************************************/ |
| package org.eclipse.dltk.core; |
| |
| import java.io.InputStream; |
| |
| import org.eclipse.core.runtime.IProgressMonitor; |
| |
| public interface IType extends IMember { |
| |
| String[] getSuperClasses() throws ModelException; |
| /** |
| * Returns the field with the specified name |
| * in this type (for example, <code>"bar"</code>). |
| * This is a handle-only method. The field may or may not exist. |
| * |
| * @param name the given name |
| * @return the field with the specified name in this type |
| */ |
| IField getField(String name); |
| |
| /** |
| * Returns the fields declared by this type. |
| * If this is a source type, the results are listed in the order |
| * in which they appear in the source, otherwise, the results are |
| * in no particular order. For binary types, this includes synthetic fields. |
| * |
| * @exception ModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource. |
| * @return the fields declared by this type |
| */ |
| IField[] getFields() throws ModelException; |
| /** |
| * Returns the member type declared in this type with the given simple name. |
| * This is a handle-only method. The type may or may not exist. |
| * |
| * @param name the given simple name |
| * @return the member type declared in this type with the given simple name |
| */ |
| IType getType(String name); |
| /** |
| * Returns the immediate member types declared by this type. |
| * The results are listed in the order in which they appear in the source or class file. |
| * |
| * @exception ModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource. |
| * @return the immediate member types declared by this type |
| */ |
| IType[] getTypes() throws ModelException; |
| /** |
| * Returns the method with the specified name and parameter types |
| * in this type (for example, <code>"foo", {"I", "QString;"}</code>). |
| * To get the handle for a constructor, the name specified must be the |
| * simple name of the enclosing type. |
| * This is a handle-only method. The method may or may not be present. |
| * <p> |
| * The type signatures may be either unresolved (for source types) |
| * or resolved (for binary types), and either basic (for basic types) |
| * or rich (for parameterized types). |
| * </p> |
| * |
| * @param name the given name |
| * @return the method with the specified name and parameter types in this type |
| */ |
| IMethod getMethod(String name); |
| |
| /** |
| * Returns the methods and constructors declared by this type. |
| * For binary types, this may include the special <code><clinit></code>; method |
| * and synthetic methods. |
| * If this is a source type, the results are listed in the order |
| * in which they appear in the source, otherwise, the results are |
| * in no particular order. |
| * |
| * @exception ModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource. |
| * @return the methods and constructors declared by this type |
| */ |
| IMethod[] getMethods() throws ModelException; |
| |
| /** |
| * Returns the fully qualified name of this type, |
| * including qualification for any containing types and packages. |
| * This is the name of the package, followed by <code>'.'</code>, |
| * followed by the type-qualified name using the <code>enclosingTypeSeparator</code>. |
| * This is a handle-only method. |
| * |
| * @param enclosingTypeSeparator the given enclosing type separator |
| * @return the fully qualified name of this type, including qualification for any containing types and packages |
| * @see IType#getTypeQualifiedName(char) |
| */ |
| String getFullyQualifiedName(String enclosingTypeSeparator); |
| |
| /** |
| * @return |
| */ |
| String getFullyQualifiedName(); |
| |
| /** |
| * Do code completion inside a code snippet in the context of the current type. |
| * |
| * If the type can access to his source code and the insertion position is valid, |
| * then completion is performed against source. Otherwise the completion is performed |
| * against type structure and given locals variables. |
| * |
| * @param snippet the code snippet |
| * @param insertion the position with in source where the snippet |
| * is inserted. This position must not be in comments. |
| * A possible value is -1, if the position is not known. |
| * @param position the position within snippet where the user |
| * is performing code assist. |
| * @param localVariableTypeNames an array (possibly empty) of fully qualified |
| * type names of local variables visible at the current scope |
| * @param localVariableNames an array (possibly empty) of local variable names |
| * that are visible at the current scope |
| * @param localVariableModifiers an array (possible empty) of modifiers for |
| * local variables |
| * @param isStatic whether the current scope is in a static context |
| * @param requestor the completion requestor |
| * @exception ModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource. |
| * |
| */ |
| void codeComplete( |
| char[] snippet, |
| int insertion, |
| int position, |
| char[][] localVariableTypeNames, |
| char[][] localVariableNames, |
| int[] localVariableModifiers, |
| boolean isStatic, |
| CompletionRequestor requestor) |
| throws ModelException; |
| |
| /** |
| * Do code completion inside a code snippet in the context of the current type. |
| * It considers types in the working copies with the given owner first. In other words, |
| * the owner's working copies will take precedence over their original compilation units |
| * in the workspace. |
| * <p> |
| * Note that if a working copy is empty, it will be as if the original compilation |
| * unit had been deleted. |
| * </p><p> |
| * If the type can access to his source code and the insertion position is valid, |
| * then completion is performed against source. Otherwise the completion is performed |
| * against type structure and given locals variables. |
| * </p> |
| * |
| * @param snippet the code snippet |
| * @param insertion the position with in source where the snippet |
| * is inserted. This position must not be in comments. |
| * A possible value is -1, if the position is not known. |
| * @param position the position with in snippet where the user |
| * is performing code assist. |
| * @param localVariableTypeNames an array (possibly empty) of fully qualified |
| * type names of local variables visible at the current scope |
| * @param localVariableNames an array (possibly empty) of local variable names |
| * that are visible at the current scope |
| * @param localVariableModifiers an array (possible empty) of modifiers for |
| * local variables |
| * @param isStatic whether the current scope is in a static context |
| * @param requestor the completion requestor |
| * @param owner the owner of working copies that take precedence over their original compilation units |
| * @exception ModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource. |
| * |
| */ |
| void codeComplete( |
| char[] snippet, |
| int insertion, |
| int position, |
| char[][] localVariableTypeNames, |
| char[][] localVariableNames, |
| int[] localVariableModifiers, |
| boolean isStatic, |
| CompletionRequestor requestor, |
| WorkingCopyOwner owner) |
| throws ModelException; |
| |
| /** |
| * Returns the package fragment in which this element is defined. |
| * This is a handle-only method. |
| * |
| * @return the package fragment in which this element is defined |
| */ |
| IScriptFolder getScriptFolder(); |
| |
| /** |
| * Returns the type-qualified name of this type, |
| * including qualification for any enclosing types, |
| * but not including package qualification. |
| * For source types, this consists of the simple names of any enclosing types, |
| * separated by <code>'$'</code>, followed by the simple name of this type |
| * or the occurence count of this type if it is anonymous. |
| * For binary types, this is the name of the class file without the ".class" suffix. |
| * This is a handle-only method. |
| * |
| * @return the type-qualified name of this type |
| */ |
| String getTypeQualifiedName(); |
| |
| /** |
| * Returns the type-qualified name of this type, |
| * including qualification for any enclosing types, |
| * but not including package qualification. |
| * For source types, this consists of the simple names of any enclosing types, |
| * separated by <code>enclosingTypeSeparator</code>, followed by the |
| * simple name of this type or the occurence count of this type if it is anonymous. |
| * For binary types, this is the name of the class file without the ".class" suffix. |
| * |
| * For example: |
| * <ul> |
| * <li>the type qualified name of a class B defined as a member of a class A |
| * using the '.' separator is "A.B"</li> |
| * <li>the type qualified name of a class B defined as a member of a class A |
| * using the '$' separator is "A$B"</li> |
| * <li>the type qualified name of a binary type whose class file is A$B.class |
| * using the '.' separator is "A$B"</li> |
| * <li>the type qualified name of a binary type whose class file is A$B.class |
| * using the '$' separator is "A$B"</li> |
| * <li>the type qualified name of an anonymous binary type whose class file is A$1.class |
| * using the '.' separator is "A$1"</li> |
| * </ul> |
| * |
| * This is a handle-only method. |
| * |
| * @param enclosingTypeSeparator the specified enclosing type separator |
| * @return the type-qualified name of this type |
| * |
| */ |
| String getTypeQualifiedName(String enclosingTypeSeparator); |
| |
| /** |
| * Finds the methods in this type that correspond to |
| * the given method. |
| * A method m1 corresponds to another method m2 if: |
| * <ul> |
| * <li>m1 has the same element name as m2. |
| * <li>m1 has the same number of arguments as m2 and |
| * the simple names of the argument types must be equals. |
| * <li>m1 exists. |
| * </ul> |
| * @param method the given method |
| * @return the found method or <code>null</code> if no such methods can be found. |
| * |
| * |
| */ |
| IMethod[] findMethods(IMethod method); |
| |
| |
| // Type hierarchies. |
| /** |
| * Loads a previously saved ITypeHierarchy from an input stream. A type hierarchy can |
| * be stored using ITypeHierachy#store(OutputStream). |
| * |
| * Only hierarchies originally created by the following methods can be loaded: |
| * <ul> |
| * <li>IType#newSupertypeHierarchy(IProgressMonitor)</li> |
| * <li>IType#newTypeHierarchy(IJavaProject, IProgressMonitor)</li> |
| * <li>IType#newTypeHierarchy(IProgressMonitor)</li> |
| * </ul> |
| * |
| * @param input stream where hierarchy will be read |
| * @param monitor the given progress monitor |
| * @return the stored hierarchy |
| * @exception ModelException if the hierarchy could not be restored, reasons include: |
| * - type is not the focus of the hierarchy or |
| * - unable to read the input stream (wrong format, IOException during reading, ...) |
| * @see ITypeHierarchy#store(java.io.OutputStream, IProgressMonitor) |
| */ |
| ITypeHierarchy loadTypeHierachy(InputStream input, IProgressMonitor monitor) throws ModelException; |
| /** |
| * Creates and returns a type hierarchy for this type containing |
| * this type and all of its supertypes. |
| * |
| * @param monitor the given progress monitor |
| * @exception ModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource. |
| * @return a type hierarchy for this type containing this type and all of its supertypes |
| */ |
| ITypeHierarchy newSupertypeHierarchy(IProgressMonitor monitor) throws ModelException; |
| |
| /** |
| * Creates and returns a type hierarchy for this type containing |
| * this type and all of its supertypes, considering types in the given |
| * working copies. In other words, the list of working copies will take |
| * precedence over their original compilation units in the workspace. |
| * <p> |
| * Note that passing an empty working copy will be as if the original compilation |
| * unit had been deleted. |
| * </p> |
| * |
| * @param workingCopies the working copies that take precedence over their original compilation units |
| * @param monitor the given progress monitor |
| * @return a type hierarchy for this type containing this type and all of its supertypes |
| * @exception ModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource. |
| */ |
| ITypeHierarchy newSupertypeHierarchy(ISourceModule[] workingCopies, IProgressMonitor monitor) |
| throws ModelException; |
| |
| |
| /** |
| * Creates and returns a type hierarchy for this type containing |
| * this type and all of its supertypes, considering types in the |
| * working copies with the given owner. |
| * In other words, the owner's working copies will take |
| * precedence over their original compilation units in the workspace. |
| * <p> |
| * Note that if a working copy is empty, it will be as if the original compilation |
| * unit had been deleted. |
| * <p> |
| * |
| * @param owner the owner of working copies that take precedence over their original compilation units |
| * @param monitor the given progress monitor |
| * @return a type hierarchy for this type containing this type and all of its supertypes |
| * @exception ModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource. |
| */ |
| ITypeHierarchy newSupertypeHierarchy(WorkingCopyOwner owner, IProgressMonitor monitor) |
| throws ModelException; |
| |
| /** |
| * Creates and returns a type hierarchy for this type containing |
| * this type, all of its supertypes, and all its subtypes |
| * in the context of the given project. |
| * |
| * @param project the given project |
| * @param monitor the given progress monitor |
| * @exception ModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource. |
| * @return a type hierarchy for this type containing |
| * this type, all of its supertypes, and all its subtypes |
| * in the context of the given project |
| */ |
| ITypeHierarchy newTypeHierarchy(IScriptProject project, IProgressMonitor monitor) throws ModelException; |
| |
| /** |
| * Creates and returns a type hierarchy for this type containing |
| * this type, all of its supertypes, and all its subtypes |
| * in the context of the given project, considering types in the |
| * working copies with the given owner. |
| * In other words, the owner's working copies will take |
| * precedence over their original compilation units in the workspace. |
| * <p> |
| * Note that if a working copy is empty, it will be as if the original compilation |
| * unit had been deleted. |
| * <p> |
| * |
| * @param project the given project |
| * @param owner the owner of working copies that take precedence over their original compilation units |
| * @param monitor the given progress monitor |
| * @exception ModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource. |
| * @return a type hierarchy for this type containing |
| * this type, all of its supertypes, and all its subtypes |
| * in the context of the given project |
| */ |
| ITypeHierarchy newTypeHierarchy(IScriptProject project, WorkingCopyOwner owner, IProgressMonitor monitor) throws ModelException; |
| |
| /** |
| * Creates and returns a type hierarchy for this type containing |
| * this type, all of its supertypes, and all its subtypes in the workspace. |
| * |
| * @param monitor the given progress monitor |
| * @exception ModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource. |
| * @return a type hierarchy for this type containing |
| * this type, all of its supertypes, and all its subtypes in the workspace |
| */ |
| ITypeHierarchy newTypeHierarchy(IProgressMonitor monitor) throws ModelException; |
| |
| /** |
| * Creates and returns a type hierarchy for this type containing |
| * this type, all of its supertypes, and all its subtypes in the workspace, |
| * considering types in the given working copies. In other words, the list of working |
| * copies that will take precedence over their original compilation units in the workspace. |
| * <p> |
| * Note that passing an empty working copy will be as if the original compilation |
| * unit had been deleted. |
| * |
| * @param workingCopies the working copies that take precedence over their original compilation units |
| * @param monitor the given progress monitor |
| * @return a type hierarchy for this type containing |
| * this type, all of its supertypes, and all its subtypes in the workspace |
| * @exception ModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource. |
| */ |
| ITypeHierarchy newTypeHierarchy(ISourceModule[] workingCopies, IProgressMonitor monitor) throws ModelException; |
| |
| |
| /** |
| * Creates and returns a type hierarchy for this type containing |
| * this type, all of its supertypes, and all its subtypes in the workspace, |
| * considering types in the working copies with the given owner. |
| * In other words, the owner's working copies will take |
| * precedence over their original compilation units in the workspace. |
| * <p> |
| * Note that if a working copy is empty, it will be as if the original compilation |
| * unit had been deleted. |
| * <p> |
| * |
| * @param owner the owner of working copies that take precedence over their original compilation units |
| * @param monitor the given progress monitor |
| * @return a type hierarchy for this type containing |
| * this type, all of its supertypes, and all its subtypes in the workspace |
| * @exception ModelException if this element does not exist or if an |
| * exception occurs while accessing its corresponding resource. |
| */ |
| ITypeHierarchy newTypeHierarchy(WorkingCopyOwner owner, IProgressMonitor monitor) throws ModelException; |
| } |