net.sourceforge.cobertura.instrument
Class SecondPassMethodInstrumenter

java.lang.Object
  extended by org.objectweb.asm.MethodAdapter
      extended by net.sourceforge.cobertura.instrument.NewLocalVariableMethodAdapter
          extended by net.sourceforge.cobertura.instrument.SecondPassMethodInstrumenter
All Implemented Interfaces:
org.objectweb.asm.MethodVisitor, org.objectweb.asm.Opcodes

public class SecondPassMethodInstrumenter
extends NewLocalVariableMethodAdapter
implements org.objectweb.asm.Opcodes


Field Summary
private static int BOOLEAN_FALSE
           
private static int BOOLEAN_TRUE
           
private  int currentJump
           
private  int currentLine
           
private  org.objectweb.asm.Label endLabel
           
private  FirstPassMethodInstrumenter firstPass
           
private  JumpHolder lastJump
           
private  boolean methodStarted
           
private  int myVariableIndex
           
private  org.objectweb.asm.Label startLabel
           
 
Fields inherited from class net.sourceforge.cobertura.instrument.NewLocalVariableMethodAdapter
addedStackWords, firstStackVariable
 
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, 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
SecondPassMethodInstrumenter(FirstPassMethodInstrumenter firstPass)
           
 
Method Summary
private  void instrumentGetClassData()
           
private  void instrumentInvokeTouchJump()
           
private  void instrumentInvokeTouchSwitch()
           
private  org.objectweb.asm.Label instrumentIsLastJump()
           
private  void instrumentJumpHit(boolean branch)
           
private  void instrumentPutLineAndBranchNumbers()
           
private  void instrumentSwitchHit(int lineNumber, int switchNumber, int branch)
           
private  void touchBranchFalse()
           
 void visitCode()
           
 void visitFieldInsn(int opcode, java.lang.String owner, java.lang.String name, java.lang.String desc)
           
 void visitIincInsn(int var, int increment)
           
 void visitInsn(int opcode)
           
 void visitIntInsn(int opcode, int operand)
           
 void visitJumpInsn(int opcode, org.objectweb.asm.Label label)
           
 void visitLabel(org.objectweb.asm.Label label)
           
 void visitLdcInsn(java.lang.Object cst)
           
 void visitLineNumber(int line, org.objectweb.asm.Label start)
           
 void visitLookupSwitchInsn(org.objectweb.asm.Label dflt, int[] keys, org.objectweb.asm.Label[] labels)
           
 void visitMaxs(int maxStack, int maxLocals)
           
 void visitMethodInsn(int opcode, java.lang.String owner, java.lang.String name, java.lang.String desc)
           
 void visitMultiANewArrayInsn(java.lang.String desc, int dims)
           
 void visitTableSwitchInsn(int min, int max, org.objectweb.asm.Label dflt, org.objectweb.asm.Label[] labels)
           
 void visitTryCatchBlock(org.objectweb.asm.Label start, org.objectweb.asm.Label end, org.objectweb.asm.Label handler, java.lang.String type)
           
 void visitTypeInsn(int opcode, java.lang.String desc)
           
 void visitVarInsn(int opcode, int var)
           
 
Methods inherited from class net.sourceforge.cobertura.instrument.NewLocalVariableMethodAdapter
getAddedStackWords, getFirstStackVariable, visitLocalVariable
 
Methods inherited from class org.objectweb.asm.MethodAdapter
visitAnnotation, visitAnnotationDefault, visitAttribute, visitEnd, visitFrame, visitParameterAnnotation
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

currentLine

private int currentLine

currentJump

private int currentJump

methodStarted

private boolean methodStarted

myVariableIndex

private int myVariableIndex

startLabel

private org.objectweb.asm.Label startLabel

endLabel

private org.objectweb.asm.Label endLabel

lastJump

private JumpHolder lastJump

firstPass

private FirstPassMethodInstrumenter firstPass

BOOLEAN_TRUE

private static final int BOOLEAN_TRUE
See Also:
Constant Field Values

BOOLEAN_FALSE

private static final int BOOLEAN_FALSE
See Also:
Constant Field Values
Constructor Detail

SecondPassMethodInstrumenter

public SecondPassMethodInstrumenter(FirstPassMethodInstrumenter firstPass)
Method Detail

visitJumpInsn

public void visitJumpInsn(int opcode,
                          org.objectweb.asm.Label label)
Specified by:
visitJumpInsn in interface org.objectweb.asm.MethodVisitor
Overrides:
visitJumpInsn in class org.objectweb.asm.MethodAdapter

visitLineNumber

public void visitLineNumber(int line,
                            org.objectweb.asm.Label start)
Specified by:
visitLineNumber in interface org.objectweb.asm.MethodVisitor
Overrides:
visitLineNumber in class org.objectweb.asm.MethodAdapter

visitMethodInsn

