com.ibm.wala.types
Class TypeReference

java.lang.Object
  extended by com.ibm.wala.types.TypeReference
All Implemented Interfaces:
java.io.Serializable

public final class TypeReference
extends java.lang.Object
implements java.io.Serializable

A class to represent the reference in a class file to some type (class, primitive or array). A type reference is uniquely defined by

Resolving a TypeReference to a Type can be an expensive operation. Therefore we canonicalize TypeReference instances and cache the result of resolution.

See Also:
Serialized Form

Field Summary
static byte ArrayTypeCode
           
static TypeReference Boolean
           
static TypeReference BooleanArray
          Primitive Array Dispatch *
static TypeName BooleanName
          Primitive Dispatch *
static byte BooleanTypeCode
           
static TypeReference Byte
           
static TypeReference ByteArray
           
static TypeName ByteName
           
static byte ByteTypeCode
           
static TypeReference Char
           
static TypeReference CharArray
           
static TypeName CharName
           
static byte CharTypeCode
           
static byte ClassTypeCode
           
static TypeReference Double
           
static TypeReference DoubleArray
           
static TypeName DoubleName
           
static byte DoubleTypeCode
           
static TypeReference Float
           
static TypeReference FloatArray
           
static TypeName FloatName
           
static byte FloatTypeCode
           
static TypeReference Int
           
static TypeReference IntArray
           
static TypeName IntName
           
static byte IntTypeCode
           
static TypeReference JavaIoSerializable
           
static TypeName JavaIoSerializableName
           
static TypeReference JavaLangArithmeticException
           
static TypeReference JavaLangArrayIndexOutOfBoundsException
           
static TypeReference JavaLangArrayStoreException
           
static TypeReference JavaLangBoolean
           
static TypeReference JavaLangByte
           
static TypeReference JavaLangCharacter
           
static TypeReference JavaLangClass
           
static TypeReference JavaLangClassCastException
           
static TypeReference JavaLangClassNotFoundException
           
static TypeReference JavaLangCloneable
           
static TypeName JavaLangCloneableName
           
static TypeReference JavaLangComparable
           
static TypeReference JavaLangDouble
           
static TypeReference JavaLangEnum
           
static TypeReference JavaLangError
           
static TypeReference JavaLangException
           
static TypeReference JavaLangExceptionInInitializerError
           
static TypeReference JavaLangFloat
           
static TypeReference JavaLangInteger
           
static TypeReference JavaLangLong
           
static TypeReference JavaLangNegativeArraySizeException
           
static TypeReference JavaLangNullPointerException
           
static TypeReference JavaLangObject
           
static TypeReference JavaLangOutOfMemoryError
           
static TypeReference JavaLangReflectConstructor
           
static TypeReference JavaLangReflectMethod
           
static TypeReference JavaLangRuntimeException
           
static TypeReference JavaLangShort
           
static TypeReference JavaLangStackTraceElement
           
static TypeReference JavaLangString
           
static TypeReference JavaLangStringBuffer
           
static TypeReference JavaLangStringBuilder
           
static TypeReference JavaLangSystem
           
static TypeReference JavaLangThread
           
static TypeReference JavaLangThrowable
           
static TypeReference JavaUtilCollection
           
static TypeReference JavaUtilEnum
           
static TypeReference JavaUtilHashSet
           
static TypeReference JavaUtilIterator
           
static TypeReference JavaUtilMap
           
static TypeReference JavaUtilSet
           
static TypeReference JavaUtilVector
           
static TypeReference Long
           
static TypeReference LongArray
           
static TypeName LongName
           
static byte LongTypeCode
           
static TypeReference Null
           
static byte OtherPrimitiveTypeCode
           
static TypeReference Short
           
static TypeReference ShortArray
           
static TypeName ShortName
           
static byte ShortTypeCode
           
static TypeReference Unknown
           
static TypeReference Void
           
static TypeName VoidName
           
static byte VoidTypeCode
           
 
Constructor Summary
protected TypeReference(ClassLoaderReference cl, TypeName tn)
          NB: All type names should use '/' and not '.' as a separator.
 
Method Summary
 boolean equals(java.lang.Object other)
          TypeReferences are canonical.
static TypeReference findOrCreate(ClassLoaderReference cl, java.lang.String typeName)
          Find or create the canonical TypeReference instance for the given pair.
static TypeReference findOrCreate(ClassLoaderReference cl, TypeName typeName)
          Find or create the canonical TypeReference instance for the given pair.
static TypeReference findOrCreateArrayOf(TypeReference t)
           
