com.futureshocked.classloader
Class DebuggerClassVisitor.RecursionLimiterMethodAdapter

java.lang.Object
  extended by org.objectweb.asm.MethodAdapter
      extended by com.futureshocked.classloader.DebuggerClassVisitor.RecursionLimiterMethodAdapter
All Implemented Interfaces:
org.objectweb.asm.MethodVisitor, org.objectweb.asm.Opcodes
Enclosing class:
DebuggerClassVisitor

 class DebuggerClassVisitor.RecursionLimiterMethodAdapter
extends org.objectweb.asm.MethodAdapter
implements org.objectweb.asm.Opcodes

Inner class that adds recursion limiting instructions to the end of a method. More specifically, it will execute '(field)--' before every RETURN opcode in a method. Since this will examine every opcode in a class file, it is only invoked on methods which are known to require modification before RETURN opcodes.


Field Summary
protected  java.lang.String className
          The name of the class being visited.
protected  java.lang.String field
          The name of the field to decrement.
 
Fields inherited from class org.objectweb.asm.MethodAdapter
mv
 
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, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, 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, 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, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, 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, V1_1, V1_2, V1_3, V1_4, V1_5
 
Constructor Summary
DebuggerClassVisitor.RecursionLimiterMethodAdapter(org.objectweb.asm.MethodVisitor mv, java.lang.String className, java.lang.String field)
          Constructor which sets the appropriate instance variables.
 
Method Summary
 void visitInsn(int opcode)
          Called for every opcode in a method - if the opcode is a RETURN opcode then the field decrementing opcodes will be added.
 
Methods inherited from class org.objectweb.asm.MethodAdapter
visitAnnotation, visitAnnotationDefault, visitAttribute, visitCode, visitEnd, visitFieldInsn, visitIincInsn, visitIntInsn, visitJumpInsn, visitLabel, visitLdcInsn, visitLineNumber, visitLocalVariable, visitLookupSwitchInsn, visitMaxs, visitMethodInsn, visitMultiANewArrayInsn, visitParameterAnnotation, visitTableSwitchInsn, visitTryCatchBlock, visitTypeInsn, visitVarInsn
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

className

protected java.lang.String className
The name of the class being visited.


field

protected java.lang.String field
The name of the field to decrement.

Constructor Detail

DebuggerClassVisitor.RecursionLimiterMethodAdapter

public DebuggerClassVisitor.RecursionLimiterMethodAdapter(org.objectweb.asm.MethodVisitor mv,
                                                          java.lang.String className,
                                                          java.lang.String field)
Constructor which sets the appropriate instance variables.

Parameters:
mv - MethodVisitor for the current method.
className - The name of the class.
field - The name of the field to decrement.
Method Detail

visitInsn

public void visitInsn(int opcode)
Called for every opcode in a method - if the opcode is a RETURN opcode then the field decrementing opcodes will be added.

Specified by:
visitInsn in interface org.objectweb.asm.MethodVisitor
Overrides:
visitInsn in class org.objectweb.asm.MethodAdapter
Parameters:
opcode -