public void visitMethodInsn(int opcode,
                            java.lang.String owner,
                            java.lang.String name,
                            java.lang.String desc)
Specified by:
visitMethodInsn in interface org.objectweb.asm.MethodVisitor
Overrides:
visitMethodInsn in class org.objectweb.asm.MethodAdapter

visitFieldInsn

public void visitFieldInsn(int opcode,
                           java.lang.String owner,
                           java.lang.String name,
                           java.lang.String desc)
Specified by:
visitFieldInsn in interface org.objectweb.asm.MethodVisitor
Overrides:
visitFieldInsn in class org.objectweb.asm.MethodAdapter

visitIincInsn

public void visitIincInsn(int var,
                          int increment)
Specified by:
visitIincInsn in interface org.objectweb.asm.MethodVisitor
Overrides:
visitIincInsn in class NewLocalVariableMethodAdapter

visitInsn

public void visitInsn(int opcode)
Specified by:
visitInsn in interface org.objectweb.asm.MethodVisitor
Overrides:
visitInsn in class org.objectweb.asm.MethodAdapter

visitIntInsn

public void visitIntInsn(int opcode,
                         int operand)
Specified by:
visitIntInsn in interface org.objectweb.asm.MethodVisitor
Overrides:
visitIntInsn in class org.objectweb.asm.MethodAdapter

visitLabel

public void visitLabel(org.objectweb.asm.Label label)
Specified by:
visitLabel in interface org.objectweb.asm.MethodVisitor
Overrides:
visitLabel in class org.objectweb.asm.MethodAdapter

visitLdcInsn

public void visitLdcInsn(java.lang.Object cst)
Specified by:
visitLdcInsn in interface org.objectweb.asm.MethodVisitor
Overrides:
visitLdcInsn in class org.objectweb.asm.MethodAdapter

visitMultiANewArrayInsn

public void visitMultiANewArrayInsn(java.lang.String desc,
                                    int dims)
Specified by:
visitMultiANewArrayInsn in interface org.objectweb.asm.MethodVisitor
Overrides:
visitMultiANewArrayInsn in class org.objectweb.asm.MethodAdapter

visitLookupSwitchInsn

public void visitLookupSwitchInsn(org.objectweb.asm.Label dflt,
                                  int[] keys,
                                  org.objectweb.asm.Label[] labels)
Specified by:
visitLookupSwitchInsn in interface org.objectweb.asm.MethodVisitor
Overrides:
visitLookupSwitchInsn in class org.objectweb.asm.MethodAdapter

visitTableSwitchInsn

public void visitTableSwitchInsn(int min,
                                 int max,
                                 org.objectweb.asm.Label dflt,
                                 org.objectweb.asm.Label[] labels)
Specified by:
visitTableSwitchInsn in interface org.objectweb.asm.MethodVisitor
Overrides:
visitTableSwitchInsn in class org.objectweb.asm.MethodAdapter

visitTryCatchBlock

public void visitTryCatchBlock(org.objectweb.asm.Label start,
                               org.objectweb.asm.Label end,
                               org.objectweb.asm.Label handler,
                               java.lang.String type)
Specified by:
visitTryCatchBlock in interface org.objectweb.asm.MethodVisitor
Overrides:
visitTryCatchBlock in class org.objectweb.asm.MethodAdapter

visitTypeInsn

public void visitTypeInsn(int opcode,
                          java.lang.String desc)
Specified by:
visitTypeInsn in interface org.objectweb.asm.MethodVisitor
Overrides:
visitTypeInsn in class org.objectweb.asm.MethodAdapter

visitVarInsn

public void visitVarInsn(int opcode,
                         int var)
Specified by:
visitVarInsn in interface org.objectweb.asm.MethodVisitor
Overrides:
visitVarInsn in class NewLocalVariableMethodAdapter

visitCode

public void visitCode()
Specified by:
visitCode in interface org.objectweb.asm.MethodVisitor
Overrides:
visitCode in class org.objectweb.asm.MethodAdapter

touchBranchFalse

private void touchBranchFalse()

instrumentGetClassData

private void instrumentGetClassData()

instrumentSwitchHit

private void instrumentSwitchHit(int lineNumber,
                                 int switchNumber,
                                 int branch)

instrumentJumpHit

private void instrumentJumpHit(boolean branch)

instrumentInvokeTouchJump

private void instrumentInvokeTouchJump()

instrumentInvokeTouchSwitch

private void instrumentInvokeTouchSwitch()

instrumentPutLineAndBranchNumbers

private void instrumentPutLineAndBranchNumbers()

instrumentIsLastJump

private org.objectweb.asm.Label instrumentIsLastJump()

visitMaxs

public void visitMaxs(int maxStack,
                      int maxLocals)
Specified by:
visitMaxs in interface org.objectweb.asm.MethodVisitor
Overrides:
visitMaxs in class org.objectweb.asm.MethodAdapter