Modifier and Type | Field and Description |
---|---|
static int |
CLASS_DECLARATION
Constant used in
appendDescriptor for class
signatures, formatted in default Java notation (non-bytecode) |
static int |
CLASS_SIGNATURE
Constant used in
appendDescriptor for class
signatures, formatted in bytecode notation |
static int |
FIELD_DESCRIPTOR
Constant used in
appendDescriptor for field
descriptors, formatted in bytecode notation |
static int |
FIELD_SIGNATURE
Constant used in
appendDescriptor for field
signatures, formatted in bytecode notation |
static int |
HANDLE_DESCRIPTOR
Constant used in
appendDescriptor for handle
descriptors, formatted in bytecode notation |
static int |
INTERNAL_NAME
Constant used in
appendDescriptor for internal
type names in bytecode notation. |
protected Map<Label,String> |
labelNames
The label names.
|
protected String |
ltab
Tab for labels.
|
static int |
METHOD_DESCRIPTOR
Constant used in
appendDescriptor for method
descriptors, formatted in bytecode notation |
static int |
METHOD_SIGNATURE
Constant used in
appendDescriptor for method
signatures, formatted in bytecode notation |
static int |
PARAMETERS_DECLARATION
Constant used in
appendDescriptor for method
parameter signatures, formatted in default Java notation (non-bytecode) |
protected String |
tab
Tab for class members.
|
protected String |
tab2
Tab for bytecode instructions.
|
protected String |
tab3
Tab for table and lookup switch instructions.
|
static int |
TYPE_DECLARATION
Constant used in
appendDescriptor for field or
method return value signatures, formatted in default Java notation
(non-bytecode) |
Modifier | Constructor and Description |
---|---|
|
Textifier()
Constructs a new
Textifier . |
protected |
Textifier(int api)
Constructs a new
Textifier . |
Modifier and Type | Method and Description |
---|---|
protected void |
appendDescriptor(int type,
String desc)
Appends an internal name, a type descriptor or a type signature to
buf . |
protected void |
appendHandle(Handle h)
Appends the information about the given handle to
buf . |
protected void |
appendLabel(Label l)
Appends the name of the given label to
buf . |
protected Textifier |
createTextifier()
Creates a new TraceVisitor instance.
|
static void |
main(String[] args)
Prints a disassembled view of the given class to the standard output.
|
void |
visit(int version,
int access,
String name,
String signature,
String superName,
String[] interfaces)
Class header.
|
void |
visit(String name,
Object value)
Annotation value.
|
Textifier |
visitAnnotation(String desc,
boolean visible)
Prints a disassembled view of the given annotation.
|
Textifier |
visitAnnotation(String name,
String desc)
Nested annotation value.
|
Textifier |
visitAnnotationDefault()
Method default annotation.
|
void |
visitAnnotationEnd()
Annotation end.
|
Textifier |
visitArray(String name)
Annotation array value.
|
void |
visitAttribute(Attribute attr)
Prints a disassembled view of the given attribute.
|
Textifier |
visitClassAnnotation(String desc,
boolean visible)
Class annotation.
|
void |
visitClassAttribute(Attribute attr)
Class attribute.
|
void |
visitClassEnd()
Class end.
|
Printer |
visitClassTypeAnnotation(int typeRef,
TypePath typePath,
String desc,
boolean visible)
Class type annotation.
|
void |
visitCode()
Method start.
|
void |
visitEnum(String name,
String desc,
String value)
Annotation enum value.
|
Textifier |
visitField(int access,
String name,
String desc,
String signature,
Object value)
Class field.
|
Textifier |
visitFieldAnnotation(String desc,
boolean visible)
Field annotation.
|
void |
visitFieldAttribute(Attribute attr)
Field attribute.
|
void |
visitFieldEnd()
Field end.
|
void |
visitFieldInsn(int opcode,
String owner,
String name,
String desc)
Method instruction.
|
Printer |
visitFieldTypeAnnotation(int typeRef,
TypePath typePath,
String desc,
boolean visible)
Field type annotation.
|
void |
visitFrame(int type,
int nLocal,
Object[] local,
int nStack,
Object[] stack)
Method stack frame.
|
void |
visitIincInsn(int var,
int increment)
Method instruction.
|
void |
visitInnerClass(String name,
String outerName,
String innerName,
int access)
Class inner name.
|
void |
visitInsn(int opcode)
Method instruction.
|
Printer |
visitInsnAnnotation(int typeRef,
TypePath typePath,
String desc,
boolean visible)
Instruction type annotation.
|
void |
visitIntInsn(int opcode,
int operand)
Method instruction.
|
void |
visitInvokeDynamicInsn(String name,
String desc,
Handle bsm,
Object... bsmArgs)
Method instruction.
|
void |
visitJumpInsn(int opcode,
Label label)
Method jump instruction.
|
void |
visitLabel(Label label)
Method label.
|
void |
visitLdcInsn(Object cst)
Method instruction.
|
void |
visitLineNumber(int line,
Label start)
Method debug info.
|
void |
visitLocalVariable(String name,
String desc,
String signature,
Label start,
Label end,
int index)
Method debug info.
|
Printer |
visitLocalVariableAnnotation(int typeRef,
TypePath typePath,
Label[] start,
Label[] end,
int[] index,
String desc,
boolean visible)
Local variable type annotation.
|
void |
visitLookupSwitchInsn(Label dflt,
int[] keys,
Label[] labels)
Method instruction.
|
void |
visitMaxs(int maxStack,
int maxLocals)
Method max stack and max locals.
|
Textifier |
visitMethod(int access,
String name,
String desc,
String signature,
String[] exceptions)
Class method.
|
Textifier |
visitMethodAnnotation(String desc,
boolean visible)
Method annotation.
|
void |
visitMethodAttribute(Attribute attr)
Method attribute.
|
void |
visitMethodEnd()
Method end.
|
void |
visitMethodInsn(int opcode,
String owner,
String name,
String desc)
Deprecated.
|
void |
visitMethodInsn(int opcode,
String owner,
String name,
String desc,
boolean itf)
Method instruction.
|
Printer |
visitMethodTypeAnnotation(int typeRef,
TypePath typePath,
String desc,
boolean visible)
Method type annotation.
|
void |
visitMultiANewArrayInsn(String desc,
int dims)
Method instruction.
|
void |
visitOuterClass(String owner,
String name,
String desc)
Class outer class.
|
void |
visitParameter(String name,
int access)
Method parameter.
|
Textifier |
visitParameterAnnotation(int parameter,
String desc,
boolean visible)
Method parameter annotation.
|
void |
visitSource(String file,
String debug)
Class source.
|
void |
visitTableSwitchInsn(int min,
int max,
Label dflt,
Label... labels)
Method instruction.
|
Printer |
visitTryCatchAnnotation(int typeRef,
TypePath typePath,
String desc,
boolean visible)
Try catch block type annotation.
|
void |
visitTryCatchBlock(Label start,
Label end,
Label handler,
String type)
Method exception handler.
|
Textifier |
visitTypeAnnotation(int typeRef,
TypePath typePath,
String desc,
boolean visible)
Prints a disassembled view of the given type annotation.
|
void |
visitTypeInsn(int opcode,
String type)
Method instruction.
|
void |
visitVarInsn(int opcode,
int var)
Method instruction.
|
appendString, getText, print
public static final int INTERNAL_NAME
appendDescriptor
for internal
type names in bytecode notation.public static final int FIELD_DESCRIPTOR
appendDescriptor
for field
descriptors, formatted in bytecode notationpublic static final int FIELD_SIGNATURE
appendDescriptor
for field
signatures, formatted in bytecode notationpublic static final int METHOD_DESCRIPTOR
appendDescriptor
for method
descriptors, formatted in bytecode notationpublic static final int METHOD_SIGNATURE
appendDescriptor
for method
signatures, formatted in bytecode notationpublic static final int CLASS_SIGNATURE
appendDescriptor
for class
signatures, formatted in bytecode notationpublic static final int TYPE_DECLARATION
appendDescriptor
for field or
method return value signatures, formatted in default Java notation
(non-bytecode)public static final int CLASS_DECLARATION
appendDescriptor
for class
signatures, formatted in default Java notation (non-bytecode)public static final int PARAMETERS_DECLARATION
appendDescriptor
for method
parameter signatures, formatted in default Java notation (non-bytecode)public static final int HANDLE_DESCRIPTOR
appendDescriptor
for handle
descriptors, formatted in bytecode notationprotected String tab
protected String tab2
protected String tab3
protected String ltab
public Textifier()
Textifier
. Subclasses must not use this
constructor. Instead, they must use the Textifier(int)
version.IllegalStateException
- If a subclass calls this constructor.protected Textifier(int api)
Textifier
.api
- the ASM API version implemented by this visitor. Must be one
of Opcodes.ASM4
or Opcodes.ASM5
.public static void main(String[] args) throws Exception
Usage: Textifier [-debug] <binary class name or class file name >
args
- the command line arguments.Exception
- if the class cannot be found, or if an IO exception occurs.public void visit(int version, int access, String name, String signature, String superName, String[] interfaces)
Printer
ClassVisitor.visit(int, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])
.visit
in class Printer
version
- the class version.access
- the class's access flags (see Opcodes
). This parameter
also indicates if the class is deprecated.name
- the internal name of the class (see
getInternalName
).signature
- the signature of this class. May be null if the class
is not a generic one, and does not extend or implement generic
classes or interfaces.superName
- the internal of name of the super class (see
getInternalName
).
For interfaces, the super class is Object
. May be
null, but only for the Object
class.interfaces
- the internal names of the class's interfaces (see
getInternalName
).
May be null.public void visitSource(String file, String debug)
Printer
ClassVisitor.visitSource(java.lang.String, java.lang.String)
.visitSource
in class Printer
file
- the name of the source file from which the class was compiled.
May be null.debug
- additional debug information to compute the correspondance
between source and compiled elements of the class. May be
null.public void visitOuterClass(String owner, String name, String desc)
Printer
ClassVisitor.visitOuterClass(java.lang.String, java.lang.String, java.lang.String)
.
Visits the enclosing class of the class. This method must be called only
if the class has an enclosing class.visitOuterClass
in class Printer
owner
- internal name of the enclosing class of the class.name
- the name of the method that contains the class, or
null if the class is not enclosed in a method of its
enclosing class.desc
- the descriptor of the method that contains the class, or
null if the class is not enclosed in a method of its
enclosing class.public Textifier visitClassAnnotation(String desc, boolean visible)
Printer
ClassVisitor.visitAnnotation(java.lang.String, boolean)
.visitClassAnnotation
in class Printer
desc
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.public Printer visitClassTypeAnnotation(int typeRef, TypePath typePath, String desc, boolean visible)
Printer
ClassVisitor.visitTypeAnnotation(int, org.objectweb.asm.TypePath, java.lang.String, boolean)
.visitClassTypeAnnotation
in class Printer
typeRef
- a reference to the annotated type. The sort of this type
reference must be
CLASS_TYPE_PARAMETER
,
CLASS_TYPE_PARAMETER_BOUND
or CLASS_EXTENDS
.
See TypeReference
.typePath
- the path to the annotated type argument, wildcard bound, array
element type, or static inner type within 'typeRef'. May be
null if the annotation targets 'typeRef' as a whole.desc
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.public void visitClassAttribute(Attribute attr)
Printer
ClassVisitor.visitAttribute(org.objectweb.asm.Attribute)
.visitClassAttribute
in class Printer
attr
- an attribute.public void visitInnerClass(String name, String outerName, String innerName, int access)
Printer
ClassVisitor.visitInnerClass(java.lang.String, java.lang.String, java.lang.String, int)
.visitInnerClass
in class Printer
name
- the internal name of an inner class (see
getInternalName
).outerName
- the internal name of the class to which the inner class
belongs (see getInternalName
).
May be null for not member classes.innerName
- the (simple) name of the inner class inside its enclosing
class. May be null for anonymous inner classes.access
- the access flags of the inner class as originally declared in
the enclosing class.public Textifier visitField(int access, String name, String desc, String signature, Object value)
Printer
ClassVisitor.visitField(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object)
.visitField
in class Printer
access
- the field's access flags (see Opcodes
). This parameter
also indicates if the field is synthetic and/or deprecated.name
- the field's name.desc
- the field's descriptor (see Type
).signature
- the field's signature. May be null if the field's
type does not use generic types.value
- the field's initial value. This parameter, which may be
null if the field does not have an initial value,
must be an Integer
, a Float
, a Long
, a
Double
or a String
(for int,
float, long or String fields
respectively). This parameter is only used for static
fields. Its value is ignored for non static fields, which
must be initialized through bytecode instructions in
constructors or methods.public Textifier visitMethod(int access, String name, String desc, String signature, String[] exceptions)
Printer
ClassVisitor.visitMethod(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])
.visitMethod
in class Printer
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 if the method
parameters, return type and exceptions do not use generic
types.exceptions
- the internal names of the method's exception classes (see
getInternalName
). May be
null.public void visitClassEnd()
Printer
ClassVisitor.visitEnd()
.visitClassEnd
in class Printer
public void visit(String name, Object value)
Printer
AnnotationVisitor.visit(java.lang.String, java.lang.Object)
.visit
in class Printer
name
- the value name.value
- the actual value, whose type must be Byte
,
Boolean
, Character
, Short
,
Integer
, Long
, Float
, Double
,
String
or Type
or OBJECT or ARRAY sort.
This value can also be an array of byte, boolean, short, char, int,
long, float or double values (this is equivalent to using
visitArray
and visiting each array element
in turn, but is more convenient).public void visitEnum(String name, String desc, String value)
Printer
AnnotationVisitor.visitEnum(java.lang.String, java.lang.String, java.lang.String)
.
Visits an enumeration value of the annotation.public Textifier visitAnnotation(String name, String desc)
Printer
AnnotationVisitor.visitAnnotation(java.lang.String, java.lang.String)
.visitAnnotation
in class Printer
name
- the value name.desc
- the class descriptor of the nested annotation class.public Textifier visitArray(String name)
Printer
AnnotationVisitor.visitArray(java.lang.String)
.
Visits an array value of the annotation. Note that arrays of primitive
types (such as byte, boolean, short, char, int, long, float or double)
can be passed as value to visit
. This is what
ClassReader
does.visitArray
in class Printer
name
- the value name.public void visitAnnotationEnd()
Printer
AnnotationVisitor.visitEnd()
.visitAnnotationEnd
in class Printer
public Textifier visitFieldAnnotation(String desc, boolean visible)
Printer
FieldVisitor.visitAnnotation(java.lang.String, boolean)
.visitFieldAnnotation
in class Printer
desc
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.public Printer visitFieldTypeAnnotation(int typeRef, TypePath typePath, String desc, boolean visible)
Printer
FieldVisitor.visitTypeAnnotation(int, org.objectweb.asm.TypePath, java.lang.String, boolean)
.visitFieldTypeAnnotation
in class Printer
typeRef
- a reference to the annotated type. The sort of this type
reference must be FIELD
.
See TypeReference
.typePath
- the path to the annotated type argument, wildcard bound, array
element type, or static inner type within 'typeRef'. May be
null if the annotation targets 'typeRef' as a whole.desc
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.public void visitFieldAttribute(Attribute attr)
Printer
FieldVisitor.visitAttribute(org.objectweb.asm.Attribute)
.visitFieldAttribute
in class Printer
attr
- an attribute.public void visitFieldEnd()
Printer
FieldVisitor.visitEnd()
.visitFieldEnd
in class Printer
public void visitParameter(String name, int access)
Printer
MethodVisitor.visitParameter(String, int)
.visitParameter
in class Printer
name
- parameter name or null if none is provided.access
- the parameter's access flags, only ACC_FINAL,
ACC_SYNTHETIC or/and ACC_MANDATED are
allowed (see Opcodes
).public Textifier visitAnnotationDefault()
Printer
MethodVisitor.visitAnnotationDefault()
.visitAnnotationDefault
in class Printer
public Textifier visitMethodAnnotation(String desc, boolean visible)
Printer
MethodVisitor.visitAnnotation(java.lang.String, boolean)
.visitMethodAnnotation
in class Printer
desc
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.public Printer visitMethodTypeAnnotation(int typeRef, TypePath typePath, String desc, boolean visible)
Printer
MethodVisitor.visitTypeAnnotation(int, org.objectweb.asm.TypePath, java.lang.String, boolean)
.visitMethodTypeAnnotation
in class Printer
typeRef
- a reference to the annotated type. The sort of this type
reference must be FIELD
.
See TypeReference
.typePath
- the path to the annotated type argument, wildcard bound, array
element type, or static inner type within 'typeRef'. May be
null if the annotation targets 'typeRef' as a whole.desc
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.public Textifier visitParameterAnnotation(int parameter, String desc, boolean visible)
Printer
MethodVisitor.visitParameterAnnotation(int, java.lang.String, boolean)
.visitParameterAnnotation
in class Printer
parameter
- the parameter index.desc
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.public void visitMethodAttribute(Attribute attr)
Printer
MethodVisitor.visitAttribute(org.objectweb.asm.Attribute)
.visitMethodAttribute
in class Printer
attr
- an attribute.public void visitCode()
Printer
MethodVisitor.visitCode()
.public void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack)
Printer
MethodVisitor.visitFrame(int, int, java.lang.Object[], int, java.lang.Object[])
.
Visits the current state of the local variables and operand stack
elements. This method must(*) be called just before any
instruction i that follows an unconditional branch instruction
such as GOTO or THROW, that is the target of a jump instruction, or that
starts an exception handler block. The visited types must describe the
values of the local variables and of the operand stack elements just
before i is executed.V1_6
. Opcodes.F_SAME
representing frame with exactly the same
locals as the previous frame and with the empty stack.Opcodes.F_SAME1
representing frame with exactly the same
locals as the previous frame and with single value on the stack (
nStack
is 1 and stack[0]
contains value for the
type of the stack item).Opcodes.F_APPEND
representing frame with current locals are
the same as the locals in the previous frame, except that additional
locals are defined (nLocal
is 1, 2 or 3 and
local
elements contains values representing added types).Opcodes.F_CHOP
representing frame with current locals are the
same as the locals in the previous frame, except that the last 1-3 locals
are absent and with the empty stack (nLocals
is 1, 2 or 3).Opcodes.F_FULL
representing complete frame data.visitFrame
in class Printer
type
- the type of this stack map frame. Must be
Opcodes.F_NEW
for expanded frames, or
Opcodes.F_FULL
, Opcodes.F_APPEND
,
Opcodes.F_CHOP
, Opcodes.F_SAME
or
Opcodes.F_APPEND
, Opcodes.F_SAME1
for
compressed frames.nLocal
- the number of local variables in the visited frame.local
- the local variable types in this frame. This array must not be
modified. Primitive types are represented by
Opcodes.TOP
, Opcodes.INTEGER
,
Opcodes.FLOAT
, Opcodes.LONG
,
Opcodes.DOUBLE
,Opcodes.NULL
or
Opcodes.UNINITIALIZED_THIS
(long and double are
represented by a single element). Reference types are
represented by String objects (representing internal names),
and uninitialized types by Label objects (this label
designates the NEW instruction that created this uninitialized
value).nStack
- the number of operand stack elements in the visited frame.stack
- the operand stack types in this frame. This array must not be
modified. Its content has the same format as the "local"
array.public void visitInsn(int opcode)
Printer
MethodVisitor.visitInsn(int)
visitInsn
in class Printer
opcode
- 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)
Printer
MethodVisitor.visitIntInsn(int, int)
.visitIntInsn
in class Printer
opcode
- 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.Opcodes.T_BOOLEAN
, Opcodes.T_CHAR
,
Opcodes.T_FLOAT
, Opcodes.T_DOUBLE
,
Opcodes.T_BYTE
, Opcodes.T_SHORT
,
Opcodes.T_INT
or Opcodes.T_LONG
.public void visitVarInsn(int opcode, int var)
Printer
MethodVisitor.visitVarInsn(int, int)
.visitVarInsn
in class Printer
opcode
- 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, String type)
Printer
MethodVisitor.visitTypeInsn(int, java.lang.String)
.
/**
Visits a type instruction. A type instruction is an instruction that
takes the internal name of a class as parameter.visitTypeInsn
in class Printer
opcode
- the opcode of the type instruction to be visited. This opcode
is either NEW, ANEWARRAY, CHECKCAST or INSTANCEOF.type
- the operand of the instruction to be visited. This operand
must be the internal name of an object or array class (see
getInternalName
).public void visitFieldInsn(int opcode, String owner, String name, String desc)
Printer
MethodVisitor.visitFieldInsn(int, java.lang.String, java.lang.String, java.lang.String)
.visitFieldInsn
in class Printer
opcode
- 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
).@Deprecated public void visitMethodInsn(int opcode, String owner, String name, String desc)
Printer
MethodVisitor.visitMethodInsn(int, java.lang.String, java.lang.String, java.lang.String)
.visitMethodInsn
in class Printer
opcode
- 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 visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf)
Printer
MethodVisitor.visitMethodInsn(int, java.lang.String, java.lang.String, java.lang.String)
.visitMethodInsn
in class Printer
opcode
- 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
).itf
- if the method's owner class is an interface.public void visitInvokeDynamicInsn(String name, String desc, Handle bsm, Object... bsmArgs)
Printer
MethodVisitor.visitInvokeDynamicInsn(java.lang.String, java.lang.String, org.objectweb.asm.Handle, java.lang.Object...)
.
Visits an invokedynamic instruction.visitInvokeDynamicInsn
in class Printer
name
- the method's name.desc
- the method's descriptor (see Type
).bsm
- the bootstrap method.bsmArgs
- the bootstrap method constant arguments. Each argument must be
an Integer
, Float
, Long
,
Double
, String
, Type
or Handle
value. This method is allowed to modify the content of the
array so a caller should expect that this array may change.public void visitJumpInsn(int opcode, Label label)
Printer
MethodVisitor.visitJumpInsn(int, org.objectweb.asm.Label)
.visitJumpInsn
in class Printer
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.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)
Printer
MethodVisitor.visitLabel(org.objectweb.asm.Label)
.visitLabel
in class Printer
label
- a Label
object.public void visitLdcInsn(Object cst)
Printer
MethodVisitor.visitLdcInsn(java.lang.Object)
.
Visits a LDC instruction. Note that new constant types may be added in
future versions of the Java Virtual Machine. To easily detect new
constant types, implementations of this method should check for
unexpected constant types, like this:
if (cst instanceof Integer) { // ... } else if (cst instanceof Float) { // ... } else if (cst instanceof Long) { // ... } else if (cst instanceof Double) { // ... } else if (cst instanceof String) { // ... } else if (cst instanceof Type) { int sort = ((Type) cst).getSort(); if (sort == Type.OBJECT) { // ... } else if (sort == Type.ARRAY) { // ... } else if (sort == Type.METHOD) { // ... } else { // throw an exception } } else if (cst instanceof Handle) { // ... } else { // throw an exception }
visitLdcInsn
in class Printer
cst
- the constant to be loaded on the stack. This parameter must be
a non null Integer
, a Float
, a Long
, a
Double
, a String
, a Type
of OBJECT or ARRAY sort for .class constants, for classes whose
version is 49.0, a Type
of METHOD sort or a
Handle
for MethodType and MethodHandle constants, for
classes whose version is 51.0.public void visitIincInsn(int var, int increment)
Printer
MethodVisitor.visitIincInsn(int, int)
.visitIincInsn
in class Printer
var
- 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)
Printer
MethodVisitor.visitTableSwitchInsn(int, int, org.objectweb.asm.Label, org.objectweb.asm.Label...)
.visitTableSwitchInsn
in class Printer
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 void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels)
Printer
MethodVisitor.visitLookupSwitchInsn(org.objectweb.asm.Label, int[], org.objectweb.asm.Label[])
.visitLookupSwitchInsn
in class Printer
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 void visitMultiANewArrayInsn(String desc, int dims)
Printer
MethodVisitor.visitMultiANewArrayInsn(java.lang.String, int)
.visitMultiANewArrayInsn
in class Printer
desc
- an array type descriptor (see Type
).dims
- number of dimensions of the array to allocate.public Printer visitInsnAnnotation(int typeRef, TypePath typePath, String desc, boolean visible)
Printer
MethodVisitor.visitInsnAnnotation(int, org.objectweb.asm.TypePath, java.lang.String, boolean)
.visitInsnAnnotation
in class Printer
typeRef
- a reference to the annotated type. The sort of this type
reference must be INSTANCEOF
,
NEW
,
CONSTRUCTOR_REFERENCE
,
METHOD_REFERENCE
,
CAST
,
CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT
,
METHOD_INVOCATION_TYPE_ARGUMENT
,
CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT
,
or METHOD_REFERENCE_TYPE_ARGUMENT
.
See TypeReference
.typePath
- the path to the annotated type argument, wildcard bound, array
element type, or static inner type within 'typeRef'. May be
null if the annotation targets 'typeRef' as a whole.desc
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.public void visitTryCatchBlock(Label start, Label end, Label handler, String type)
Printer
MethodVisitor.visitTryCatchBlock(org.objectweb.asm.Label, org.objectweb.asm.Label, org.objectweb.asm.Label, java.lang.String)
.visitTryCatchBlock
in class Printer
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 Printer visitTryCatchAnnotation(int typeRef, TypePath typePath, String desc, boolean visible)
Printer
MethodVisitor.visitTryCatchAnnotation(int, org.objectweb.asm.TypePath, java.lang.String, boolean)
.visitTryCatchAnnotation
in class Printer
typeRef
- a reference to the annotated type. The sort of this type
reference must be EXCEPTION_PARAMETER
.
See TypeReference
.typePath
- the path to the annotated type argument, wildcard bound, array
element type, or static inner type within 'typeRef'. May be
null if the annotation targets 'typeRef' as a whole.desc
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index)
Printer
MethodVisitor.visitLocalVariable(java.lang.String, java.lang.String, java.lang.String, org.objectweb.asm.Label, org.objectweb.asm.Label, int)
.visitLocalVariable
in class Printer
name
- the name of a local variable.desc
- the type descriptor of this local variable.signature
- the type signature of this local variable. May be
null if the local variable type does not use generic
types.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 Printer visitLocalVariableAnnotation(int typeRef, TypePath typePath, Label[] start, Label[] end, int[] index, String desc, boolean visible)
Printer
MethodVisitor.visitTryCatchAnnotation(int, org.objectweb.asm.TypePath, java.lang.String, boolean)
.visitLocalVariableAnnotation
in class Printer
typeRef
- a reference to the annotated type. The sort of this type
reference must be LOCAL_VARIABLE
or RESOURCE_VARIABLE
.
See TypeReference
.typePath
- the path to the annotated type argument, wildcard bound, array
element type, or static inner type within 'typeRef'. May be
null if the annotation targets 'typeRef' as a whole.start
- the fist instructions corresponding to the continuous ranges
that make the scope of this local variable (inclusive).end
- the last instructions corresponding to the continuous ranges
that make the scope of this local variable (exclusive). This
array must have the same size as the 'start' array.index
- the local variable's index in each range. This array must have
the same size as the 'start' array.desc
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.public void visitLineNumber(int line, Label start)
Printer
MethodVisitor.visitLineNumber(int, org.objectweb.asm.Label)
.visitLineNumber
in class Printer
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 void visitMaxs(int maxStack, int maxLocals)
Printer
MethodVisitor.visitMaxs(int, int)
.public void visitMethodEnd()
Printer
MethodVisitor.visitEnd()
.visitMethodEnd
in class Printer
public Textifier visitAnnotation(String desc, boolean visible)
desc
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.public Textifier visitTypeAnnotation(int typeRef, TypePath typePath, String desc, boolean visible)
typeRef
- a reference to the annotated type. See TypeReference
.typePath
- the path to the annotated type argument, wildcard bound, array
element type, or static inner type within 'typeRef'. May be
null if the annotation targets 'typeRef' as a whole.desc
- the class descriptor of the annotation class.visible
- true if the annotation is visible at runtime.public void visitAttribute(Attribute attr)
attr
- an attribute.protected Textifier createTextifier()
protected void appendDescriptor(int type, String desc)
buf
.type
- indicates if desc is an internal name, a field descriptor, a
method descriptor, a class signature, ...desc
- an internal name, type descriptor, or type signature. May be
null.protected void appendLabel(Label l)
buf
. Creates a new
label name if the given label does not yet have one.l
- a label.