static TypeReference findOrCreateClass(ClassLoaderReference loader, java.lang.String packageName, java.lang.String className)
           
 TypeReference getArrayElementType()
          TODO: specialized form of TypeReference for arrays, please.
 TypeReference getArrayTypeForElementType()
          Get array type corresponding to "this" array element type.
 ClassLoaderReference getClassLoader()
           
 int getDimensionality()
          Return the dimensionality of the type.
 TypeReference getInnermostElementType()
          Return the innermost element type reference for an array
 TypeName getName()
           
 int hashCode()
           
 boolean isArrayType()
          Does 'this' refer to an array?
 boolean isClassType()
          Does 'this' refer to a class?
 boolean isPrimitiveType()
          Does 'this' refer to a primitive type
static boolean isPrimitiveType(TypeName name)
          Could name a represent a primitive type?
 boolean isReferenceType()
          Does 'this' refer to a reference type
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

BooleanName

public static final TypeName BooleanName
Primitive Dispatch *


BooleanTypeCode

public static final byte BooleanTypeCode
See Also:
Constant Field Values

Boolean

public static final TypeReference Boolean

ByteName

public static final TypeName ByteName

ByteTypeCode

public static final byte ByteTypeCode
See Also:
Constant Field Values

Byte

public static final TypeReference Byte

CharName

public static final TypeName CharName

CharTypeCode

public static final byte CharTypeCode
See Also:
Constant Field Values

Char

public static final TypeReference Char

DoubleName

public static final TypeName DoubleName

DoubleTypeCode

public static final byte DoubleTypeCode
See Also:
Constant Field Values

Double

public static final TypeReference Double

FloatName

public static final TypeName FloatName

FloatTypeCode

public static final byte FloatTypeCode
See Also:
Constant Field Values

Float

public static final TypeReference Float

IntName

public static final TypeName IntName

IntTypeCode

public static final byte IntTypeCode
See Also:
Constant Field Values

Int

public static final TypeReference Int

LongName

public static final TypeName LongName

LongTypeCode

public static final byte LongTypeCode
See Also:
Constant Field Values

Long

public static final TypeReference Long

ShortName

public static final TypeName ShortName

ShortTypeCode

public static final byte ShortTypeCode
See Also:
Constant Field Values

Short

public static final TypeReference Short

VoidName

public static final TypeName VoidName

VoidTypeCode

public static final byte VoidTypeCode
See Also:
Constant Field Values

Void

public static final TypeReference Void

OtherPrimitiveTypeCode

public static final byte OtherPrimitiveTypeCode
See Also:
Constant Field Values

BooleanArray

public static final TypeReference BooleanArray
Primitive Array Dispatch *


ByteArray

public static final TypeReference ByteArray

CharArray

public static final TypeReference CharArray

DoubleArray

public static final TypeReference DoubleArray

FloatArray

public static final TypeReference FloatArray

IntArray

public static final TypeReference IntArray

LongArray

public static final TypeReference LongArray

ShortArray

public static final TypeReference ShortArray

JavaLangArithmeticException

public static final TypeReference JavaLangArithmeticException

JavaLangArrayStoreException

public static final TypeReference JavaLangArrayStoreException

JavaLangArrayIndexOutOfBoundsException

public static final TypeReference JavaLangArrayIndexOutOfBoundsException

JavaLangClass

public static final TypeReference JavaLangClass

JavaLangClassCastException

public static final TypeReference JavaLangClassCastException

JavaLangComparable

public static final TypeReference JavaLangComparable

JavaLangReflectConstructor

public static final TypeReference JavaLangReflectConstructor

JavaLangReflectMethod

public static final TypeReference JavaLangReflectMethod

JavaLangEnum

public static final TypeReference JavaLangEnum

JavaLangError

public static final TypeReference JavaLangError

JavaLangException

public static final TypeReference JavaLangException

JavaLangNegativeArraySizeException

public static final TypeReference JavaLangNegativeArraySizeException

JavaLangNullPointerException

public static final TypeReference JavaLangNullPointerException

JavaLangRuntimeException

public static final TypeReference JavaLangRuntimeException

JavaLangClassNotFoundException

public static final TypeReference JavaLangClassNotFoundException

JavaLangOutOfMemoryError

public static final TypeReference JavaLangOutOfMemoryError

JavaLangExceptionInInitializerError

public static final TypeReference JavaLangExceptionInInitializerError

JavaLangObject

public static final TypeReference JavaLangObject

JavaLangStackTraceElement

public static final TypeReference JavaLangStackTraceElement

JavaLangString

public static final TypeReference JavaLangString

JavaLangStringBuffer

