Printer that prints a disassembled view of the classes it visits.
| Modifier and Type | Field and Description |
|---|---|
| private int | access
The access flags of the visited class. |
| public static final int | CLASS_SIGNATURE
The type of class signatures. |
| private static final String | |
| private static final String | |
| public static final int | FIELD_DESCRIPTOR
The type of field descriptors. |
| public static final int | FIELD_SIGNATURE
The type of field signatures. |
| private static final List | |
| public static final int | HANDLE_DESCRIPTOR
The type of method handle descriptors. |
| public static final int | INTERNAL_NAME
The type of internal names (see |
| private static final String | |
| protected Map | labelNames
The names of the labels. |
| protected String | ltab
The indentation of labels. |
| public static final int | METHOD_DESCRIPTOR
The type of method descriptors. |
| public static final int | METHOD_SIGNATURE
The type of method signatures. |
| private int | numAnnotationValues
The number of annotation values visited so far. |
| private static final String | |
| protected String | tab
The indentation of class members at depth level 1 (e.g. fields, methods). |
| protected String | tab2
The indentation of class elements at depth level 2 (e.g. bytecode instructions in methods). |
| protected String | tab3
The indentation of class elements at depth level 3 (e.g. switch cases in methods). |
| private static final String | USAGE
The help message shown when command line arguments are incorrect. |
| Access | Constructor and Description |
|---|---|
| public | |
| protected |
| Modifier and Type | Method and Description |
|---|---|
| private Textifier | |
| private void | appendAccess(final int
some access flags. accessFlags)Appends a string representation of the given access flags to |
| protected void | appendDescriptor(final int
the type of 'value'. Must be one of type, final String INTERNAL_NAME, FIELD_DESCRIPTOR, FIELD_SIGNATURE, METHOD_DESCRIPTOR, METHOD_SIGNATURE, CLASS_SIGNATURE or HANDLE_DESCRIPTOR.an internal name (see value)Type#getInternalName()), type descriptor or a type
signature. May be null.Appends an internal name, a type descriptor or a type signature to |
| private void | appendFrameTypes(final int
the number of stack map frame types in 'frameTypes'. numTypes, final Object[] an array of stack map frame types, in the format described in frameTypes)org..Appends the given stack map frame types to |
| protected void | appendHandle(final Handle
a handle. handle)Appends a string representation of the given handle to |
| private void | appendJavaDeclaration(final String
a class, field or method name. name, final String a class, field or method signature. signature)Appends the Java generic type declaration corresponding to the given signature. |
| protected void | |
| private void | appendRawAccess(final int
some access flags. accessFlags)Appends the hexadecimal value of the given access flags to |
| private void | appendTypeReference(final int
a type reference. See typeRef)TypeReference.Appends a string representation of the given type reference to |
| protected Textifier | |
| public static void | |
| pack-priv static void | main(final String[]
the command line arguments. args, final PrintWriter where to print the result. output, final PrintWriter where to log errors. logger)Prints a disassembled view of the given class to the given output. |
| private void | maybeAppendComma(final int
a number of 'values visited so far', for instance the number of annotation
values visited so far in an annotation visitor. numValues)Appends a comma to |
| public void | visit(final int
the class version. The minor version is stored in the 16 most significant bits,
and the major version in the 16 least significant bits. version, final int the class's access flags (see access, final String Opcodes). This parameter also indicates if
the class is deprecated.the internal name of the class (see name, final String Type#getInternalName()).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. signature, final String the internal of name of the super class (see superName, final String[] Type#getInternalName()).
For interfaces, the super class is Object. May be null, but only for the
Object class.the internal names of the class's interfaces (see interfaces)Type#getInternalName()). May be null.Implements abstract org. |
| public void | visit(final String
the value name. name, final Object the actual value, whose type must be value)Byte, Boolean, Character, Short, Integer , Long, Float, Double,
String or Type of Type#OBJECT or Type#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).Implements abstract org. |
| public Textifier | visitAnnotableParameterCount(final int
the number of method parameters than can have annotations. This number
must be less or equal than the number of parameter types in the method descriptor. It can
be strictly less when a method has synthetic parameters and when these parameters are
ignored when computing parameter indices for the purpose of parameter annotations (see
https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.7.18). parameterCount, final boolean true to define the number of method parameters that can have
annotations visible at runtime, false to define the number of method parameters
that can have annotations invisible at runtime. visible)Overrides org. |
| public Textifier | visitAnnotation(final String
the value name. name, final String the class descriptor of the nested annotation class. descriptor)Implements abstract org. |
| public Textifier | Returns: a visitor to visit the annotation values.the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Prints a disassembled view of the given annotation. |
| public Textifier | visitAnnotationDefault()
Implements abstract org. |
| public void | visitAnnotationEnd()
Implements abstract org. |
| private void | |
| public Textifier | visitArray(final String
the value name. name)Implements abstract org. |
| public void | visitAttribute(final Attribute
an attribute. attribute)Prints a disassembled view of the given attribute. |
| private void | |
| private void | |
| private void | |
| public Textifier | visitClassAnnotation(final String
the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Implements abstract org. |
| public void | visitClassAttribute(final Attribute
an attribute. attribute)Implements abstract org. |
| public void | |
| public Printer | visitClassTypeAnnotation(final int
a reference to the annotated type. The sort of this type reference must be
typeRef, final TypePath TypeReference#CLASS_TYPE_PARAMETER, TypeReference#CLASS_TYPE_PARAMETER_BOUND or TypeReference#CLASS_EXTENDS. See
TypeReference.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. typePath, final String the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Overrides org. |
| public void | |
| private void | |
| public void | visitEnum(final String
the value name. name, final String the class descriptor of the enumeration class. descriptor, final String the actual enumeration value. value)Implements abstract org. |
| public void | visitExport(final String
the internal name of the exported package (see packaze, final int Type#getInternalName()).the access flag of the exported package, valid values are among access, final String... ACC_SYNTHETIC and ACC_MANDATED.the fully qualified names (using dots) of the modules that can access the public
classes of the exported package, or null. modules)Overrides org. |
| private void | visitExportOrOpen(final String method, final String packaze, final int access, final String... modules)
|
| public Textifier | visitField(final int
the field's access flags (see access, final String Opcodes). This parameter also indicates if
the field is synthetic and/or deprecated.the field's name. name, final String the field's descriptor (see descriptor, final String Type).the field's signature. May be null if the field's type does not use
generic types. signature, final Object the field's initial value. This parameter, which may be null if the
field does not have an initial value, must be an value)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.Implements abstract org. |
| public Textifier | visitFieldAnnotation(final String
the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Implements abstract org. |
| public void | visitFieldAttribute(final Attribute
an attribute. attribute)Implements abstract org. |
| public void | |
| public void | visitFieldInsn(final int
the opcode of the type instruction to be visited. This opcode is either
GETSTATIC, PUTSTATIC, GETFIELD or PUTFIELD. opcode, final String the internal name of the field's owner class (see owner, final String Type#getInternalName()).the field's name. name, final String the field's descriptor (see descriptor)Type).Implements abstract org. |
| public Printer | visitFieldTypeAnnotation(final int
a reference to the annotated type. The sort of this type reference must be
typeRef, final TypePath TypeReference#FIELD. See TypeReference.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. typePath, final String the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Overrides org. |
| private void | |
| public void | visitFrame(final int
the type of this stack map frame. Must be type, final int 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.the number of local variables in the visited frame. numLocal, final Object[] the local variable types in this frame. This array must not be modified. Primitive
types are represented by local, final int 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, see Type#getInternalName()), and uninitialized types by Label objects (this label designates
the NEW instruction that created this uninitialized value).the number of operand stack elements in the visited frame. numStack, final Object[] the operand stack types in this frame. This array must not be modified. Its
content has the same format as the "local" array. stack)Implements abstract org. |
| public void | visitIincInsn(final int
index of the local variable to be incremented. varIndex, final int amount to increment the local variable by. increment)Implements abstract org. |
| public void | visitInnerClass(final String
the internal name of an inner class (see name, final String Type#getInternalName()).the internal name of the class to which the inner class belongs (see outerName, final String Type#getInternalName()). May be null for not member classes.the (simple) name of the inner class inside its enclosing class. May be
null for anonymous inner classes. innerName, final int the access flags of the inner class as originally declared in the enclosing
class. access)Implements abstract org. |
| public void | visitInsn(final int
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. opcode)Implements abstract org. |
| public Printer | visitInsnAnnotation(final int
a reference to the annotated type. The sort of this type reference must be
typeRef, final TypePath TypeReference#INSTANCEOF, TypeReference#NEW, TypeReference#CONSTRUCTOR_REFERENCE, TypeReference#METHOD_REFERENCE, TypeReference#CAST, TypeReference#CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT, TypeReference#METHOD_INVOCATION_TYPE_ARGUMENT, TypeReference#CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT, or TypeReference#METHOD_REFERENCE_TYPE_ARGUMENT. See TypeReference.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. typePath, final String the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Overrides org. |
| private void | |
| public void | visitIntInsn(final int
the opcode of the instruction to be visited. This opcode is either BIPUSH, SIPUSH
or NEWARRAY. opcode, final int the operand of the instruction to be visited. operand)When opcode is BIPUSH, operand value should be between Byte.MIN_VALUE and Byte.MAX_VALUE. When opcode is SIPUSH, operand value should be between Short.MIN_VALUE and Short.MAX_VALUE. When opcode is NEWARRAY, operand value should be one of 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.Implements abstract org. |
| public void | visitInvokeDynamicInsn(final String
the method's name. name, final String the method's descriptor (see descriptor, final Handle Type).the bootstrap method. bootstrapMethodHandle, final Object... bootstrapMethodArguments)Implements abstract org. |
| public void | visitJumpInsn(final int
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. opcode, final 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. label)Implements abstract org. |
| public void | visitLabel(final Label
a label)Label object.Implements abstract org. |
| public void | visitLdcInsn(final Object
the constant to be loaded on the stack. This parameter must be a non null value)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, a Type of METHOD sort for MethodType, a Handle for MethodHandle
constants, for classes whose version is 51 or a ConstantDynamic for a constant
dynamic for classes whose version is 55.Implements abstract org. |
| public void | visitLineNumber(final int
a line number. This number refers to the source file from which the class was
compiled. line, final Label the first instruction corresponding to this line number. start)Implements abstract org. |
| public void | visitLocalVariable(final String
the name of a local variable. name, final String the type descriptor of this local variable. descriptor, final String the type signature of this local variable. May be null if the local
variable type does not use generic types. signature, final Label the first instruction corresponding to the scope of this local variable
(inclusive). start, final Label the last instruction corresponding to the scope of this local variable (exclusive). end, final int the local variable's index. index)Implements abstract org. |
| public Printer | visitLocalVariableAnnotation(final int
a reference to the annotated type. The sort of this type reference must be
typeRef, final TypePath TypeReference#LOCAL_VARIABLE or TypeReference#RESOURCE_VARIABLE. See TypeReference.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. typePath, final Label[] the fist instructions corresponding to the continuous ranges that make the scope
of this local variable (inclusive). start, final Label[] 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. end, final int[] the local variable's index in each range. This array must have the same size as
the 'start' array. index, final String the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Overrides org. |
| private void | |
| public void | visitLookupSwitchInsn(final Label
beginning of the default handler block. dflt, final int[] the values of the keys. keys, final Label[] beginnings of the handler blocks. labels)labels[i] is the beginning of the
handler block for the keys[i] key.Implements abstract org. |
| public void | visitMainClass(final String
the internal name of the main class of the current module (see mainClass)
Module main class.
Type#getInternalName()). |
| public void | visitMaxs(final int
maximum stack size of the method. maxStack, final int maximum number of local variables for the method. maxLocals)Implements abstract org. |
| public Textifier | visitMethod(final int
the method's access flags (see access, final String Opcodes). This parameter also indicates if
the method is synthetic and/or deprecated.the method's name. name, final String the method's descriptor (see descriptor, final String Type).the method's signature. May be null if the method parameters,
return type and exceptions do not use generic types. signature, final String[] the internal names of the method's exception classes (see exceptions)Type#getInternalName()). May be null.Implements abstract org. |
| public Textifier | visitMethodAnnotation(final String
the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Implements abstract org. |
| public void | visitMethodAttribute(final Attribute
an attribute. attribute)Implements abstract org. |
| public void | |
| public void | visitMethodInsn(final int
the opcode of the type instruction to be visited. This opcode is either
INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC or INVOKEINTERFACE. opcode, final String the internal name of the method's owner class (see owner, final String Type#getInternalName()).the method's name. name, final String the method's descriptor (see descriptor, final boolean Type).if the method's owner class is an interface. isInterface)
Method instruction.
|
| public Printer | visitMethodTypeAnnotation(final int
a reference to the annotated type. The sort of this type reference must be
typeRef, final TypePath TypeReference#METHOD_TYPE_PARAMETER, TypeReference#METHOD_TYPE_PARAMETER_BOUND, TypeReference#METHOD_RETURN, TypeReference#METHOD_RECEIVER, TypeReference#METHOD_FORMAL_PARAMETER or TypeReference#THROWS. See TypeReference.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. typePath, final String the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Overrides org. |
| public Printer | visitModule(final String
the fully qualified name (using dots) of the module. name, final int the module access flags, among access, final String ACC_OPEN, ACC_SYNTHETIC and ACC_MANDATED.the module version, or null. version)Overrides org. |
| public void | |
| public void | visitMultiANewArrayInsn(final String
an array type descriptor (see descriptor, final int Type).the number of dimensions of the array to allocate. numDimensions)Implements abstract org. |
| public void | visitNestHost(final String
the internal name of the host class of the nest (see nestHost)Type#getInternalName()).Overrides org. |
| public void | visitNestMember(final String
the internal name of a nest member (see nestMember)
Visits a member of the nest.
Type#getInternalName()). |
| public void | visitOpen(final String
the internal name of the opened package (see packaze, final int Type#getInternalName()).the access flag of the opened package, valid values are among access, final String... ACC_SYNTHETIC and ACC_MANDATED.the fully qualified names (using dots) of the modules that can use deep
reflection to the classes of the open package, or null. modules)Overrides org. |
| public void | visitOuterClass(final String
internal name of the enclosing class of the class (see owner, final String Type#getInternalName()).the name of the method that contains the class, or null if the class is
not enclosed in a method of its enclosing class. name, final String the descriptor of the method that contains the class, or null if
the class is not enclosed in a method of its enclosing class. descriptor)Implements abstract org. |
| public void | visitPackage(final String
the internal name of a package (see packaze)Type#getInternalName()).Overrides org. |
| public void | visitParameter(final String
parameter name or null if none is provided. name, final int the parameter's access flags, only access)
Method parameter.
ACC_FINAL, ACC_SYNTHETIC
or/and ACC_MANDATED are allowed (see Opcodes). |
| public Textifier | visitParameterAnnotation(final int
the parameter index. This index must be strictly smaller than the number of
parameters in the method descriptor, and strictly smaller than the parameter count
specified in parameter, final String visitAnnotableParameterCount.Important Note a parameter index i is not required to correspond to the i'th parameter descriptor in the method descriptor, in particular in case of synthetic parameters (see https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.7.18). the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Implements abstract org. |
| public void | visitPermittedSubclass(final String
the internal name of a permitted subclass (see permittedSubclass)Type#getInternalName()).Overrides org. |
| public void | visitProvide(final String
the internal name of the service (see provide, final String... Type#getInternalName()).the internal names of the implementations of the service (there is at least
one provider). providers)Overrides org. |
| public Printer | visitRecordComponent(final String
the field's name. name, final String the record component descriptor (see descriptor, final String Type).the record component signature. May be null if the record component
type does not use generic types. signature)Overrides org. |
| public Textifier | visitRecordComponentAnnotation(final String
the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Overrides org. |
| public void | visitRecordComponentAttribute(final Attribute
an attribute. attribute)Overrides org. |
| public void | visitRecordComponentEnd()
Overrides org. |
| public Printer | visitRecordComponentTypeAnnotation(final int
a reference to the annotated type. The sort of this type reference must be
typeRef, final TypePath TypeReference#CLASS_TYPE_PARAMETER, TypeReference#CLASS_TYPE_PARAMETER_BOUND or TypeReference#CLASS_EXTENDS. See
TypeReference.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. typePath, final String the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Overrides org. |
| public void | visitRequire(final String
the fully qualified name (using dots) of the dependence. require, final int the access flag of the dependence among access, final String ACC_TRANSITIVE, ACC_STATIC_PHASE, ACC_SYNTHETIC and ACC_MANDATED.the module version at compile time, or null. version)Overrides org. |
| private void | |
| public void | visitSource(final String
the name of the source file from which the class was compiled. May be null. file, final String additional debug information to compute the correspondence between source and
compiled elements of the class. May be null. debug)Implements abstract org. |
| private void | |
| public void | visitTableSwitchInsn(final int
the minimum key value. min, final int the maximum key value. max, final Label beginning of the default handler block. dflt, final Label... beginnings of the handler blocks. labels)labels[i] is the beginning of the
handler block for the min + i key.Implements abstract org. |
| public Printer | visitTryCatchAnnotation(final int
a reference to the annotated type. The sort of this type reference must be
typeRef, final TypePath TypeReference#EXCEPTION_PARAMETER. See TypeReference.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. typePath, final String the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Overrides org. |
| public void | visitTryCatchBlock(final Label
the beginning of the exception handler's scope (inclusive). start, final Label the end of the exception handler's scope (exclusive). end, final Label the beginning of the exception handler's code. handler, final String the internal name of the type of exceptions handled by the handler (see type)Type#getInternalName()), or null to catch any exceptions (for "finally"
blocks).Implements abstract org. |
| private void | |
| public Textifier | Returns: a visitor to visit the annotation values.a reference to the annotated type. See typeRef, final TypePath TypeReference.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. typePath, final String the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Prints a disassembled view of the given type annotation. |
| public void | visitTypeInsn(final int
the opcode of the type instruction to be visited. This opcode is either NEW,
ANEWARRAY, CHECKCAST or INSTANCEOF. opcode, final String the operand of the instruction to be visited. This operand must be the internal
name of an object or array class (see type)Type#getInternalName()).Implements abstract org. |
| public void | visitUse(final String
the internal name of the service (see use)Type#getInternalName()).Overrides org. |
| public void | visitVarInsn(final int
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. opcode, final int the operand of the instruction to be visited. This operand is the index of a
local variable. varIndex)Implements abstract org. |