org.springsource.loaded
Class TypeDescriptor

java.lang.Object
  extended by org.springsource.loaded.TypeDescriptor
All Implemented Interfaces:
org.objectweb.asm.Opcodes, Constants

public class TypeDescriptor
extends java.lang.Object
implements Constants

Encapsulates the information about a type relevant to reloading. The TypeDescriptor for a type is sometimes extracted whilst performing some other operation (eg. InterfaceExtractor) but can also be retrieved directly using TypeDescriptorExtractor.

Since:
0.5.0

Field Summary
 
Fields inherited from interface org.springsource.loaded.Constants
ACC_PRIVATE_PROTECTED, ACC_PRIVATE_STATIC, ACC_PRIVATE_STATIC_FINAL, ACC_PUBLIC_ABSTRACT, ACC_PUBLIC_INTERFACE, ACC_PUBLIC_PRIVATE_PROTECTED, ACC_PUBLIC_PROTECTED, ACC_PUBLIC_STATIC, ACC_PUBLIC_STATIC_FINAL, ACC_PUBLIC_STATIC_SYNTHETIC, ACC_PUBLIC_SYNTHETIC, DEFAULT_BOOLEAN, DEFAULT_BYTE, DEFAULT_CHAR, DEFAULT_DOUBLE, DEFAULT_FLOAT, DEFAULT_INT, DEFAULT_LONG, DEFAULT_SHORT, descriptorChangedForInvokeSpecialName, executorClassNamePattern, fInstanceFieldsName, fReloadableTypeFieldName, fStaticFieldsName, JLC_GETCONSTRUCTOR, JLC_GETDECLAREDCONSTRUCTOR, JLC_GETDECLAREDFIELD, JLC_GETDECLAREDFIELDS, JLC_GETDECLAREDMETHOD, JLC_GETDECLAREDMETHODS, JLC_GETFIELD, JLC_GETMETHOD, JLC_GETMETHODS, JLC_GETMODIFIERS, jlcgc, jlcgcDescriptor, jlcgdc, jlcgdcDescriptor, jlcgdf, jlcgdfDescriptor, jlcgdfs, jlcgdfsDescriptor, jlcgdm, jlcgdmDescriptor, jlcgdms, jlcgdmsDescriptor, jlcgf, jlcgfDescriptor, jlcgm, jlcgmDescriptor, jlcgmods, jlcgmodsDescriptor, jlcgms, jlcgmsDescriptor, jlObject, lDynamicallyDispatchable, lInstanceStateManager, lRegistryType, lReloadableType, lStaticStateManager, magicDescriptorForGeneratedCtors, mChangedForConstructorName, mChangedForInvocationName, mChangedForInvokeInterfaceName, mChangedForInvokeSpecialName, mChangedForInvokeStaticName, mChangedForInvokeVirtualName, mDynamicDispatchDescriptor, mDynamicDispatchName, methodSuffixSuperDispatcher, mInitializerName, mInstanceFieldGetterDescriptor, mInstanceFieldGetterName, mInstanceFieldInterceptionRequired, mInstanceFieldSetterDescriptor, mInstanceFieldSetterName, mStaticFieldGetterName, mStaticFieldInterceptionRequired, mStaticFieldSetterDescriptor, mStaticFieldSetterName, mStaticInitializerName, NO_FIELDS, NO_METHODS, NO_STRINGS, PREFIX, tDynamicallyDispatchable, tInstanceStateManager, tRegistryType, tReloadableType, tStaticStateManager, WAS_INVOKESTATIC, WAS_INVOKEVIRTUAL
 
Fields inherited from interface org.objectweb.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEDYNAMIC_OWNER, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7
 
