com.sun.tools.javac.model
Class JavacTypes

java.lang.Object
  extended by com.sun.tools.javac.model.JavacTypes
All Implemented Interfaces:
Types

public class JavacTypes
extends java.lang.Object
implements Types

Utility methods for operating on types.

This is NOT part of any API supported by Sun Microsystems. If you write code that depends on this, you do so at your own risk. This code and its internal interfaces are subject to change or deletion without notice.


Field Summary
private static java.util.Set<TypeKind> EXEC_OR_PKG
           
private static Context.Key<JavacTypes> KEY
           
private  Symtab syms
           
private  Types types
           
 
Constructor Summary
JavacTypes(Context context)
          Public for use only by JavacProcessingEnvironment
 
Method Summary
 Element asElement(TypeMirror t)
          Returns the element corresponding to a type.
 TypeMirror asMemberOf(DeclaredType containing, Element element)
          Returns the type of an element when that element is viewed as a member of, or otherwise directly contained by, a given type.
 TypeElement boxedClass(PrimitiveType p)
          Returns the class of a boxed value of a given primitive type.
 TypeMirror capture(TypeMirror t)
          Applies capture conversion to a type.
private static
<T> T
cast(java.lang.Class<T> clazz, java.lang.Object o)
          Returns an object cast to the specified type.
 boolean contains(TypeMirror t1, TypeMirror t2)
          Tests whether one type argument contains another.
 java.util.List<Type> directSupertypes(TypeMirror t)
          Returns the direct supertypes of a type.
 TypeMirror erasure(TypeMirror t)
          Returns the erasure of a type.
 ArrayType getArrayType(TypeMirror componentType)
          Returns an array type with the specified component type.
 DeclaredType getDeclaredType(DeclaredType enclosing, TypeElement typeElem, TypeMirror... typeArgs)
          Returns the type corresponding to a type element and actual type arguments, given a containing type of which it is a member.
 DeclaredType getDeclaredType(TypeElement typeElem, TypeMirror... typeArgs)
          Returns the type corresponding to a type element and actual type arguments.
private  DeclaredType getDeclaredType0(Type outer, Symbol.ClassSymbol sym, TypeMirror... typeArgs)
           
 NoType getNoType(TypeKind kind)
          Returns a pseudo-type used where no actual type is appropriate.
 NullType getNullType()
          Returns the null type.
 PrimitiveType getPrimitiveType(TypeKind kind)
          Returns a primitive type.
 WildcardType getWildcardType(TypeMirror extendsBound, TypeMirror superBound)
          Returns a new wildcard type argument.
static JavacTypes instance(Context context)
           
 boolean isAssignable(TypeMirror t1, TypeMirror t2)
          Tests whether one type is assignable to another.
 boolean isSameType(TypeMirror t1, TypeMirror t2)
          Tests whether two TypeMirror objects represent the same type.
 boolean isSubsignature(ExecutableType m1, ExecutableType m2)
          Tests whether the signature of one method is a subsignature of another.
 boolean isSubtype(TypeMirror t1, TypeMirror t2)
          Tests whether one type is a subtype of another.
 void setContext(Context context)
          Use a new context.
 PrimitiveType unboxedType(TypeMirror t)
          Returns the type (a primitive type) of unboxed values of a given type.
private  void validateTypeNotIn(TypeMirror t, java.util.Set<TypeKind> invalidKinds)
          Throws an IllegalArgumentException if a type's kind is one of a set.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

syms

private Symtab syms

types

private Types types

KEY

private static final Context.Key<JavacTypes> KEY

EXEC_OR_PKG

private static final java.util.Set<TypeKind> EXEC_OR_PKG
Constructor Detail

JavacTypes

public JavacTypes(Context context)
Public for use only by JavacProcessingEnvironment

Method Detail

instance

public static JavacTypes instance(Context context)

setContext

public void setContext(Context context)
Use a new context. May be called from outside to update internal state for a new annotation-processing round. This instance is *not* then registered with the new context.


asElement

