Class MethodAnalyzer

java.lang.Object
org.objectweb.asm.MethodVisitor
org.jacoco.core.internal.flow.MethodProbesVisitor
org.jacoco.core.internal.analysis.MethodAnalyzer

public class MethodAnalyzer extends MethodProbesVisitor
A MethodProbesVisitor that builds the Instructions of a method to calculate the detailed execution status.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private final InstructionsBuilder
     
    private org.objectweb.asm.tree.AbstractInsnNode
    Current node of the ASM tree API

    Fields inherited from class org.objectweb.asm.MethodVisitor

    api, mv
  • Constructor Summary

    Constructors
    Constructor
    Description
    New instance that uses the given builder.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    accept(org.objectweb.asm.tree.MethodNode methodNode, org.objectweb.asm.MethodVisitor methodVisitor)
    This method can be overwritten to hook into the process of emitting the instructions of this method as visitX() events.
    void
    visitFieldInsn(int opcode, String owner, String name, String desc)
     
    void
    visitIincInsn(int var, int increment)
     
    void
    visitInsn(int opcode)
     
    void
    visitInsnWithProbe(int opcode, int probeId)
    Visits a zero operand instruction with a probe.
    void
    visitIntInsn(int opcode, int operand)
     
    void
    visitInvokeDynamicInsn(String name, String desc, org.objectweb.asm.Handle bsm, Object... bsmArgs)
     
    void
    visitJumpInsn(int opcode, org.objectweb.asm.Label label)
     
    void
    visitJumpInsnWithProbe(int opcode, org.objectweb.asm.Label label, int probeId, IFrame frame)
    Visits a jump instruction.
    void
    visitLabel(org.objectweb.asm.Label label)
     
    void
     
    void
    visitLineNumber(int line, org.objectweb.asm.Label start)
     
    void
    visitLookupSwitchInsn(org.objectweb.asm.Label dflt, int[] keys, org.objectweb.asm.Label[] labels)
     
    void
    visitLookupSwitchInsnWithProbes(org.objectweb.asm.Label dflt, int[] keys, org.objectweb.asm.Label[] labels, IFrame frame)
    Visits a LOOKUPSWITCH instruction with optional probes for each target label.
    void
    visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf)
     
    void
     
    void
    visitProbe(int probeId)
    Visits an unconditional probe that should be inserted at the current position.
    private void
    visitSwitchInsn(org.objectweb.asm.Label dflt, org.objectweb.asm.Label[] labels)
     
    private void
    visitSwitchInsnWithProbes(org.objectweb.asm.Label dflt, org.objectweb.asm.Label[] labels)
     
    private void
    visitSwitchTarget(org.objectweb.asm.Label label, int branch)
     
    void
    visitTableSwitchInsn(int min, int max, org.objectweb.asm.Label dflt, org.objectweb.asm.Label... labels)
     
    void
    visitTableSwitchInsnWithProbes(int min, int max, org.objectweb.asm.Label dflt, org.objectweb.asm.Label[] labels, IFrame frame)
    Visits a TABLESWITCH instruction with optional probes for each target label.
    void
    visitTypeInsn(int opcode, String type)
     
    void
    visitVarInsn(int opcode, int var)
     

    Methods inherited from class org.objectweb.asm.MethodVisitor

    getDelegate, visitAnnotableParameterCount, visitAnnotation, visitAnnotationDefault, visitAttribute, visitCode, visitEnd, visitFrame, visitInsnAnnotation, visitLocalVariable, visitLocalVariableAnnotation, visitMaxs, visitMethodInsn, visitParameter, visitParameterAnnotation, visitTryCatchAnnotation, visitTryCatchBlock, visitTypeAnnotation

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • builder

      private final InstructionsBuilder builder
    • currentNode

      private org.objectweb.asm.tree.AbstractInsnNode currentNode
      Current node of the ASM tree API
  • Constructor Details

    • MethodAnalyzer

      MethodAnalyzer(InstructionsBuilder builder)
      New instance that uses the given builder.
  • Method Details

    • accept

      public void accept(org.objectweb.asm.tree.MethodNode methodNode, org.objectweb.asm.MethodVisitor methodVisitor)
      Description copied from class: MethodProbesVisitor
      This method can be overwritten to hook into the process of emitting the instructions of this method as visitX() events.
      Overrides:
      accept in class MethodProbesVisitor
      Parameters:
      methodNode - the content to emit
      methodVisitor - A visitor to emit the content to. Note that this is not necessarily this visitor instance but some wrapper which calculates the probes.
    • visitLabel

      public void visitLabel(org.objectweb.asm.Label label)
      Overrides:
      visitLabel in class org.objectweb.asm.MethodVisitor
    • visitLineNumber

      public void visitLineNumber(int line, org.objectweb.asm.Label start)
      Overrides:
      visitLineNumber in class org.objectweb.asm.MethodVisitor
    • visitInsn

      public void visitInsn(int opcode)
      Overrides:
      visitInsn in class org.objectweb.asm.MethodVisitor
    • visitIntInsn

      public void visitIntInsn(int opcode, int operand)
      Overrides:
      visitIntInsn in class org.objectweb.asm.MethodVisitor
    • visitVarInsn

      public void visitVarInsn(int opcode, int var)
      Overrides:
      visitVarInsn in class org.objectweb.asm.MethodVisitor
    • visitTypeInsn

      public void visitTypeInsn(int opcode, String type)
      Overrides:
      visitTypeInsn in class org.objectweb.asm.MethodVisitor
    • visitFieldInsn

      public void visitFieldInsn(int opcode, String owner, String name, String desc)
      Overrides:
      visitFieldInsn in class org.objectweb.asm.MethodVisitor
    • visitMethodInsn

      public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf)
      Overrides:
      visitMethodInsn in class org.objectweb.asm.MethodVisitor
    • visitInvokeDynamicInsn

      public void visitInvokeDynamicInsn(String name, String desc, org.objectweb.asm.Handle bsm, Object... bsmArgs)
      Overrides:
      visitInvokeDynamicInsn in class org.objectweb.asm.MethodVisitor
    • visitJumpInsn

      public void visitJumpInsn(int opcode, org.objectweb.asm.Label label)
      Overrides:
      visitJumpInsn in class org.objectweb.asm.MethodVisitor
    • visitLdcInsn

      public void visitLdcInsn(Object cst)
      Overrides:
      visitLdcInsn in class org.objectweb.asm.MethodVisitor
    • visitIincInsn

      public void visitIincInsn(int var, int increment)
      Overrides:
      visitIincInsn in class org.objectweb.asm.MethodVisitor
    • visitTableSwitchInsn

      public void visitTableSwitchInsn(int min, int max, org.objectweb.asm.Label dflt, org.objectweb.asm.Label... labels)
      Overrides:
      visitTableSwitchInsn in class org.objectweb.asm.MethodVisitor
    • visitLookupSwitchInsn

      public void visitLookupSwitchInsn(org.objectweb.asm.Label dflt, int[] keys, org.objectweb.asm.Label[] labels)
      Overrides:
      visitLookupSwitchInsn in class org.objectweb.asm.MethodVisitor
    • visitSwitchInsn

      private void visitSwitchInsn(org.objectweb.asm.Label dflt, org.objectweb.asm.Label[] labels)
    • visitMultiANewArrayInsn

      public void visitMultiANewArrayInsn(String desc, int dims)
      Overrides:
      visitMultiANewArrayInsn in class org.objectweb.asm.MethodVisitor
    • visitProbe

      public void visitProbe(int probeId)
      Description copied from class: MethodProbesVisitor
      Visits an unconditional probe that should be inserted at the current position.
      Overrides:
      visitProbe in class MethodProbesVisitor
      Parameters:
      probeId - id of the probe to insert
    • visitJumpInsnWithProbe

      public void visitJumpInsnWithProbe(int opcode, org.objectweb.asm.Label label, int probeId, IFrame frame)
      Description copied from class: MethodProbesVisitor
      Visits a jump instruction. A probe with the given id should be inserted in a way that it is executed only when the jump to the given label is executed.
      Overrides:
      visitJumpInsnWithProbe in class MethodProbesVisitor
      Parameters:
      opcode - the opcode of the type instruction to be visited. This opcode is either IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ, IF_ACMPNE, GOTO, IFNULL or IFNONNULL.
      label - the operand of the instruction to be visited. This operand is a label that designates the instruction to which the jump instruction may jump.
      probeId - id of the probe
      frame - stackmap frame status after the execution of the jump instruction. The instance is only valid with the call of this method.
      See Also:
      • MethodVisitor.visitJumpInsn(int, Label)
    • visitInsnWithProbe

      public void visitInsnWithProbe(int opcode, int probeId)
      Description copied from class: MethodProbesVisitor
      Visits a zero operand instruction with a probe. This event is used only for instructions that terminate the method. Therefore the probe must be inserted before the actual instruction.
      Overrides:
      visitInsnWithProbe in class MethodProbesVisitor
      Parameters:
      opcode - the opcode of the instruction to be visited. This opcode is either IRETURN, LRETURN, FRETURN, DRETURN, ARETURN, RETURN or ATHROW.
      probeId - id of the probe
      See Also:
      • MethodVisitor.visitInsn(int)
    • visitTableSwitchInsnWithProbes

      public void visitTableSwitchInsnWithProbes(int min, int max, org.objectweb.asm.Label dflt, org.objectweb.asm.Label[] labels, IFrame frame)
      Description copied from class: MethodProbesVisitor
      Visits a TABLESWITCH instruction with optional probes for each target label. Implementations can be optimized based on the fact that the same target labels will always have the same probe id within a call to this method. The probe id for each label can be obtained with LabelInfo.getProbeId(Label).
      Overrides:
      visitTableSwitchInsnWithProbes in class MethodProbesVisitor
      Parameters:
      min - the minimum key value.
      max - the maximum key value.
      dflt - beginning of the default handler block.
      labels - beginnings of the handler blocks. labels[i] is the beginning of the handler block for the min + i key.
      frame - stackmap frame status after the execution of the switch instruction. The instance is only valid with the call of this method.
      See Also:
      • MethodVisitor.visitTableSwitchInsn(int, int, Label, Label[])
    • visitLookupSwitchInsnWithProbes

      public void visitLookupSwitchInsnWithProbes(org.objectweb.asm.Label dflt, int[] keys, org.objectweb.asm.Label[] labels, IFrame frame)
      Description copied from class: MethodProbesVisitor
      Visits a LOOKUPSWITCH instruction with optional probes for each target label. Implementations can be optimized based on the fact that the same target labels will always have the same probe id within a call to this method. The probe id for each label can be obtained with LabelInfo.getProbeId(Label).
      Overrides:
      visitLookupSwitchInsnWithProbes in class MethodProbesVisitor
      Parameters:
      dflt - beginning of the default handler block.
      keys - the values of the keys.
      labels - beginnings of the handler blocks. labels[i] is the beginning of the handler block for the keys[i] key.
      frame - stackmap frame status after the execution of the switch instruction. The instance is only valid with the call of this method.
      See Also:
      • MethodVisitor.visitLookupSwitchInsn(Label, int[], Label[])
    • visitSwitchInsnWithProbes

      private void visitSwitchInsnWithProbes(org.objectweb.asm.Label dflt, org.objectweb.asm.Label[] labels)
    • visitSwitchTarget

      private void visitSwitchTarget(org.objectweb.asm.Label label, int branch)