Class JSRInlinerAdapter

  • All Implemented Interfaces:
    org.objectweb.asm.Opcodes

    public class JSRInlinerAdapter
    extends org.objectweb.asm.tree.MethodNode
    implements org.objectweb.asm.Opcodes
    A MethodVisitor that removes JSR instructions and inlines the referenced subroutines.
    Author:
    Niko Matsakis
    • Field Summary

      • Fields inherited from class org.objectweb.asm.tree.MethodNode

        access, annotationDefault, attrs, desc, exceptions, instructions, invisibleAnnotableParameterCount, invisibleAnnotations, invisibleLocalVariableAnnotations, invisibleParameterAnnotations, invisibleTypeAnnotations, localVariables, maxLocals, maxStack, name, parameters, signature, tryCatchBlocks, visibleAnnotableParameterCount, 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_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, 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, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V9
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected JSRInlinerAdapter​(int api, org.objectweb.asm.MethodVisitor methodVisitor, int access, java.lang.String name, java.lang.String descriptor, java.lang.String signature, java.lang.String[] exceptions)
      Constructs a new JSRInlinerAdapter.
        JSRInlinerAdapter​(org.objectweb.asm.MethodVisitor methodVisitor, int access, java.lang.String name, java.lang.String descriptor, java.lang.String signature, java.lang.String[] exceptions)
      Constructs a new JSRInlinerAdapter.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void setComputeLimits​(int maxBytes, long maxOperations)
      Sets the maximum number of bytes which can be allocated, and the maximum number of "operations" which can be performed, to inline the subroutines.
      void visitEnd()  
      void visitJumpInsn​(int opcode, org.objectweb.asm.Label label)  
      • Methods inherited from class org.objectweb.asm.tree.MethodNode

        accept, accept, check, getLabelNode, visitAnnotableParameterCount, visitAnnotation, visitAnnotationDefault, visitAttribute, visitCode, visitFieldInsn, visitFrame, visitIincInsn, visitInsn, visitInsnAnnotation, visitIntInsn, visitInvokeDynamicInsn, visitLabel, visitLdcInsn, visitLineNumber, visitLocalVariable, visitLocalVariableAnnotation, visitLookupSwitchInsn, visitMaxs, visitMethodInsn, visitMultiANewArrayInsn, visitParameter, visitParameterAnnotation, visitTableSwitchInsn, visitTryCatchAnnotation, visitTryCatchBlock, visitTypeAnnotation, visitTypeInsn, visitVarInsn
      • Methods inherited from class org.objectweb.asm.MethodVisitor

        getDelegate, visitMethodInsn
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • JSRInlinerAdapter

        public JSRInlinerAdapter​(org.objectweb.asm.MethodVisitor methodVisitor,
                                 int access,
                                 java.lang.String name,
                                 java.lang.String descriptor,
                                 java.lang.String signature,
                                 java.lang.String[] exceptions)
        Constructs a new JSRInlinerAdapter. Subclasses must not use this constructor. Instead, they must use the JSRInlinerAdapter(int, MethodVisitor, int, String, String, String, String[]) version.
        Parameters:
        methodVisitor - the method visitor to send the resulting inlined method code to, or null.
        access - the method's access flags.
        name - the method's name.
        descriptor - the method's descriptor.
        signature - the method's signature. May be null.
        exceptions - the internal names of the method's exception classes (see Type.getInternalName()). May be null.
        Throws:
        java.lang.IllegalStateException - if a subclass calls this constructor.
      • JSRInlinerAdapter

        protected JSRInlinerAdapter​(int api,
                                    org.objectweb.asm.MethodVisitor methodVisitor,
                                    int access,
                                    java.lang.String name,
                                    java.lang.String descriptor,
                                    java.lang.String signature,
                                    java.lang.String[] exceptions)
        Constructs a new JSRInlinerAdapter.
        Parameters:
        api - the ASM API version implemented by this visitor. Must be one of the ASMx values in Opcodes.
        methodVisitor - the method visitor to send the resulting inlined method code to, or null.
        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.
        descriptor - the method's descriptor.
        signature - the method's signature. May be null.
        exceptions - the internal names of the method's exception classes (see Type.getInternalName()). May be null.
    • Method Detail

      • setComputeLimits

        public void setComputeLimits​(int maxBytes,
                                     long maxOperations)
        Sets the maximum number of bytes which can be allocated, and the maximum number of "operations" which can be performed, to inline the subroutines. Operations are not formally defined but their total number is deterministic and approximatively proportional to the computation time.

        The default limits should be sufficient for any "normal" class. You only need to set new limits if visitEnd() throws a LimitExceededException on some of your classes.

        Parameters:
        maxBytes - the maximum number of bytes which can be allocated. Not all object instantiations are tracked (and garbage collection is ignored), but the most important ones are. The default value is 20MB.
        maxOperations - the maximum number of "operations" that can be performed. The default value is 100M.
      • visitJumpInsn

        public void visitJumpInsn​(int opcode,
                                  org.objectweb.asm.Label label)
        Overrides:
        visitJumpInsn in class org.objectweb.asm.tree.MethodNode
      • visitEnd

        public void visitEnd()
        Overrides:
        visitEnd in class org.objectweb.asm.tree.MethodNode