public Element asElement(TypeMirror t)
Description copied from interface: Types
Returns the element corresponding to a type. The type may be a DeclaredType or TypeVariable. Returns null if the type is not one with a corresponding element.

Specified by:
asElement in interface Types
Returns:
the element corresponding to the given type

isSameType

public boolean isSameType(TypeMirror t1,
                          TypeMirror t2)
Description copied from interface: Types
Tests whether two TypeMirror objects represent the same type.

Caveat: if either of the arguments to this method represents a wildcard, this method will return false. As a consequence, a wildcard is not the same type as itself. This might be surprising at first, but makes sense once you consider that an example like this must be rejected by the compiler:

   List<?> list = new ArrayList<Object>();
   list.add(list.get(0));
 

Specified by:
isSameType in interface Types
Parameters:
t1 - the first type
t2 - the second type
Returns:
true if and only if the two types are the same

isSubtype

public boolean isSubtype(TypeMirror t1,
                         TypeMirror t2)
Description copied from interface: Types
Tests whether one type is a subtype of another. Any type is considered to be a subtype of itself.

Specified by:
isSubtype in interface Types
Parameters:
t1 - the first type
t2 - the second type
Returns:
true if and only if the first type is a subtype of the second

isAssignable

public boolean isAssignable(TypeMirror t1,
                            TypeMirror t2)
Description copied from interface: Types
Tests whether one type is assignable to another.

Specified by:
isAssignable in interface Types
Parameters:
t1 - the first type
t2 - the second type
Returns:
true if and only if the first type is assignable to the second

contains

public boolean contains(TypeMirror t1,
                        TypeMirror t2)
Description copied from interface: Types
Tests whether one type argument contains another.

Specified by:
contains in interface Types
Parameters:
t1 - the first type
t2 - the second type
Returns:
true if and only if the first type contains the second

isSubsignature

public boolean isSubsignature(ExecutableType m1,
                              ExecutableType m2)
Description copied from interface: Types
Tests whether the signature of one method is a subsignature of another.

Specified by:
isSubsignature in interface Types
Parameters:
m1 - the first method
m2 - the second method
Returns:
true if and only if the first signature is a subsignature of the second

directSupertypes

public java.util.List<Type> directSupertypes(TypeMirror t)
Description copied from interface: Types
Returns the direct supertypes of a type. The interface types, if any, will appear last in the list.

Specified by:
directSupertypes in interface Types
Parameters:
t - the type being examined
Returns:
the direct supertypes, or an empty list if none

erasure

public TypeMirror erasure(TypeMirror t)
Description copied from interface: Types
Returns the erasure of a type.

Specified by:
erasure in interface Types
Parameters:
t - the type to be erased
Returns:
the erasure of the given type

boxedClass

public TypeElement boxedClass(PrimitiveType p)
Description copied from interface: Types
Returns the class of a boxed value of a given primitive type. That is, boxing conversion is applied.

Specified by:
boxedClass in interface Types
Parameters:
p - the primitive type to be converted
Returns:
the class of a boxed value of type p

unboxedType

public PrimitiveType unboxedType(TypeMirror t)
Description copied from interface: Types
Returns the type (a primitive type) of unboxed values of a given type. That is, unboxing conversion is applied.

Specified by:
unboxedType in interface Types
Parameters:
t - the type to be unboxed
Returns:
the type of an unboxed value of type t

capture

public TypeMirror capture(TypeMirror t)
Description copied from interface: Types
Applies capture conversion to a type.

Specified by:
capture in interface Types
Parameters:
t - the type to be converted
Returns:
the result of applying capture conversion

getPrimitiveType

public PrimitiveType getPrimitiveType(TypeKind kind)
Description copied from interface: Types
Returns a primitive type.

Specified by:
getPrimitiveType in interface Types
Parameters:
kind - the kind of primitive type to return
Returns:
a primitive type

getNullType

public NullType getNullType()
Description copied from interface: Types
Returns the null type. This is the type of null.

Specified by:
getNullType in interface Types
Returns:
the null type

getNoType