Constructor Summary
TypeDescriptor(java.lang.String slashedTypeName, java.lang.String supertypeName, java.lang.String[] superinterfaceNames, int modifiers, java.util.List<? extends MethodMember> constructors, java.util.List<MethodMember> methods, java.util.List<? extends FieldMember> fields, java.util.List<? extends FieldMember> fieldsRequiringAccessors, boolean isReloadable, TypeRegistry registry, boolean hasClinit, java.util.List<java.lang.String> finalInHierarchy)
           
 
Method Summary
 boolean defines(MethodMember method)
          Check if this descriptor defines the specified method.
 boolean definesNonPrivate(java.lang.String nameAndDescriptor)
           
 MethodMember getByDescriptor(java.lang.String name, java.lang.String descriptor)
          Check if this descriptor defines a method with the specified name and descriptor.
 MethodMember getByNameAndDescriptor(java.lang.String nameAndDescriptor)
           
 MethodMember getConstructor(int ctorId)
           
 MethodMember getConstructor(java.lang.String desc)
           
 MethodMember[] getConstructors()
           
 java.lang.String getDottedName()
           
 FieldMember getField(java.lang.String name)
          Search for a field on this type descriptor - do not try supertypes.
 FieldMember[] getFields()
           
 FieldMember[] getFieldsRequiringAccessors()
           
 MethodMember getMethod(int methodId)
           
 MethodMember[] getMethods()
           
 int getModifiers()
           
 java.lang.String getName()
           
 ReloadableType getReloadableType()
           
 java.lang.String[] getSuperinterfacesName()
           
 java.lang.String getSupertypeName()
           
 TypeRegistry getTypeRegistry()
           
 boolean hasClinit()
           
 boolean isAnnotation()
           
 boolean isEnum()
           
 boolean isFinalInHierarchy(java.lang.String nad)
           
 boolean isGroovyType()
           
 boolean isInterface()
           
 boolean isReloadable()
           
 java.lang.String methodsToString(MethodMember[] methods)
           
 void setIsGroovyType(boolean b)
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

TypeDescriptor

public TypeDescriptor(java.lang.String slashedTypeName,
                      java.lang.String supertypeName,
                      java.lang.String[] superinterfaceNames,
                      int modifiers,
                      java.util.List<? extends MethodMember> constructors,
                      java.util.List<MethodMember> methods,
                      java.util.List<? extends FieldMember> fields,
                      java.util.List<? extends FieldMember> fieldsRequiringAccessors,
                      boolean isReloadable,
                      TypeRegistry registry,
                      boolean hasClinit,
                      java.util.List<java.lang.String> finalInHierarchy)
Method Detail

getMethods

public MethodMember[] getMethods()

getConstructors

public MethodMember[] getConstructors()

getFields

public FieldMember[] getFields()

getFieldsRequiringAccessors

public FieldMember[] getFieldsRequiringAccessors()

getModifiers

public int getModifiers()

getName

public java.lang.String getName()
Returns:
the (slashed) type name

getSupertypeName

public java.lang.String getSupertypeName()
Returns:
the (slashed) supertype name

getSuperinterfacesName

public java.lang.String[] getSuperinterfacesName()
Returns:
array of (slashed) superinterface names (or an empty array if none)

defines

public boolean defines(MethodMember method)
Check if this descriptor defines the specified method. A strict check on all aspects of the method - names/exceptions/flags, etc.

Returns:
true if this descriptor defines the specified method.

getByDescriptor

public MethodMember getByDescriptor(java.lang.String name,
                                    java.lang.String descriptor)
Check if this descriptor defines a method with the specified name and descriptor. Return the method if it is found. Modifiers, generic signature and exceptions are ignored in this search.


getByNameAndDescriptor

public MethodMember getByNameAndDescriptor(java.lang.String nameAndDescriptor)

isReloadable

public boolean isReloadable()
Returns:
true if this type descriptor has been created for a reloadable type

getMethod

public MethodMember getMethod(int methodId)

getConstructor

public MethodMember getConstructor(int ctorId)

isInterface

public boolean isInterface()
Returns:
true if the type is an interface

isAnnotation

public boolean isAnnotation()
Returns:
true if the type is an annotation

isEnum

public boolean isEnum()
Returns:
true if the type is an enum

definesNonPrivate

public boolean definesNonPrivate(java.lang.String nameAndDescriptor)

isFinalInHierarchy

public boolean isFinalInHierarchy(java.lang.String nad)

getField

public FieldMember getField(java.lang.String name)
Search for a field on this type descriptor - do not try supertypes. This lookup does not differentiate between static/instance fields.

Parameters:
name -
Returns:
a FieldMember if the field is found, otherwise null

getReloadableType

public ReloadableType getReloadableType()

getTypeRegistry

public TypeRegistry getTypeRegistry()

getDottedName

public java.lang.String getDottedName()

getConstructor

public MethodMember getConstructor(java.lang.String desc)

isGroovyType

public boolean isGroovyType()

setIsGroovyType

public void setIsGroovyType(boolean b)

hasClinit

public boolean hasClinit()

toString

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

methodsToString

public java.lang.String methodsToString(MethodMember[] methods)