org.springsource.loaded
Class MethodMember

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

public class MethodMember
extends AbstractMember

Representation of a Method. Some of the bitflags and state are only set for 'incremental' methods - those found in a secondary type descriptor representing a type reload.

Since:
0.5.0

Field Summary
static int BIT_CATCHER
           
static int BIT_CATCHER_INTERFACE
           
static int BIT_CLASH
           
static int BIT_SUPERDISPATCHER
           
 int bits
           
 java.lang.reflect.Method cachedMethod
           
protected  java.lang.String[] exceptions
           
static int EXCEPTIONS_CHANGE
           
static int IS_NEW
           
static int MADE_NON_STATIC
           
static int MADE_STATIC
           
 java.lang.String nameAndDescriptor
           
 MethodMember original
           
static int VISIBILITY_CHANGE
           
static int WAS_DELETED
           
 
Fields inherited from class org.springsource.loaded.AbstractMember
descriptor, id, modifiers, name, signature
 
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
protected MethodMember(int modifiers, java.lang.String name, java.lang.String descriptor, java.lang.String signature, java.lang.String[] exceptions)
           
 
Method Summary
 java.lang.Object bitsToString()
           
 MethodMember catcherCopyOf()
           
 MethodMember catcherCopyOfWithAbstractRemoved()
           
 boolean equals(java.lang.Object other)
           
 boolean equalsApartFromModifiers(MethodMember other)
           
 java.lang.String[] getExceptions()
           
 java.lang.String getNameAndDescriptor()
           
 java.lang.String getParamDescriptor()
           
 int hashCode()
           
 boolean hasReturnValue()
           
static boolean isCatcher(MethodMember method)
           
static boolean isCatcherForInterfaceMethod(MethodMember method)
           
static boolean isClash(MethodMember method)
           
 boolean isConstructor()
           
static boolean isDeleted(MethodMember method)
           
static boolean isSuperDispatcher(MethodMember method)
           
 boolean shouldReplace(MethodMember other)
          Determine whether this method should replace the other method on reload.
 MethodMember superDispatcherFor()
           
 java.lang.String toString()
           
 
Methods inherited from class org.springsource.loaded.AbstractMember
getDescriptor, getGenericSignature, getId, getModifiers, getName, isFinal, isPrivate, isPrivateOrStaticOrFinal, isProtected, isPublic, isStatic, setId
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

exceptions

protected final java.lang.String[] exceptions

bits

public int bits

BIT_CATCHER

public static final int BIT_CATCHER
See Also:
Constant Field Values

BIT_CLASH

public static final int BIT_CLASH
See Also:
Constant Field Values

BIT_CATCHER_INTERFACE

public static final int BIT_CATCHER_INTERFACE
See Also:
Constant Field Values

BIT_SUPERDISPATCHER

public static final int BIT_SUPERDISPATCHER
See Also:
Constant Field Values

MADE_STATIC

public static final int MADE_STATIC
See Also:
Constant Field Values

MADE_NON_STATIC

public static final int MADE_NON_STATIC
See Also:
Constant Field Values

VISIBILITY_CHANGE

public static final int VISIBILITY_CHANGE
See Also:
Constant Field Values

IS_NEW

public static final int IS_NEW
See Also:
Constant Field Values

WAS_DELETED

public static final int WAS_DELETED
See Also:
Constant Field Values

EXCEPTIONS_CHANGE

public static final int EXCEPTIONS_CHANGE
See Also:
Constant Field Values

original

public MethodMember original

nameAndDescriptor

public final java.lang.String nameAndDescriptor

cachedMethod

public java.lang.reflect.Method cachedMethod
Constructor Detail

MethodMember

protected MethodMember(int modifiers,
                       java.lang.String name,
                       java.lang.String descriptor,
                       java.lang.String signature,
                       java.lang.String[] exceptions)
Method Detail

getExceptions

public java.lang.String[] getExceptions()

toString

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

getParamDescriptor

public java.lang.String getParamDescriptor()

hasReturnValue

public boolean hasReturnValue()

equals

public boolean equals(java.lang.Object other)
Overrides:
equals in class java.lang.Object

hashCode

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

catcherCopyOf

public MethodMember catcherCopyOf()

superDispatcherFor

public MethodMember superDispatcherFor()

catcherCopyOfWithAbstractRemoved

public MethodMember catcherCopyOfWithAbstractRemoved()

equalsApartFromModifiers

public boolean equalsApartFromModifiers(MethodMember other)

getNameAndDescriptor

public java.lang.String getNameAndDescriptor()

isClash

public static boolean isClash(MethodMember method)

isSuperDispatcher

public static boolean isSuperDispatcher(MethodMember method)

isCatcher

public static boolean isCatcher(MethodMember method)

isCatcherForInterfaceMethod

public static boolean isCatcherForInterfaceMethod(MethodMember method)

isDeleted

public static boolean isDeleted(MethodMember method)

bitsToString

public java.lang.Object bitsToString()

shouldReplace

public boolean shouldReplace(MethodMember other)
Determine whether this method should replace the other method on reload. In accordance to how JVM works at class load time, this will be the case if this and other have the same Class, name, parameter types and return type. I.e. formally, in JVM bytecode (unlike source code) a method doesn't override a method with a different return type. When such a situation occurs in source code, the compiler will introduce a bridge method in bytecode.


isConstructor

public boolean isConstructor()