public abstract class PrintCodeVisitor extends java.lang.Object implements CodeVisitor
buf buffer, calls the
corresponding printXXX method, and then adds the buffer's
content to the text list. In order to provide a concrete
print code visitor, one must implement the printXXX methods
in a sub class of this class. Each method should print the instructions it
visits in buf.| Modifier and Type | Field and Description |
|---|---|
protected java.lang.StringBuffer |
buf
A buffer used to convert instructions to strings.
|
static java.lang.String[] |
OPCODES
The names of the Java Virtual Machine opcodes.
|
protected java.util.List |
text
The text to be printed.
|
| Modifier | Constructor and Description |
|---|---|
protected |
PrintCodeVisitor()
Constructs a new
PrintCodeVisitor object. |
| Modifier and Type | Method and Description |
|---|---|
java.util.List |
getText()
Returns the code printed by this code visitor.
|
abstract void |
printAttribute(Attribute attr)
Prints a non standard code attribute.
|
abstract void |
printFieldInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String desc)
Prints a field instruction.
|
abstract void |
printIincInsn(int var,
int increment)
Prints an IINC instruction.
|
abstract void |
printInsn(int opcode)
Prints a zero operand instruction.
|
abstract void |
printIntInsn(int opcode,
int operand)
Prints an instruction with a single int operand.
|
abstract void |
printJumpInsn(int opcode,
Label label)
Prints a jump instruction.
|
abstract void |
printLabel(Label label)
Prints a label.
|
abstract void |
printLdcInsn(java.lang.Object cst)
Prints a LDC instruction.
|
abstract void |
printLineNumber(int line,
Label start)
Prints a line number declaration.
|
abstract void |
printLocalVariable(java.lang.String name,
java.lang.String desc,
Label start,
Label end,
int index)
Prints a local variable declaration.
|
abstract void |
printLookupSwitchInsn(Label dflt,
int[] keys,
Label[] labels)
Prints a LOOKUPSWITCH instruction.
|
abstract void |
printMaxs(int maxStack,
int maxLocals)
Prints the maximum stack size and the maximum number of local variables of
the method.
|
abstract void |
printMethodInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String desc)
Prints a method instruction.
|
abstract void |
printMultiANewArrayInsn(java.lang.String desc,
int dims)
Prints a MULTIANEWARRAY instruction.
|
abstract void |
printTableSwitchInsn(int min,
int max,
Label dflt,
Label[] labels)
Prints a TABLESWITCH instruction.
|
abstract void |
printTryCatchBlock(Label start,
Label end,
Label handler,
java.lang.String type)
Prints a try catch block.
|
abstract void |
printTypeInsn(int opcode,
java.lang.String desc)
Prints a type instruction.
|
abstract void |
printVarInsn(int opcode,
int var)
Prints a local variable instruction.
|
void |
visitAttribute(Attribute attr)
Visits a non standard attribute of the code.
|
void |
visitFieldInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String desc)
Visits a field instruction.
|
void |
visitIincInsn(int var,
int increment)
Visits an IINC instruction.
|
void |
visitInsn(int opcode)
Visits a zero operand instruction.
|
void |
visitIntInsn(int opcode,
int operand)
Visits an instruction with a single int operand.
|
void |
visitJumpInsn(int opcode,
Label label)
Visits a jump instruction.
|
void |
visitLabel(Label label)
Visits a label.
|
void |
visitLdcInsn(java.lang.Object cst)
Visits a LDC instruction.
|
void |
visitLineNumber(int line,
Label start)
Visits a line number declaration.
|
void |
visitLocalVariable(java.lang.String name,
java.lang.String desc,
Label start,
Label end,
int index)
Visits a local variable declaration.
|
void |
visitLookupSwitchInsn(Label dflt,
int[] keys,
Label[] labels)
Visits a LOOKUPSWITCH instruction.
|
void |
visitMaxs(int maxStack,
int maxLocals)
Visits the maximum stack size and the maximum number of local variables of
the method.
|
void |
visitMethodInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String desc)
Visits a method instruction.
|
void |
visitMultiANewArrayInsn(java.lang.String desc,
int dims)
Visits a MULTIANEWARRAY instruction.
|
void |
visitTableSwitchInsn(int min,
int max,
Label dflt,
Label[] labels)
Visits a TABLESWITCH instruction.
|
void |
visitTryCatchBlock(Label start,
Label end,
Label handler,
java.lang.String type)
Visits a try catch block.
|
void |
visitTypeInsn(int opcode,
java.lang.String desc)
Visits a type instruction.
|
void |
visitVarInsn(int opcode,
int var)
Visits a local variable instruction.
|
protected final java.util.List text
text.protected final java.lang.StringBuffer buf
public static final java.lang.String[] OPCODES
protected PrintCodeVisitor()
PrintCodeVisitor object.public void visitInsn(int opcode)
CodeVisitorvisitInsn in interface CodeVisitoropcode - the opcode of the instruction to be visited. This opcode is
either NOP, ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1, ICONST_2,
ICONST_3, ICONST_4, ICONST_5, LCONST_0, LCONST_1, FCONST_0, FCONST_1,
FCONST_2, DCONST_0, DCONST_1,
IALOAD, LALOAD, FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD,
IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE,
SASTORE,
POP, POP2, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP,
IADD, LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL,
DMUL, IDIV, LDIV, FDIV, DDIV, IREM, LREM, FREM, DREM, INEG, LNEG,
FNEG, DNEG, ISHL, LSHL, ISHR, LSHR, IUSHR, LUSHR, IAND, LAND, IOR,
LOR, IXOR, LXOR,
I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B, I2C,
I2S,
LCMP, FCMPL, FCMPG, DCMPL, DCMPG,
IRETURN, LRETURN, FRETURN, DRETURN, ARETURN, RETURN,
ARRAYLENGTH,
ATHROW,
MONITORENTER, or MONITOREXIT.public void visitIntInsn(int opcode,
int operand)
CodeVisitorvisitIntInsn in interface CodeVisitoropcode - the opcode of the instruction to be visited. This opcode is
either BIPUSH, SIPUSH or NEWARRAY.operand - the operand of the instruction to be visited.public void visitVarInsn(int opcode,
int var)
CodeVisitorvisitVarInsn in interface CodeVisitoropcode - the opcode of the local variable instruction to be visited.
This opcode is either ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE,
LSTORE, FSTORE, DSTORE, ASTORE or RET.var - the operand of the instruction to be visited. This operand is
the index of a local variable.public void visitTypeInsn(int opcode,
java.lang.String desc)
CodeVisitorvisitTypeInsn in interface CodeVisitoropcode - the opcode of the type instruction to be visited. This opcode
is either NEW, ANEWARRAY, CHECKCAST or INSTANCEOF.desc - the operand of the instruction to be visited. This operand is
must be a fully qualified class name in internal form, or the type
descriptor of an array type (see Type).public void visitFieldInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String desc)
CodeVisitorvisitFieldInsn in interface CodeVisitoropcode - the opcode of the type instruction to be visited. This opcode
is either GETSTATIC, PUTSTATIC, GETFIELD or PUTFIELD.owner - the internal name of the field's owner class (see getInternalName).name - the field's name.desc - the field's descriptor (see Type).public void visitMethodInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String desc)
CodeVisitorvisitMethodInsn in interface CodeVisitoropcode - the opcode of the type instruction to be visited. This opcode
is either INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC or
INVOKEINTERFACE.owner - the internal name of the method's owner class (see getInternalName).name - the method's name.desc - the method's descriptor (see Type).public void visitJumpInsn(int opcode,
Label label)
CodeVisitorvisitJumpInsn in interface CodeVisitoropcode - 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.label - the operand of the instruction to be visited. This operand is
a label that designates the instruction to which the jump instruction
may jump.public void visitLabel(Label label)
CodeVisitorvisitLabel in interface CodeVisitorlabel - a Label object.public void visitLdcInsn(java.lang.Object cst)
CodeVisitorvisitLdcInsn in interface CodeVisitorcst - the constant to be loaded on the stack. This parameter must be
a non null Integer, a Float, a Long, a Double a String (or a Type for
.class constants, for classes whose version is 49.0 or more).public void visitIincInsn(int var,
int increment)
CodeVisitorvisitIincInsn in interface CodeVisitorvar - index of the local variable to be incremented.increment - amount to increment the local variable by.public void visitTableSwitchInsn(int min,
int max,
Label dflt,
Label[] labels)
CodeVisitorvisitTableSwitchInsn in interface CodeVisitormin - the minimum key value.max - the maximum key value.dflt - beginning of the default handler block.labels - beginnings of the handler blocks. labels[i] is the
beginning of the handler block for the min + i key.public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels)
CodeVisitorvisitLookupSwitchInsn in interface CodeVisitordflt - beginning of the default handler block.keys - the values of the keys.labels - beginnings of the handler blocks. labels[i] is the
beginning of the handler block for the keys[i] key.public void visitMultiANewArrayInsn(java.lang.String desc,
int dims)
CodeVisitorvisitMultiANewArrayInsn in interface CodeVisitordesc - an array type descriptor (see Type).dims - number of dimensions of the array to allocate.public void visitTryCatchBlock(Label start, Label end, Label handler, java.lang.String type)
CodeVisitorvisitTryCatchBlock in interface CodeVisitorstart - beginning of the exception handler's scope (inclusive).end - end of the exception handler's scope (exclusive).handler - beginning of the exception handler's code.type - internal name of the type of exceptions handled by the handler,
or null to catch any exceptions (for "finally" blocks).public void visitMaxs(int maxStack,
int maxLocals)
CodeVisitorvisitMaxs in interface CodeVisitormaxStack - maximum stack size of the method.maxLocals - maximum number of local variables for the method.public void visitLocalVariable(java.lang.String name,
java.lang.String desc,
Label start,
Label end,
int index)
CodeVisitorvisitLocalVariable in interface CodeVisitorname - the name of a local variable.desc - the type descriptor of this local variable.start - the first instruction corresponding to the scope of this
local variable (inclusive).end - the last instruction corresponding to the scope of this
local variable (exclusive).index - the local variable's index.public void visitLineNumber(int line,
Label start)
CodeVisitorvisitLineNumber in interface CodeVisitorline - a line number. This number refers to the source file
from which the class was compiled.start - the first instruction corresponding to this line number.public void visitAttribute(Attribute attr)
CodeVisitorvisitAttribute in interface CodeVisitorattr - a non standard code attribute. Must not be null.public java.util.List getText()
text.public abstract void printInsn(int opcode)
opcode - the opcode of the instruction to be printed. This opcode is
either NOP, ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1, ICONST_2,
ICONST_3, ICONST_4, ICONST_5, LCONST_0, LCONST_1, FCONST_0, FCONST_1,
FCONST_2, DCONST_0, DCONST_1,
IALOAD, LALOAD, FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD,
IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE,
SASTORE,
POP, POP2, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP,
IADD, LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL,
DMUL, IDIV, LDIV, FDIV, DDIV, IREM, LREM, FREM, DREM, INEG, LNEG,
FNEG, DNEG, ISHL, LSHL, ISHR, LSHR, IUSHR, LUSHR, IAND, LAND, IOR,
LOR, IXOR, LXOR,
I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B, I2C,
I2S,
LCMP, FCMPL, FCMPG, DCMPL, DCMPG,
IRETURN, LRETURN, FRETURN, DRETURN, ARETURN, RETURN,
ARRAYLENGTH,
ATHROW,
MONITORENTER, or MONITOREXIT.public abstract void printIntInsn(int opcode,
int operand)
opcode - the opcode of the instruction to be printed. This opcode is
either BIPUSH, SIPUSH or NEWARRAY.operand - the operand of the instruction to be printed.public abstract void printVarInsn(int opcode,
int var)
opcode - the opcode of the local variable instruction to be printed.
This opcode is either ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE,
LSTORE, FSTORE, DSTORE, ASTORE or RET.var - the operand of the instruction to be printed. This operand is
the index of a local variable.public abstract void printTypeInsn(int opcode,
java.lang.String desc)
opcode - the opcode of the type instruction to be printed. This opcode
is either NEW, ANEWARRAY, CHECKCAST or INSTANCEOF.desc - the operand of the instruction to be printed. This operand is
must be a fully qualified class name in internal form, or a the type
descriptor of an array type (see Type).public abstract void printFieldInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String desc)
opcode - the opcode of the type instruction to be printed. This opcode
is either GETSTATIC, PUTSTATIC, GETFIELD or PUTFIELD.owner - the internal name of the field's owner class (see getInternalName).name - the field's name.desc - the field's descriptor (see Type).public abstract void printMethodInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String desc)
opcode - the opcode of the type instruction to be printed. This opcode
is either INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC or
INVOKEINTERFACE.owner - the internal name of the method's owner class (see getInternalName).name - the method's name.desc - the method's descriptor (see Type).public abstract void printJumpInsn(int opcode,
Label label)
opcode - the opcode of the type instruction to be printed. 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.label - the operand of the instruction to be printed. This operand is
a label that designates the instruction to which the jump instruction
may jump.public abstract void printLabel(Label label)
label - a Label object.public abstract void printLdcInsn(java.lang.Object cst)
cst - the constant to be loaded on the stack. This parameter must be
a non null Integer, a Float, a Long, a Double or a String.public abstract void printIincInsn(int var,
int increment)
var - index of the local variable to be incremented.increment - amount to increment the local variable by.public abstract void printTableSwitchInsn(int min,
int max,
Label dflt,
Label[] labels)
min - the minimum key value.max - the maximum key value.dflt - beginning of the default handler block.labels - beginnings of the handler blocks. labels[i] is the
beginning of the handler block for the min + i key.public abstract void printLookupSwitchInsn(Label dflt, int[] keys, Label[] labels)
dflt - beginning of the default handler block.keys - the values of the keys.labels - beginnings of the handler blocks. labels[i] is the
beginning of the handler block for the keys[i] key.public abstract void printMultiANewArrayInsn(java.lang.String desc,
int dims)
desc - an array type descriptor (see Type).dims - number of dimensions of the array to allocate.public abstract void printTryCatchBlock(Label start, Label end, Label handler, java.lang.String type)
start - beginning of the exception handler's scope (inclusive).end - end of the exception handler's scope (exclusive).handler - beginning of the exception handler's code.type - internal name of the type of exceptions handled by the handler,
or null to catch any exceptions (for "finally" blocks).public abstract void printMaxs(int maxStack,
int maxLocals)
maxStack - maximum stack size of the method.maxLocals - maximum number of local variables for the method.public abstract void printLocalVariable(java.lang.String name,
java.lang.String desc,
Label start,
Label end,
int index)
name - the name of a local variable.desc - the type descriptor of this local variable.start - the first instruction corresponding to the scope of this
local variable (inclusive).end - the last instruction corresponding to the scope of this
local variable (exclusive).index - the local variable's index.public abstract void printLineNumber(int line,
Label start)
line - a line number. This number refers to the source file
from which the class was compiled.start - the first instruction corresponding to this line number.public abstract void printAttribute(Attribute attr)
attr - a non standard code attribute.