Class JSRInlinerAdapter

All Implemented Interfaces:
MethodVisitor, Opcodes

public class JSRInlinerAdapter extends MethodNode implements Opcodes
A MethodAdapter that removes JSR instructions and inlines the referenced subroutines. Explanation of how it works TODO
Author:
Niko Matsakis
  • Constructor Details

    • JSRInlinerAdapter

      public JSRInlinerAdapter(MethodVisitor mv, int access, String name, String desc, String signature, String[] exceptions)
      Creates a new JSRInliner.
      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.
  • Method Details

    • visitJumpInsn

      public void visitJumpInsn(int opcode, Label lbl)
      Detects a JSR instruction and sets a flag to indicate we will need to do inlining.
      Specified by:
      visitJumpInsn in interface MethodVisitor
      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.
      Specified by:
      visitEnd in interface MethodVisitor
      Overrides:
      visitEnd in class MemberNode