public NoType getNoType(TypeKind kind)
Description copied from interface: Types
Returns a pseudo-type used where no actual type is appropriate. The kind of type to return may be either VOID or NONE. For packages, use Elements.getPackageElement(CharSequence).asType() instead.

Specified by:
getNoType in interface Types
Parameters:
kind - the kind of type to return
Returns:
a pseudo-type of kind VOID or NONE

getArrayType

public ArrayType getArrayType(TypeMirror componentType)
Description copied from interface: Types
Returns an array type with the specified component type.

Specified by:
getArrayType in interface Types
Parameters:
componentType - the component type
Returns:
an array type with the specified component type.

getWildcardType

public WildcardType getWildcardType(TypeMirror extendsBound,
                                    TypeMirror superBound)
Description copied from interface: Types
Returns a new wildcard type argument. Either of the wildcard's bounds may be specified, or neither, but not both.

Specified by:
getWildcardType in interface Types
Parameters:
extendsBound - the extends (upper) bound, or null if none
superBound - the super (lower) bound, or null if none
Returns:
a new wildcard

getDeclaredType

public DeclaredType getDeclaredType(TypeElement typeElem,
                                    TypeMirror... typeArgs)
Description copied from interface: Types
Returns the type corresponding to a type element and actual type arguments. Given the type element for Set and the type mirror for String, for example, this method may be used to get the parameterized type Set<String>.

The number of type arguments must either equal the number of the type element's formal type parameters, or must be zero. If zero, and if the type element is generic, then the type element's raw type is returned.

If a parameterized type is being returned, its type element must not be contained within a generic outer class. The parameterized type Outer<String>.Inner<Number>, for example, may be constructed by first using this method to get the type Outer<String>, and then invoking Types.getDeclaredType(DeclaredType, TypeElement, TypeMirror...).

Specified by:
getDeclaredType in interface Types
Parameters:
typeElem - the type element
typeArgs - the actual type arguments
Returns:
the type corresponding to the type element and actual type arguments

getDeclaredType

public DeclaredType getDeclaredType(DeclaredType enclosing,
                                    TypeElement typeElem,
                                    TypeMirror... typeArgs)
Description copied from interface: Types
Returns the type corresponding to a type element and actual type arguments, given a containing type of which it is a member. The parameterized type Outer<String>.Inner<Number>, for example, may be constructed by first using Types.getDeclaredType(TypeElement, TypeMirror...) to get the type Outer<String>, and then invoking this method.

If the containing type is a parameterized type, the number of type arguments must equal the number of typeElem's formal type parameters. If it is not parameterized or if it is null, this method is equivalent to getDeclaredType(typeElem, typeArgs).

Specified by:
getDeclaredType in interface Types
Parameters:
enclosing - the containing type, or null if none
typeElem - the type element
typeArgs - the actual type arguments
Returns:
the type corresponding to the type element and actual type arguments, contained within the given type

getDeclaredType0

private DeclaredType getDeclaredType0(Type outer,
                                      Symbol.ClassSymbol sym,
                                      TypeMirror... typeArgs)

asMemberOf

public TypeMirror asMemberOf(DeclaredType containing,
                             Element element)
Returns the type of an element when that element is viewed as a member of, or otherwise directly contained by, a given type. For example, when viewed as a member of the parameterized type Set<String>, the Set.add method is an ExecutableType whose parameter is of type String.

Specified by:
asMemberOf in interface Types
Parameters:
containing - the containing type
element - the element
Returns:
the type of the element as viewed from the containing type
Throws:
java.lang.IllegalArgumentException - if the element is not a valid one for the given type

validateTypeNotIn

private void validateTypeNotIn(TypeMirror t,
                               java.util.Set<TypeKind> invalidKinds)
Throws an IllegalArgumentException if a type's kind is one of a set.


cast

private static <T> T cast(java.lang.Class<T> clazz,
                          java.lang.Object o)
Returns an object cast to the specified type.

Throws:
java.lang.NullPointerException - if the object is null
java.lang.IllegalArgumentException - if the object is of the wrong type