public static final TypeReference JavaLangStringBuffer

JavaLangStringBuilder

public static final TypeReference JavaLangStringBuilder

JavaLangThread

public static final TypeReference JavaLangThread

JavaLangThrowable

public static final TypeReference JavaLangThrowable

JavaLangCloneableName

public static final TypeName JavaLangCloneableName

JavaLangCloneable

public static final TypeReference JavaLangCloneable

JavaLangSystem

public static final TypeReference JavaLangSystem

JavaLangInteger

public static final TypeReference JavaLangInteger

JavaLangBoolean

public static final TypeReference JavaLangBoolean

JavaLangDouble

public static final TypeReference JavaLangDouble

JavaLangFloat

public static final TypeReference JavaLangFloat

JavaLangShort

public static final TypeReference JavaLangShort

JavaLangLong

public static final TypeReference JavaLangLong

JavaLangByte

public static final TypeReference JavaLangByte

JavaLangCharacter

public static final TypeReference JavaLangCharacter

JavaIoSerializableName

public static final TypeName JavaIoSerializableName

JavaIoSerializable

public static final TypeReference JavaIoSerializable

JavaUtilCollection

public static final TypeReference JavaUtilCollection

JavaUtilMap

public static final TypeReference JavaUtilMap

JavaUtilHashSet

public static final TypeReference JavaUtilHashSet

JavaUtilSet

public static final TypeReference JavaUtilSet

JavaUtilEnum

public static final TypeReference JavaUtilEnum

JavaUtilIterator

public static final TypeReference JavaUtilIterator

JavaUtilVector

public static final TypeReference JavaUtilVector

ClassTypeCode

public static final byte ClassTypeCode
See Also:
Constant Field Values

ArrayTypeCode

public static final byte ArrayTypeCode
See Also:
Constant Field Values

Null

public static final TypeReference Null

Unknown

public static final TypeReference Unknown
Constructor Detail

TypeReference

protected TypeReference(ClassLoaderReference cl,
                        TypeName tn)
NB: All type names should use '/' and not '.' as a separator. eg. Ljava/lang/Class

Parameters:
cl - the classloader
tn - the type name
Method Detail

isPrimitiveType

public static boolean isPrimitiveType(TypeName name)
Could name a represent a primitive type?


findOrCreate

public static TypeReference findOrCreate(ClassLoaderReference cl,
                                         TypeName typeName)
Find or create the canonical TypeReference instance for the given pair.

Parameters:
cl - the classloader (defining/initiating depending on usage)

findOrCreate

public static TypeReference findOrCreate(ClassLoaderReference cl,
                                         java.lang.String typeName)
Find or create the canonical TypeReference instance for the given pair.

Parameters:
cl - the classloader (defining/initiating depending on usage)
typeName - something like "Ljava/util/Arrays"

findOrCreateArrayOf

public static TypeReference findOrCreateArrayOf(TypeReference t)

getClassLoader

public final ClassLoaderReference getClassLoader()
Returns:
the classloader component of this type reference

getName

public final TypeName getName()
Returns:
the type name component of this type reference

getArrayElementType

public final TypeReference getArrayElementType()
TODO: specialized form of TypeReference for arrays, please. Get the element type of for this array type.


getArrayTypeForElementType

public final TypeReference getArrayTypeForElementType()
Get array type corresponding to "this" array element type.


getDimensionality

public final int getDimensionality()
Return the dimensionality of the type. By convention, class types have dimensionality 0, primitives -1, and arrays the number of [ in their descriptor.


getInnermostElementType

public final TypeReference getInnermostElementType()
Return the innermost element type reference for an array


isClassType

public final boolean isClassType()
Does 'this' refer to a class?


isArrayType

public final boolean isArrayType()
Does 'this' refer to an array?


isPrimitiveType

public final boolean isPrimitiveType()
Does 'this' refer to a primitive type


isReferenceType

public final boolean isReferenceType()
Does 'this' refer to a reference type


hashCode

public final int hashCode()
Overrides:
hashCode in class java.lang.Object

equals

public final boolean equals(java.lang.Object other)
TypeReferences are canonical. However, note that two TypeReferences can be non-equal, yet still represent the same IClass. For example, the there can be two TypeReferences and . These two TypeReference are NOT equal(), but they both represent the IClass which is named

Overrides:
equals in class java.lang.Object

toString

public final java.lang.String toString()
Overrides:
toString in class java.lang.Object

findOrCreateClass

public static TypeReference findOrCreateClass(ClassLoaderReference loader,
                                              java.lang.String packageName,
                                              java.lang.String className)