Class JSRInlinerAdapter
java.lang.Object
org.objectweb.asm.tree.MemberNode
org.objectweb.asm.tree.MethodNode
org.objectweb.asm.commons.JSRInlinerAdapter
- All Implemented Interfaces:
MethodVisitor, Opcodes
A
MethodAdapter that removes JSR instructions and
inlines the referenced subroutines.
Explanation of how it works TODO- Author:
- Niko Matsakis
-
Nested Class Summary
Nested Classes -
Field Summary
Fields inherited from class MethodNode
access, annotationDefault, desc, exceptions, instructions, invisibleParameterAnnotations, localVariables, maxLocals, maxStack, name, signature, tryCatchBlocks, visibleParameterAnnotationsFields inherited from class MemberNode
attrs, invisibleAnnotations, visibleAnnotationsFields inherited from interface Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, 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, 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, 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, INVOKEDYNAMIC_OWNER, 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 -
Constructor Summary
ConstructorsConstructorDescriptionJSRInlinerAdapter(MethodVisitor mv, int access, String name, String desc, String signature, String[] exceptions) Creates a new JSRInliner. -
Method Summary
Modifier and TypeMethodDescriptionvoidvisitEnd()If any JSRs were seen, triggers the inlining process.voidvisitJumpInsn(int opcode, Label lbl) Detects a JSR instruction and sets a flag to indicate we will need to do inlining.Methods inherited from class MethodNode
accept, accept, getLabelNode, visitAnnotationDefault, visitCode, visitFieldInsn, visitFrame, visitIincInsn, visitInsn, visitIntInsn, visitLabel, visitLdcInsn, visitLineNumber, visitLocalVariable, visitLookupSwitchInsn, visitMaxs, visitMethodInsn, visitMultiANewArrayInsn, visitParameterAnnotation, visitTableSwitchInsn, visitTryCatchBlock, visitTypeInsn, visitVarInsnMethods inherited from class MemberNode
visitAnnotation, visitAttributeMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface MethodVisitor
visitAnnotation, visitAttribute
-
Constructor Details
-
JSRInlinerAdapter
public JSRInlinerAdapter(MethodVisitor mv, int access, String name, String desc, String signature, String[] exceptions) Creates a new JSRInliner.- Parameters:
mv- theMethodVisitorto send the resulting inlined method code to (usenullfor none).access- the method's access flags (seeOpcodes). This parameter also indicates if the method is synthetic and/or deprecated.name- the method's name.desc- the method's descriptor (seeType).signature- the method's signature. May be null.exceptions- the internal names of the method's exception classes (seegetInternalName). May be null.
-
-
Method Details
-
visitJumpInsn
Detects a JSR instruction and sets a flag to indicate we will need to do inlining.- Specified by:
visitJumpInsnin interfaceMethodVisitor- Overrides:
visitJumpInsnin classMethodNode- 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:
visitEndin interfaceMethodVisitor- Overrides:
visitEndin classMemberNode
-