org.springsource.loaded.agent
Class ModifyDefineInClassLoaderForClassArtifactsType

java.lang.Object
  extended by org.objectweb.asm.ClassAdapter
      extended by org.springsource.loaded.agent.ModifyDefineInClassLoaderForClassArtifactsType
All Implemented Interfaces:
org.objectweb.asm.ClassVisitor, org.objectweb.asm.Opcodes, Constants

public class ModifyDefineInClassLoaderForClassArtifactsType
extends org.objectweb.asm.ClassAdapter
implements Constants

Since:
0.7.3

Field Summary
 
Fields inherited from class org.objectweb.asm.ClassAdapter
cv
 
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
ModifyDefineInClassLoaderForClassArtifactsType()
           
 
Method Summary
 byte[] getBytes()
           
static byte[] modify(java.lang.ClassLoader classloader, java.lang.String name, byte[] bytes)
          The classloader for class artifacts is used to load the generated classes for call sites.
 org.objectweb.asm.MethodVisitor visitMethod(int access, java.lang.String name, java.lang.String desc, java.lang.String signature, java.lang.String[] exceptions)
           
 
Methods inherited from class org.objectweb.asm.ClassAdapter
visit, visitAnnotation, visitAttribute, visitEnd, visitField, visitInnerClass, visitOuterClass, visitSource
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ModifyDefineInClassLoaderForClassArtifactsType

public ModifyDefineInClassLoaderForClassArtifactsType()
Method Detail

getBytes

public byte[] getBytes()

visitMethod

public org.objectweb.asm.MethodVisitor visitMethod(int access,
                                                   java.lang.String name,
                                                   java.lang.String desc,
                                                   java.lang.String signature,
                                                   java.lang.String[] exceptions)
Specified by:
visitMethod in interface org.objectweb.asm.ClassVisitor
Overrides:
visitMethod in class org.objectweb.asm.ClassAdapter

modify

public static byte[] modify(java.lang.ClassLoader classloader,
                            java.lang.String name,
                            byte[] bytes)
The classloader for class artifacts is used to load the generated classes for call sites. We need to rewrite these classes because they may be either calling something that disappears on a later reload (so need to fail appropriately) or calling something that isnt there on the first load - in this latter case they are changed to route the dynamic executor method.

Parameters:
classloader -
name -
bytes -
Returns: