Package 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:
org.objectweb.asm.Opcodes
public class JSRInlinerAdapter extends org.objectweb.asm.tree.MethodNode implements org.objectweb.asm.OpcodesAMethodVisitorthat 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 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 protectedJSRInlinerAdapter(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 newJSRInlinerAdapter.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 newJSRInlinerAdapter.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidsetComputeLimits(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.voidvisitEnd()voidvisitJumpInsn(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
-
-
-
-
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 newJSRInlinerAdapter. Subclasses must not use this constructor. Instead, they must use theJSRInlinerAdapter(int, MethodVisitor, int, String, String, String, String[])version.- Parameters:
methodVisitor- the method visitor to send the resulting inlined method code to, ornull.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 (seeType.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 newJSRInlinerAdapter.- Parameters:
api- the ASM API version implemented by this visitor. Must be one of theASMx values inOpcodes.methodVisitor- the method visitor to send the resulting inlined method code to, ornull.access- the method's access flags (seeOpcodes). 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 (seeType.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 aLimitExceededExceptionon 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:
visitJumpInsnin classorg.objectweb.asm.tree.MethodNode
-
visitEnd
public void visitEnd()
- Overrides:
visitEndin classorg.objectweb.asm.tree.MethodNode
-
-