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 19 Apr 2005 22:12:34 -0000 @@ -63,233 +63,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.
- *
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.
- *
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, 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. *
- * - * @returntrue
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.
*
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).
- *
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
*/
- // 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, + * and wildcard types have no declaring method. *
- * - * @returntrue
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
.
- *
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>
).
- *
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 +208,13 @@
* - returns the binding for the corresponding generic type.
*
- * 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.
*
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,
+ * or a wildcard type, this method returns an array of length 0.
*
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 +308,10 @@
* this method) when present.
* Example: "? extends InputStream"
.
*
+ * "capture-of ? extends InputStream"
.
+ * - * 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. + *"java.lang.String"
or "java.util.Collection"
.
+ * Note that the type parameters of a generic type are not included."java.io.ObjectInputStream.GetField"
.
+ * If the binding is for a member type that corresponds to a particular instance
+ * of a generic type arising from a parameterized type reference, the simple
+ * name of the type is followed by the fully qualified names of the type arguments
+ * (as computed by this method) surrounded by "<>" and separated by ",".
+ * Example: "pkg.Outer.Inner<java.lang.String>"
.
+ * "int"
."java.lang.String[]"
."X"
."java.util.Collection<java.lang.String>"
.
+ * "java.util.Collection"
. Note that the
+ * the type parameters are omitted."? extends java.io.InputStream"
.
+ * 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.
@@ -526,94 +420,260 @@
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.
- *
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.
- *
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();
+
+ /**
+ * Return the corresponding wildcard binding if this type binding represents a capture
+ * binding, null
otherwise.
+ *
+ * @return the corresponding wildcard binding if this type binding represents 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 + * @returntrue
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).
+ *
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
- * Specification, Third Edition (JLS3).
+ * 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 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.
* - * 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. + * 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 are different from regular type variable (even
+ * though they are often depicted as synthetic type variables), and
+ * as such {@link #isTypeVariable()} will answer false
.
+ *
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, Second Edition (JLS2).
+ *
+ * @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, 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
+ */
+ 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. + *
+ * + * @returntrue
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. + *
+ * + * @returntrue
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. + *
+ * + * @returntrue
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 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. *
* - * @returntrue
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 +690,149 @@
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.
*
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. *
* - * @returntrue
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.
*
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. + *
+ * + * @returntrue
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. + *
+ * + * @returntrue
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.
+ *
+ * @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.
- * "java.lang.String"
or "java.util.Collection"
.
- * Note that the type parameters of a generic type are not included."java.io.ObjectInputStream.GetField"
.
- * If the binding is for a member type that corresponds to a particular instance
- * of a generic type arising from a parameterized type reference, the simple
- * name of the type is followed by the fully qualified names of the type arguments
- * (as computed by this method) surrounded by "<>" and separated by ",".
- * Example: "pkg.Outer.Inner<java.lang.String>"
.
- * "int"
."java.lang.String[]"
."X"
."java.util.Collection<java.lang.String>"
.
- * "java.util.Collection"
. Note that the
- * the type parameters are omitted."? extends java.io.InputStream"
.
- *
+ * 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>.
+ *
true
if this object represents a wildcard type,
+ * and false
otherwise
+ * @since 3.1
+ * @see #getBound()
+ * @see #isUpperbound()
*/
- public String getQualifiedName();
+ public boolean isWildcardType();
}