org.objectweb.asm.commons

Class JSRInlinerAdapter

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

Nested Class Summary

protected static class
JSRInlinerAdapter.Subroutine

Field Summary

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

access, annotationDefault, desc, exceptions, instructions, invisibleParameterAnnotations, localVariables, maxLocals, maxStack, name, signature, tryCatchBlocks, visibleParameterAnnotations

Fields inherited from class org.objectweb.asm.tree.MemberNode

attrs, invisibleAnnotations, visibleAnnotations

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_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, DUP2, DUP2_X1, DUP2_X2, DUP_X1, DUP_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, 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, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, 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, TABLESWITCH, TOP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6

Constructor Summary

JSRInlinerAdapter(MethodVisitor mv, int access, String name, String desc, String signature, String[] exceptions)
Creates a new JSRInliner.

Method Summary

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, getLabelNode, visitAnnotationDefault, visitCode, visitFieldInsn, visitFrame, visitIincInsn, visitInsn, visitIntInsn, visitJumpInsn, visitLabel, visitLdcInsn, visitLineNumber, visitLocalVariable, visitLookupSwitchInsn, visitMaxs, visitMethodInsn, visitMultiANewArrayInsn, visitParameterAnnotation, visitTableSwitchInsn, visitTryCatchBlock, visitTypeInsn, visitVarInsn

Methods inherited from class org.objectweb.asm.tree.MemberNode

visitAnnotation, visitAttribute, visitEnd

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

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 interface MemberNode

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 interface MethodNode