Index: ITypeBinding.java =================================================================== RCS file: /home/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ITypeBinding.java,v retrieving revision 1.44 diff -u -r1.44 ITypeBinding.java --- ITypeBinding.java 24 Mar 2005 21:01:15 -0000 1.44 +++ ITypeBinding.java 20 Apr 2005 13:19:25 -0000 @@ -36,6 +36,7 @@ * a generic type *
  • a parameterized type - represents an copy of a type declaration * with substitutions for its type parameters
  • + *
  • a capture - represents a capture binding
  • * *

    * This interface is not intended to be implemented by clients. @@ -63,233 +64,141 @@ public String getBinaryName(); /** - * Returns whether this type binding represents a primitive type. - *

    - * There are nine predefined type bindings to represent the eight primitive - * types and void. These have the same names as the primitive - * types that they represent, namely boolean, byte, char, short, int, - * long, float, and double, and void. - *

    + * Returns the bound of this wildcard type if it has one. + * Returns null if this is not a wildcard type. * - * @return true if this type binding is for a primitive type, - * and false otherwise + * @return the bound of this wildcard type, or null if none + * @see #isWildcardType() + * @see #isUpperbound() + * @since 3.1 */ - public boolean isPrimitive(); + public ITypeBinding getBound(); /** - * Returns whether this type binding represents the null type. - *

    - * The null type is the type of a NullLiteral node. - *

    + * Returns a list of bindings representing all the fields declared + * as members of this class, interface, or enum type. These include public, + * protected, default (package-private) access, and private fields declared + * by the class, but excludes inherited fields. Synthetic fields may or + * may not be included. + * Returns an empty list if the class, interface, or enum declares no fields, + * and for other kinds of type bindings that do not directly have members. + * The resulting bindings are in no particular order. * - * @return true if this type binding is for the null type, - * and false otherwise - */ - public boolean isNullType(); - - /** - * Returns whether this type binding represents an array type. - * - * @return true if this type binding is for an array type, - * and false otherwise - * @see #getElementType() - * @see #getDimensions() + * @return the list of bindings for the field members of this type, + * or the empty list if this type does not have field members */ - public boolean isArray(); + public IVariableBinding[] getDeclaredFields(); /** - * Returns the binding representing the element type of this array type, - * or null if this is not an array type binding. The element - * type of an array is never itself an array type. - * - * @return the element type binding, or null if this is - * not an array type + * Returns a list of method bindings representing all the methods and + * constructors declared for this class, interface, enum, or annotation + * type. These include public, protected, default (package-private) access, + * and private methods Synthetic methods and constructors may or may not be + * included. Returns an empty list if the class, interface, or enum, + * type declares no methods or constructors, if the annotation type declares + * no members, or if this type binding represents some other kind of type + * binding. The resulting bindings are in no particular order. + * + * @return the list of method bindings for the methods and constructors + * declared by this class, interface, enum type, or annotation type, + * or the empty list if this type does not declare any methods or constructors */ - public ITypeBinding getElementType(); + public IMethodBinding[] getDeclaredMethods(); /** - * Returns the dimensionality of this array type, or 0 if this - * is not an array type binding. + * Returns the declared modifiers for this class or interface binding + * as specified in the original source declaration of the class or + * interface. The result may not correspond to the modifiers in the compiled + * binary, since the compiler may change them (in particular, for inner + * class emulation). The getModifiers method should be used if + * the compiled modifiers are needed. Returns -1 if this type does not + * represent a class or interface. * - * @return the number of dimension of this array type binding, or - * 0 if this is not an array type - */ - public int getDimensions(); - - /** - * Returns whether this type is assigment compatible with the given type, - * as specified in section 5.2 of The Java Language - * Specification, Second Edition (JLS2). - * - * @param type the type to check compatibility against - * @return true if this type is assigment compatible with the - * given type, and false otherwise - * @since 3.1 + * @return the bit-wise or of Modifier constants + * @see #getModifiers() + * @see Modifier */ - public boolean isAssignmentCompatible(ITypeBinding type); + public int getDeclaredModifiers(); /** - * Returns whether this type is cast compatible with the given type, - * as specified in section 5.5 of The Java Language - * Specification, Second Edition (JLS2). + * Returns a list of type bindings representing all the types declared as + * members of this class, interface, or enum type. + * These include public, protected, default (package-private) access, + * and private classes, interfaces, enum types, and annotation types + * declared by the type, but excludes inherited types. Returns an empty + * list if the type declares no type members, or if this type + * binding represents an array type, a primitive type, a type variable, + * a wildcard type, a capture, or the null type. + * The resulting bindings are in no particular order. * - * @param type the type to check compatibility against - * @return true if this type is cast compatible with the - * given type, and false otherwise - * @since 3.1 - */ - public boolean isCastCompatible(ITypeBinding type); - - /** - * Returns whether this type binding represents a class type. - * - * @return true if this object represents a class, - * and false otherwise + * @return the list of type bindings for the member types of this type, + * or the empty list if this type does not have member types */ - public boolean isClass(); + public ITypeBinding[] getDeclaredTypes(); /** - * Returns whether this type binding represents an interface type. + * Returns the type binding representing the class, interface, or enum + * that declares this binding. *

    - * Note that an interface can also be an annotation type. + * The declaring class of a member class, interface, enum, annotation + * type is the class, interface, or enum type of which it is a member. + * The declaring class of a local class or interface (including anonymous + * classes) is the innermost class or interface containing the expression + * or statement in which this type is declared. *

    - * - * @return true if this object represents an interface, - * and false otherwise - */ - public boolean isInterface(); - - /** - * Returns whether this type binding represents an enum type. - * - * @return true if this object represents an enum type, - * and false otherwise - * @since 3.1 - */ - public boolean isEnum(); - - /** - * Returns whether this type binding represents an annotation type. - *

    - * Note that an annotation type is always an interface. + *

    The declaring class of a type variable is the class in which the type variable + * is declared if it is declared on a type. It returns null otherwise. *

    - * - * @return true if this object represents an annotation type, - * and false otherwise - * @since 3.1 - */ - public boolean isAnnotation(); - - /** - * Returns the type parameters of this class or interface type binding. - *

    - * Note that type parameters only occur on the binding of the - * declaring generic class or interface; e.g., Collection<T>. - * Type bindings corresponding to a raw or parameterized reference to a generic - * type do not carry type parameters (they instead have non-empty type arguments - * and non-trivial erasure). - *

    - * - * @return the list of binding for the type variables for the type - * parameters of this type, or otherwise the empty list - * @see #isTypeVariable() - * @since 3.1 + *

    Array types, primitive types, the null type, top-level types, + * wildcard types, and capture bindings have no declaring class. + *

    + * + * @return the binding of the type that declares this type, or + * null if none */ - // TODO (jeem) - clarify whether binding for a generic type instance carries a copy of the generic type's type parameters as well as type arguments - public ITypeBinding[] getTypeParameters(); + public ITypeBinding getDeclaringClass(); /** - * Returns whether this type binding represents a declaration of - * a generic class or interface. + * Returns the method binding representing the method that declares this binding + * of a local type or type variable. *

    - * Note that type parameters only occur on the binding of the - * declaring generic class or interface; e.g., Collection<T>. - * Type bindings corresponding to a raw or parameterized reference to a generic - * type do not carry type parameters (they instead have non-empty type arguments - * and non-trivial erasure). - * This method is fully equivalent to getTypeParameters().length > 0). + * The declaring method of a local class or interface (including anonymous + * classes) is the innermost method containing the expression or statement in + * which this type is declared. Returns null if the type + * is declared in an initializer. *

    *

    - * Note that {@link #isGenericType()}, - * {@link #isParameterizedType()}, - * and {@link #isRawType()} are mutually exclusive. + * The declaring method of a type variable is the method in which the type + * variable is declared if it is declared on a method. It + * returns null otherwise. + *

    + *

    Array types, primitive types, the null type, top-level types, + * wildcard types, and capture bindings have no declaring method. *

    - * - * @return true if this type binding represents a - * declaration of a generic class or interface, and false otherwise - * @see #getTypeParameters() - * @since 3.1 - */ - public boolean isGenericType(); - - /** - * Returns whether this type binding represents a type variable. - * Type variables bindings carry the type variable's bounds. * - * @return true if this type binding is for a type variable, - * and false otherwise - * @see #getName() - * @see #getTypeBounds() - * @since 3.1 - */ - public boolean isTypeVariable(); - - /** - * Returns the type bounds of this type variable. - * - * @return the list of type bindings for this type variable, or otherwise - * the empty list - * @see #isTypeVariable() - * @since 3.1 + * @return the binding of the method that declares this type, or + * null if none */ - public ITypeBinding[] getTypeBounds(); - + public IMethodBinding getDeclaringMethod(); + /** - * Returns whether this type binding represents an instance of - * a generic type corresponding to a parameterized type reference. - *

    - * For example, an AST type like - * Collection<String> typically resolves to a - * type binding whose type argument is the type binding for the - * class java.lang.String and whose erasure is the type - * binding for the generic type java.util.Collection. - *

    - * Note that {@link #isGenericType()}, - * {@link #isParameterizedType()}, - * and {@link #isRawType()} are mutually exclusive. - *

    + * Returns the dimensionality of this array type, or 0 if this + * is not an array type binding. * - * @return true if this type binding represents a - * an instance of a generic type corresponding to a parameterized - * type reference, and false otherwise - * @see #getTypeArguments() - * @see #getTypeDeclaration() - * @since 3.1 + * @return the number of dimension of this array type binding, or + * 0 if this is not an array type */ - public boolean isParameterizedType(); - + public int getDimensions(); + /** - * Returns the type arguments of this generic type instance, or the - * empty list for other type bindings. - *

    - * Note that type arguments only occur on a type binding that represents - * an instance of a generic type corresponding to a parameterized type - * reference (e.g., Collection<String>) or to a raw - * type reference (e.g., Collection) to a generic type. - * Do not confuse these with type parameters which only occur on the - * type binding corresponding directly to the declaration of the - * generic class or interface (e.g., Collection<T>). - *

    + * Returns the binding representing the element type of this array type, + * or null if this is not an array type binding. The element + * type of an array is never itself an array type. * - * @return the list of type bindings for the type arguments used to - * instantiate the corrresponding generic type, or otherwise the empty list - * @see #getTypeDeclaration() - * @see #isGenericType() - * @see #isParameterizedType() - * @see #isRawType() - * @since 3.1 + * @return the element type binding, or null if this is + * not an array type */ - public ITypeBinding[] getTypeArguments(); + public ITypeBinding getElementType(); /** * Returns the erasure of this type binding. @@ -300,11 +209,13 @@ * - returns the binding for the corresponding generic type. *
  • For wildcard types ({@link #isWildcardType()}) * - returns the binding for the upper bound if it has one and - * java.lang.Object in other cases. - *
  • + * java.lang.Object in other cases. *
  • For type variables ({@link #isTypeVariable()}) * - returns the binding for the erasure of the leftmost bound * if it has bounds and java.lang.Object if it does not.
  • + *
  • For captures ({@link #isCapture()}) + * - returns the binding for the erasure of the leftmost bound + * if it has bounds and java.lang.Object if it does not.
  • *
  • For all other type bindings - returns the identical binding.
  • * * @@ -314,87 +225,53 @@ public ITypeBinding getErasure(); /** - * Returns the binding for the type declaration corresponding to this type - * binding. For parameterized types ({@link #isParameterizedType()}) - * and raw types ({@link #isRawType()}), this method returns the binding - * for the corresponding generic type. For other type bindings, this - * returns the same binding. - * - * @return the type binding - * @since 3.1 - */ - public ITypeBinding getTypeDeclaration(); - - /** - * Returns whether this type binding represents an instance of - * a generic type corresponding to a raw type reference. + * Returns a list of type bindings representing the direct superinterfaces + * of the class, interface, or enum type represented by this type binding. *

    - * For example, an AST type like - * Collection typically resolves to a - * type binding whose type argument is the type binding for - * the class java.lang.Object (the - * default bound for the single type parameter of - * java.util.Collection) and whose erasure is the - * type binding for the generic type - * java.util.Collection. + * If this type binding represents a class or enum type, the return value + * is an array containing type bindings representing all interfaces + * directly implemented by this class. The number and order of the interface + * objects in the array corresponds to the number and order of the interface + * names in the implements clause of the original declaration + * of this type. *

    *

    - * Note that {@link #isGenericType()}, - * {@link #isParameterizedType()}, - * and {@link #isRawType()} are mutually exclusive. + * If this type binding represents an interface, the array contains + * type bindings representing all interfaces directly extended by this + * interface. The number and order of the interface objects in the array + * corresponds to the number and order of the interface names in the + * extends clause of the original declaration of this interface. *

    - * - * @return true if this type binding represents a - * an instance of a generic type corresponding to a raw - * type reference, and false otherwise - * @see #getTypeDeclaration() - * @see #getTypeArguments() - * @since 3.1 - */ - public boolean isRawType(); - - /** - * Returns whether this type binding represents a wildcard type. A wildcard - * type occus only as an argument to a parameterized type reference. *

    - * For example, a AST type like - * Collection<? extends Object> typically resolves to a - * parameterized type binding whose type argument is a wildcard type - * with upper type bound java.util.Object/code>. + * If the class or enum implements no interfaces, or the interface extends + * no interfaces, or if this type binding represents an array type, a + * primitive type, the null type, a type variable, an annotation type, + * a wildcard type, or a capture binding, this method returns an array of + * length 0. *

    * - * @return true if this object represents a wildcard type, - * and false otherwise - * @since 3.1 - * @see #getBound() - * @see #isUpperbound() + * @return the list of type bindings for the interfaces extended by this + * class or enum, or interfaces extended by this interface, or otherwise + * the empty list */ - public boolean isWildcardType(); + public ITypeBinding[] getInterfaces(); /** - * Returns the bound of this wildcard type if it has one. - * Returns null if this is not a wildcard type. + * Returns the compiled modifiers for this class, interface, enum, + * or annotation type binding. + * The result may not correspond to the modifiers as declared in the + * original source, since the compiler may change them (in particular, + * for inner class emulation). The getDeclaredModifiers method + * should be used if the original modifiers are needed. + * Returns 0 if this type does not represent a class, interface, enum, or annotation + * type. * - * @return the bound of this wildcard type, or null if none - * @see #isWildcardType() - * @see #isUpperbound() - * @since 3.1 - */ - public ITypeBinding getBound(); - - /** - * Returns whether this wildcard type is an upper bound - * ("extends") as opposed to a lower bound ("super"). - * Note that this property is only relevant for wildcards - * that have a bound. - * - * @return true if this wildcard type has a bound that is - * an upper bound, and false in all other cases - * @see #isWildcardType() - * @see #getBound() - * @since 3.1 + * @return the compiled modifiers for this type binding or 0 + * if this type does not represent a class, interface, enum, or annotation + * type + * @see #getDeclaredModifiers() */ - public boolean isUpperbound(); + public int getModifiers(); /** * Returns the unqualified name of the type represented by this binding @@ -433,6 +310,8 @@ * this method) when present. * Example: "? extends InputStream". * + *
  • Capture types do not have a name. For these types, + * and array types thereof, this method returns an empty string.
  • * * * @return the unqualified name of the type represented by this binding, @@ -440,62 +319,79 @@ * @see #getQualifiedName() */ public String getName(); - + /** * Returns the binding for the package in which this type is declared. * * @return the binding for the package in which this class, interface, * enum, or annotation type is declared, or null if this type * binding represents a primitive type, an array type, the null type, - * a type variable, or a wildcard type. + * a type variable, a wildcard type, or a capture binding. */ public IPackageBinding getPackage(); /** - * Returns the type binding representing the class, interface, or enum - * that declares this binding. - *

    - * The declaring class of a member class, interface, enum, annotation - * type is the class, interface, or enum type of which it is a member. - * The declaring class of a local class or interface (including anonymous - * classes) is the innermost class or interface containing the expression - * or statement in which this type is declared. - *

    - *

    The declaring class of a type variable is the class in which the type variable - * is declared if it is declared on a type. It returns null otherwise. - *

    - *

    Array types, primitive types, the null type, top-level types, - * and wildcard types have no declaring class. - *

    - * - * @return the binding of the type that declares this type, or - * null if none - */ - public ITypeBinding getDeclaringClass(); - - /** - * Returns the method binding representing the method that declares this binding - * of a local type or type variable. - *

    - * The declaring method of a local class or interface (including anonymous - * classes) is the innermost method containing the expression or statement in - * which this type is declared. Returns null if the type - * is declared in an initializer. - *

    - *

    - * The declaring method of a type variable is the method in which the type - * variable is declared if it is declared on a method. It - * returns null otherwise. - *

    - *

    Array types, primitive types, the null type, top-level types, - * and wildcard types have no declaring method. - *

    + * Returns the fully qualified name of the type represented by this + * binding if it has one. + * * - * @return the binding of the method that declares this type, or - * null if none + * @return the fully qualified name of the type represented by this + * binding, or the empty string if it has none + * @see #getName() + * @since 2.1 */ - public IMethodBinding getDeclaringMethod(); - + public String getQualifiedName(); + /** * Returns the type binding for the superclass of the type represented * by this class binding. @@ -515,8 +411,8 @@ *

    * If this type binding represents an interface, an array type, a * primitive type, the null type, a type variable, an enum type, - * an annotation type, or a wildcard type, then null - * is returned. + * an annotation type, a wildcard type, or a capture binding, + * then null is returned. *

    * * @return the superclass of the class represented by this type binding, @@ -526,94 +422,264 @@ public ITypeBinding getSuperclass(); /** - * Returns a list of type bindings representing the direct superinterfaces - * of the class, interface, or enum type represented by this type binding. + * Returns the type arguments of this generic type instance, or the + * empty list for other type bindings. *

    - * If this type binding represents a class or enum type, the return value - * is an array containing type bindings representing all interfaces - * directly implemented by this class. The number and order of the interface - * objects in the array corresponds to the number and order of the interface - * names in the implements clause of the original declaration - * of this type. - *

    + * Note that type arguments only occur on a type binding that represents + * an instance of a generic type corresponding to a parameterized type + * reference (e.g., Collection<String>) or to a raw + * type reference (e.g., Collection) to a generic type. + * Do not confuse these with type parameters which only occur on the + * type binding corresponding directly to the declaration of the + * generic class or interface (e.g., Collection<T>). + *

    + * + * @return the list of type bindings for the type arguments used to + * instantiate the corrresponding generic type, or otherwise the empty list + * @see #getTypeDeclaration() + * @see #isGenericType() + * @see #isParameterizedType() + * @see #isRawType() + * @since 3.1 + */ + public ITypeBinding[] getTypeArguments(); + + /** + * Returns the type bounds of this type variable or capture. + * + * @return the list of type bindings for this type variable or capture, + * or otherwise the empty list + * @see #isCapture() + * @see #isTypeVariable() + * @since 3.1 + */ + public ITypeBinding[] getTypeBounds(); + + /** + * Returns the binding for the type declaration corresponding to this type + * binding. For parameterized types ({@link #isParameterizedType()}) + * and raw types ({@link #isRawType()}), this method returns the binding + * for the corresponding generic type. For other type bindings, this + * returns the same binding. + * + * @return the type binding + * @since 3.1 + */ + public ITypeBinding getTypeDeclaration(); + + /** + * Returns the type parameters of this class or interface type binding. *

    - * If this type binding represents an interface, the array contains - * type bindings representing all interfaces directly extended by this - * interface. The number and order of the interface objects in the array - * corresponds to the number and order of the interface names in the - * extends clause of the original declaration of this interface. - *

    + * Note that type parameters only occur on the binding of the + * declaring generic class or interface; e.g., Collection<T>. + * Type bindings corresponding to a raw or parameterized reference to a generic + * type do not carry type parameters (they instead have non-empty type arguments + * and non-trivial erasure). + *

    + * + * @return the list of binding for the type variables for the type + * parameters of this type, or otherwise the empty list + * @see #isTypeVariable() + * @since 3.1 + */ + // TODO (jeem) - clarify whether binding for a generic type instance carries a copy of the generic type's type parameters as well as type arguments + public ITypeBinding[] getTypeParameters(); + + /** + * Returns the corresponding wildcard binding of this capture binding. + * Returns null if this type bindings does not represent + * a capture binding. + * + * @return the corresponding wildcard binding for a capture + * binding, null otherwise + * @since 3.1 + */ + public ITypeBinding getWildcard(); + + /** + * Returns whether this type binding represents an annotation type. *

    - * If the class or enum implements no interfaces, or the interface extends - * no interfaces, or if this type binding represents an array type, a - * primitive type, the null type, a type variable, an annotation type, - * or a wildcard type, this method returns an array of length 0. + * Note that an annotation type is always an interface. *

    * - * @return the list of type bindings for the interfaces extended by this - * class or enum, or interfaces extended by this interface, or otherwise - * the empty list + * @return true if this object represents an annotation type, + * and false otherwise + * @since 3.1 */ - public ITypeBinding[] getInterfaces(); - + public boolean isAnnotation(); + /** - * Returns the compiled modifiers for this class, interface, enum, - * or annotation type binding. - * The result may not correspond to the modifiers as declared in the - * original source, since the compiler may change them (in particular, - * for inner class emulation). The getDeclaredModifiers method - * should be used if the original modifiers are needed. - * Returns 0 if this type does not represent a class, interface, enum, or annotation - * type. - * - * @return the compiled modifiers for this type binding or 0 - * if this type does not represent a class, interface, enum, or annotation - * type - * @see #getDeclaredModifiers() + * Returns whether this type binding represents an anonymous class. + *

    + * An anonymous class is a subspecies of local class, and therefore mutually + * exclusive with member types. Note that anonymous classes have no name + * (getName returns the empty string). + *

    + * + * @return true if this type binding is for an anonymous class, + * and false otherwise */ - public int getModifiers(); + public boolean isAnonymous(); /** - * Returns the declared modifiers for this class or interface binding - * as specified in the original source declaration of the class or - * interface. The result may not correspond to the modifiers in the compiled - * binary, since the compiler may change them (in particular, for inner - * class emulation). The getModifiers method should be used if - * the compiled modifiers are needed. Returns -1 if this type does not - * represent a class or interface. + * Returns whether this type binding represents an array type. * - * @return the bit-wise or of Modifier constants - * @see #getModifiers() - * @see Modifier + * @return true if this type binding is for an array type, + * and false otherwise + * @see #getElementType() + * @see #getDimensions() */ - public int getDeclaredModifiers(); + public boolean isArray(); /** - * Returns whether this type is subtype compatible with the given type, - * as specified in section 4.10 of The Java Language + * Returns whether this type is assigment compatible with the given type, + * as specified in section 5.2 of The Java Language * Specification, Third Edition (JLS3). * * @param type the type to check compatibility against - * @return true if this type is subtype compatible with the + * @return true if this type is assigment compatible with the * given type, and false otherwise * @since 3.1 */ - public boolean isSubTypeCompatible(ITypeBinding type); + public boolean isAssignmentCompatible(ITypeBinding type); /** - * Returns whether this type binding represents a top-level class, - * interface, enum, or annotation type. + * Returns whether this type binding represents a capture binding. + *

    + * Capture bindings result from capture conversion as specified + * in section 5.1.10 of The Java Language Specification, + * Third Edition (JLS3). + *

    + *

    + * A capture binding may have upper bounds and a lower bound. + * Upper bounds may be accessed using {@link #getTypeBounds()}, + * the lower bound must be accessed indirectly through the associated + * wildcard {@link #getWildcard()} when it is a lower bound wildcard. + *

    + *

    + * Note that capture bindings are distinct from type variables + * (even though they are often depicted as synthetic type + * variables); as such, {@link #isTypeVariable()} answers + * false for capture bindings, and + * {@link #isCapture()} answers false for type variables. + *

    + * + * @return true if this type binding is a capture, + * and false otherwise + * @see #getTypeBounds() + * @see #getWildcard() + * @since 3.1 + */ + public boolean isCapture(); + + /** + * Returns whether this type is cast compatible with the given type, + * as specified in section 5.5 of The Java Language + * Specification, Third Edition (JLS3). + * + * @param type the type to check compatibility against + * @return true if this type is cast compatible with the + * given type, and false otherwise + * @since 3.1 + */ + public boolean isCastCompatible(ITypeBinding type); + + /** + * Returns whether this type binding represents a class type. + * + * @return true if this object represents a class, + * and false otherwise + */ + public boolean isClass(); + + /** + * Returns whether this type binding represents an enum type. + * + * @return true if this object represents an enum type, + * and false otherwise + * @since 3.1 + */ + public boolean isEnum(); + + /** + * Returns whether this type binding originated in source code. + * Returns false for all primitive types, the null type, + * array types, and for all classes, interfaces, enums, annotation + * types, type variables, parameterized type references, + * raw type references, wildcard types, and capture bindings + * whose information came from a pre-compiled binary class file. + * + * @return true if the type is in source code, + * and false otherwise + */ + public boolean isFromSource(); + + /** + * Returns whether this type binding represents a declaration of + * a generic class or interface. + *

    + * Note that type parameters only occur on the binding of the + * declaring generic class or interface; e.g., Collection<T>. + * Type bindings corresponding to a raw or parameterized reference to a generic + * type do not carry type parameters (they instead have non-empty type arguments + * and non-trivial erasure). + * This method is fully equivalent to getTypeParameters().length > 0). + *

    + *

    + * Note that {@link #isGenericType()}, + * {@link #isParameterizedType()}, + * and {@link #isRawType()} are mutually exclusive. + *

    + * + * @return true if this type binding represents a + * declaration of a generic class or interface, and false otherwise + * @see #getTypeParameters() + * @since 3.1 + */ + public boolean isGenericType(); + + /** + * Returns whether this type binding represents an interface type. + *

    + * Note that an interface can also be an annotation type. + *

    + * + * @return true if this object represents an interface, + * and false otherwise + */ + public boolean isInterface(); + + /** + * Returns whether this type binding represents a local class. + *

    + * A local class is any nested class or enum type not declared as a member + * of another class or interface. A local class is a subspecies of nested + * type, and mutually exclusive with member types. Note that anonymous + * classes are a subspecies of local classes. + *

    + *

    + * Also note that interfaces and annotation types cannot be local. + *

    + * + * @return true if this type binding is for a local class or + * enum type, and false otherwise + */ + public boolean isLocal(); + + /** + * Returns whether this type binding represents a member class or + * interface. *

    - * A top-level type is any type whose declaration does not occur within the - * body of another type declaration. The set of top level types is disjoint - * from the set of nested types. + * A member type is any type declared as a member of + * another type. A member type is a subspecies of nested + * type, and mutually exclusive with local types. *

    * - * @return true if this type binding is for a top-level class, + * @return true if this type binding is for a member class, * interface, enum, or annotation type, and false otherwise */ - public boolean isTopLevel(); - + public boolean isMember(); + /** * Returns whether this type binding represents a nested class, interface, * enum, or annotation type. @@ -630,166 +696,156 @@ public boolean isNested(); /** - * Returns whether this type binding represents a member class or - * interface. + * Returns whether this type binding represents the null type. *

    - * A member type is any type declared as a member of - * another type. A member type is a subspecies of nested - * type, and mutually exclusive with local types. + * The null type is the type of a NullLiteral node. *

    - * - * @return true if this type binding is for a member class, - * interface, enum, or annotation type, and false otherwise + * + * @return true if this type binding is for the null type, + * and false otherwise */ - public boolean isMember(); - + public boolean isNullType(); + /** - * Returns whether this type binding represents a local class. + * Returns whether this type binding represents an instance of + * a generic type corresponding to a parameterized type reference. *

    - * A local class is any nested class or enum type not declared as a member - * of another class or interface. A local class is a subspecies of nested - * type, and mutually exclusive with member types. Note that anonymous - * classes are a subspecies of local classes. + * For example, an AST type like + * Collection<String> typically resolves to a + * type binding whose type argument is the type binding for the + * class java.lang.String and whose erasure is the type + * binding for the generic type java.util.Collection. *

    - *

    - * Also note that interfaces and annotation types cannot be local. + * Note that {@link #isGenericType()}, + * {@link #isParameterizedType()}, + * and {@link #isRawType()} are mutually exclusive. *

    * - * @return true if this type binding is for a local class or - * enum type, and false otherwise + * @return true if this type binding represents a + * an instance of a generic type corresponding to a parameterized + * type reference, and false otherwise + * @see #getTypeArguments() + * @see #getTypeDeclaration() + * @since 3.1 */ - public boolean isLocal(); + public boolean isParameterizedType(); /** - * Returns whether this type binding represents an anonymous class. + * Returns whether this type binding represents a primitive type. *

    - * An anonymous class is a subspecies of local class, and therefore mutually - * exclusive with member types. Note that anonymous classes have no name - * (getName returns the empty string). + * There are nine predefined type bindings to represent the eight primitive + * types and void. These have the same names as the primitive + * types that they represent, namely boolean, byte, char, short, int, + * long, float, and double, and void. *

    - * - * @return true if this type binding is for an anonymous class, + * + * @return true if this type binding is for a primitive type, * and false otherwise */ - public boolean isAnonymous(); + public boolean isPrimitive(); + + /** + * Returns whether this type binding represents an instance of + * a generic type corresponding to a raw type reference. + *

    + * For example, an AST type like + * Collection typically resolves to a + * type binding whose type argument is the type binding for + * the class java.lang.Object (the + * default bound for the single type parameter of + * java.util.Collection) and whose erasure is the + * type binding for the generic type + * java.util.Collection. + *

    + *

    + * Note that {@link #isGenericType()}, + * {@link #isParameterizedType()}, + * and {@link #isRawType()} are mutually exclusive. + *

    + * + * @return true if this type binding represents a + * an instance of a generic type corresponding to a raw + * type reference, and false otherwise + * @see #getTypeDeclaration() + * @see #getTypeArguments() + * @since 3.1 + */ + public boolean isRawType(); /** - * Returns a list of type bindings representing all the types declared as - * members of this class, interface, or enum type. - * These include public, protected, default (package-private) access, - * and private classes, interfaces, enum types, and annotation types - * declared by the type, but excludes inherited types. Returns an empty - * list if the type declares no type members, or if this type - * binding represents an array type, a primitive type, a type variable, - * a wildcard type, or the null type. - * The resulting bindings are in no particular order. + * Returns whether this type is subtype compatible with the given type, + * as specified in section 4.10 of The Java Language + * Specification, Third Edition (JLS3). * - * @return the list of type bindings for the member types of this type, - * or the empty list if this type does not have member types + * @param type the type to check compatibility against + * @return true if this type is subtype compatible with the + * given type, and false otherwise + * @since 3.1 */ - public ITypeBinding[] getDeclaredTypes(); + public boolean isSubTypeCompatible(ITypeBinding type); /** - * Returns a list of bindings representing all the fields declared - * as members of this class, interface, or enum type. These include public, - * protected, default (package-private) access, and private fields declared - * by the class, but excludes inherited fields. Synthetic fields may or - * may not be included. - * Returns an empty list if the class, interface, or enum declares no fields, - * and for other kinds of type bindings that do not directly have members. - * The resulting bindings are in no particular order. - * - * @return the list of bindings for the field members of this type, - * or the empty list if this type does not have field members + * Returns whether this type binding represents a top-level class, + * interface, enum, or annotation type. + *

    + * A top-level type is any type whose declaration does not occur within the + * body of another type declaration. The set of top level types is disjoint + * from the set of nested types. + *

    + * + * @return true if this type binding is for a top-level class, + * interface, enum, or annotation type, and false otherwise */ - public IVariableBinding[] getDeclaredFields(); + public boolean isTopLevel(); /** - * Returns a list of method bindings representing all the methods and - * constructors declared for this class, interface, enum, or annotation - * type. These include public, protected, default (package-private) access, - * and private methods Synthetic methods and constructors may or may not be - * included. Returns an empty list if the class, interface, or enum, - * type declares no methods or constructors, if the annotation type declares - * no members, or if this type binding represents some other kind of type - * binding. The resulting bindings are in no particular order. - * - * @return the list of method bindings for the methods and constructors - * declared by this class, interface, enum type, or annotation type, - * or the empty list if this type does not declare any methods or constructors + * Returns whether this type binding represents a type variable. + * Type variables bindings carry the type variable's bounds. + *

    + * Note that type variables are distinct from capture bindings + * (even though capture bindings are often depicted as synthetic + * type variables); as such, {@link #isTypeVariable()} answers + * false for capture bindings, and + * {@link #isCapture()} answers false for type variables. + *

    + * + * @return true if this type binding is for a type variable, + * and false otherwise + * @see #getName() + * @see #getTypeBounds() + * @since 3.1 */ - public IMethodBinding[] getDeclaredMethods(); + public boolean isTypeVariable(); /** - * Returns whether this type binding originated in source code. - * Returns false for all primitive types, the null type, - * array types, and for all classes, interfaces, enums, annotation - * types, type variables, parameterized type references, - * raw type references, and wildcard types, whose information came from a - * pre-compiled binary class file. - * - * @return true if the type is in source code, - * and false otherwise + * Returns whether this wildcard type is an upper bound + * ("extends") as opposed to a lower bound ("super"). + * Note that this property is only relevant for wildcards + * that have a bound. + * + * @return true if this wildcard type has a bound that is + * an upper bound, and false in all other cases + * @see #isWildcardType() + * @see #getBound() + * @since 3.1 */ - public boolean isFromSource(); + public boolean isUpperbound(); /** - * Returns the fully qualified name of the type represented by this - * binding if it has one. - * - * - * @return the fully qualified name of the type represented by this - * binding, or the empty string if it has none - * @see #getName() - * @since 2.1 + * Returns whether this type binding represents a wildcard type. A wildcard + * type occus only as an argument to a parameterized type reference. + *

    + * For example, a AST type like + * Collection<? extends Object> typically resolves to a + * parameterized type binding whose type argument is a wildcard type + * with upper type bound java.util.Object/code>. + *

    + * + * @return true if this object represents a wildcard type, + * and false otherwise + * @since 3.1 + * @see #getBound() + * @see #isUpperbound() */ - public String getQualifiedName(); + public boolean isWildcardType(); }