Package org.jacoco.core.internal.analysis

## 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 `Instruction`s of a method to calculate the detailed execution status.

### Field Summary

### Fields inherited from class org.objectweb.asm.MethodVisitor

`api, mv`

### Method Summary

All Methods Instance Methods Concrete Methods
`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, java.lang.String owner, java.lang.String name, java.lang.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​(java.lang.String name, java.lang.String desc, org.objectweb.asm.Handle bsm, java.lang.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` `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` `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, java.lang.String owner, java.lang.String name, java.lang.String desc, boolean itf)`
`void` `visitMultiANewArrayInsn​(java.lang.String desc, int dims)`
`void` `visitProbe​(int probeId)` Visits an unconditional probe that should be inserted at the current position.
`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, java.lang.String type)`
`void` `visitVarInsn​(int opcode, int var)`

### Methods inherited from class org.objectweb.asm.MethodVisitor

`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`

### Method Detail

#### 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,
                              java.lang.String type)

Overrides:
  `visitTypeInsn` in class `org.objectweb.asm.MethodVisitor`

#### visitFieldInsn

    public void visitFieldInsn​(int opcode,
                               java.lang.String owner,
                               java.lang.String name,
                               java.lang.String desc)

Overrides:
  `visitFieldInsn` in class `org.objectweb.asm.MethodVisitor`

#### visitMethodInsn

    public void visitMethodInsn​(int opcode,
                                java.lang.String owner,
                                java.lang.String name,
                                java.lang.String desc,
                                boolean itf)

Overrides:
  `visitMethodInsn` in class `org.objectweb.asm.MethodVisitor`

#### visitInvokeDynamicInsn

    public void visitInvokeDynamicInsn​(java.lang.String name,
                                       java.lang.String desc,
                                       org.objectweb.asm.Handle bsm,
                                       java.lang.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​(java.lang.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`

#### visitMultiANewArrayInsn

    public void visitMultiANewArrayInsn​(java.lang.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[])`