org.objectweb.asm.commons

## Class JSRInlinerAdapter

- java.lang.Object
- - org.objectweb.asm.MethodVisitor
  - - org.objectweb.asm.tree.MethodNode
    - - org.objectweb.asm.commons.JSRInlinerAdapter

- All Implemented Interfaces:
    Opcodes

      public class JSRInlinerAdapter
      extends MethodNode
      implements Opcodes

  A `MethodVisitor` that removes JSR instructions and inlines the referenced subroutines. Explanation of how it works TODO
  Author:
    Niko Matsakis

- - ### Field Summary

    - ### Fields inherited from class org.objectweb.asm.tree.MethodNode

      `access, annotationDefault, attrs, desc, exceptions, instructions, invisibleAnnotations, invisibleLocalVariableAnnotations, invisibleParameterAnnotations, invisibleTypeAnnotations, localVariables, maxLocals, maxStack, name, parameters, signature, tryCatchBlocks, visibleAnnotations, visibleLocalVariableAnnotations, visibleParameterAnnotations, visibleTypeAnnotations`

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

      `api, 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_MANDATED, 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, ASM4, ASM5, 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, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, 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, 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, V1_8`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `JSRInlinerAdapter(int api, MethodVisitor mv, int access, String name, String desc, String signature, String[] exceptions)` Creates a new JSRInliner.
    `` | `JSRInlinerAdapter(MethodVisitor mv, int access, String name, String desc, String signature, String[] exceptions)` Creates a new JSRInliner.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `visitEnd()` If any JSRs were seen, triggers the inlining process.
    `void` | `visitJumpInsn(int opcode, Label lbl)` Detects a JSR instruction and sets a flag to indicate we will need to do inlining.

    - ### Methods inherited from class org.objectweb.asm.tree.MethodNode

      `accept, accept, check, getLabelNode, visitAnnotation, visitAnnotationDefault, visitAttribute, visitCode, visitFieldInsn, visitFrame, visitIincInsn, visitInsn, visitInsnAnnotation, visitIntInsn, visitInvokeDynamicInsn, visitLabel, visitLdcInsn, visitLineNumber, visitLocalVariable, visitLocalVariableAnnotation, visitLookupSwitchInsn, visitMaxs, visitMethodInsn, visitMethodInsn, visitMultiANewArrayInsn, visitParameter, visitParameterAnnotation, visitTableSwitchInsn, visitTryCatchAnnotation, visitTryCatchBlock, visitTypeAnnotation, visitTypeInsn, visitVarInsn`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### JSRInlinerAdapter

          public JSRInlinerAdapter(MethodVisitor mv,
                                   int access,
                                   String name,
                                   String desc,
                                   String signature,
                                   String[] exceptions)

      Creates a new JSRInliner. Subclasses must not use this constructor. Instead, they must use the `JSRInlinerAdapter(int, MethodVisitor, int, String, String, String, String[])` version.
      Parameters:
        `mv` - the `MethodVisitor` to send the resulting inlined method code to (use `null` for none).
        `access` - the method's access flags (see `Opcodes`). This parameter also indicates if the method is synthetic and/or deprecated.
        `name` - the method's name.
        `desc` - the method's descriptor (see `Type`).
        `signature` - the method's signature. May be `null`.
        `exceptions` - the internal names of the method's exception classes (see `getInternalName`). May be `null`.
      Throws:
        `IllegalStateException` - If a subclass calls this constructor.

    - #### JSRInlinerAdapter

          protected JSRInlinerAdapter(int api,
                                      MethodVisitor mv,
                                      int access,
                                      String name,
                                      String desc,
                                      String signature,
                                      String[] exceptions)

      Creates a new JSRInliner.
      Parameters:
        `api` - the ASM API version implemented by this visitor. Must be one of `Opcodes.ASM4` or `Opcodes.ASM5`.
        `mv` - the `MethodVisitor` to send the resulting inlined method code to (use `null` for none).
        `access` - the method's access flags (see `Opcodes`). This parameter also indicates if the method is synthetic and/or deprecated.
        `name` - the method's name.
        `desc` - the method's descriptor (see `Type`).
        `signature` - the method's signature. May be `null`.
        `exceptions` - the internal names of the method's exception classes (see `getInternalName`). May be `null`.

  - ### Method Detail

    - #### visitJumpInsn

          public void visitJumpInsn(int opcode,
                                    Label lbl)

      Detects a JSR instruction and sets a flag to indicate we will need to do inlining.
      Overrides:
        `visitJumpInsn` in class `MethodNode`
      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, JSR, IFNULL or IFNONNULL.
        `lbl` - the operand of the instruction to be visited. This operand is a label that designates the instruction to which the jump instruction may jump.

    - #### visitEnd

          public void visitEnd()

      If any JSRs were seen, triggers the inlining process. Otherwise, forwards the byte codes untouched.
      Overrides:
        `visitEnd` in class `MethodNode`