ClassVisitor
that prints the classes it visits with a Printer
. This class
visitor can be used in the middle of a class visitor chain to trace the class that is visited at
a given point in this chain. This may be useful for debugging purposes.
When used with a Textifier
, the trace printed when visiting the Hello
class is
the following:
// class version 49.0 (49) // access flags 0x21 public class Hello { // compiled from: Hello.java // access flags 0x1 public <init> ()V ALOAD 0 INVOKESPECIAL java/lang/Object <init> ()V RETURN MAXSTACK = 1 MAXLOCALS = 1 // access flags 0x9 public static main ([Ljava/lang/String;)V GETSTATIC java/lang/System out Ljava/io/PrintStream; LDC "hello" INVOKEVIRTUAL java/io/PrintStream println (Ljava/lang/String;)V RETURN MAXSTACK = 2 MAXLOCALS = 1 }
where Hello
is defined by:
public class Hello { public static void main(String[] args) { System.out.println("hello"); } }
Modifier and Type | Field and Description |
---|---|
public final Printer | p
The printer to convert the visited class into text. |
private final PrintWriter | printWriter
The print writer to be used to print the class. |
Access | Constructor and Description |
---|---|
public | TraceClassVisitor(final PrintWriter
the print writer to be used to print the class. May be null. printWriter)Constructs a new |
public | TraceClassVisitor(final ClassVisitor
the class visitor to which to delegate calls. May be null. classVisitor, final PrintWriter the print writer to be used to print the class. May be null. printWriter)Constructs a new |
public | TraceClassVisitor(final ClassVisitor
the class visitor to which to delegate calls. May be null. classVisitor, final Printer the printer to convert the visited class into text. printer, final PrintWriter the print writer to be used to print the class. May be null. printWriter)Constructs a new |
Modifier and Type | Method and Description |
---|---|
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 Opcodes#ACC_DEPRECATED or a record Opcodes#ACC_RECORD .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.Overrides jdk. Visits the header of the class. |
public AnnotationVisitor | visitAnnotation(final String
the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Overrides jdk. Visits an annotation of the class. |
public void | visitAttribute(final Attribute
an attribute. attribute)Overrides jdk. Visits a non standard attribute of the class. |
public void | visitEnd()
Overrides jdk. Visits the end of the class. |
public FieldVisitor | 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.Overrides jdk. Visits a field of the class. |
public void | visitInnerClass(final String
the internal name of C (see name, final String Type#getInternalName() ).the internal name of the class or interface C is a member of (see outerName, final String Type#getInternalName() ). Must be null if C is not the member of a class or
interface (e.g. for local or anonymous classes).the (simple) name of C. Must be null for anonymous inner classes. innerName, final int the access flags of C originally declared in the source code from which this
class was compiled. access)Overrides jdk. Visits information about an inner class. |
public MethodVisitor | 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.Overrides jdk. Visits a method of the class. |
public ModuleVisitor | visitModule(final String
the fully qualified name (using dots) of the module. name, final int the module access flags, among flags, final String ACC_OPEN , ACC_SYNTHETIC and ACC_MANDATED .the module version, or null. version)Overrides jdk. Visit the module corresponding to the class. |
public void | visitNestHost(final String
the internal name of the host class of the nest (see nestHost)Type#getInternalName() ).Overrides jdk. Visits the nest host class of the class. |
public void | visitNestMember(final String
the internal name of a nest member (see nestMember)Type#getInternalName() ).Overrides jdk. Visits a member of the nest. |
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 or constructor of its enclosing class (e.g. if it is enclosed in
an instance initializer, static initializer, instance variable initializer, or class
variable initializer). name, final String the descriptor of the method that contains the class, or null if
the class is not enclosed in a method or constructor of its enclosing class (e.g. if it is
enclosed in an instance initializer, static initializer, instance variable initializer, or
class variable initializer). descriptor)Overrides jdk. Visits the enclosing class of the class. |
public void | visitPermittedSubclass(final String
the internal name of a permitted subclass (see permittedSubclass)Type#getInternalName() ).Overrides jdk. Visits a permitted subclasses. |
public RecordComponentVisitor | visitRecordComponent(final String
the record component 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 jdk. Visits a record component of the class. |
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)Overrides jdk. Visits the source of the class. |
public AnnotationVisitor | visitTypeAnnotation(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 jdk. Visits an annotation on a type in the class signature. |
p | back to summary |
---|---|
public final Printer p The printer to convert the visited class into text. |
printWriter | back to summary |
---|---|
private final PrintWriter printWriter The print writer to be used to print the class. May be null. |
TraceClassVisitor | back to summary |
---|---|
public TraceClassVisitor(final PrintWriter printWriter) Constructs a new
|
TraceClassVisitor | back to summary |
---|---|
public TraceClassVisitor(final ClassVisitor classVisitor, final PrintWriter printWriter) Constructs a new
|
TraceClassVisitor | back to summary |
---|---|
public TraceClassVisitor(final ClassVisitor classVisitor, final Printer printer, final PrintWriter printWriter) Constructs a new
|
visit | back to summary |
---|---|
public void visit(final int version, final int access, final String name, final String signature, final String superName, final String[] interfaces) Overrides jdk. Doc from jdk. Visits the header of the class.
|
visitAnnotation | back to summary |
---|---|
public AnnotationVisitor visitAnnotation(final String descriptor, final boolean visible) Overrides jdk. Doc from jdk. Visits an annotation of the class.
|
visitAttribute | back to summary |
---|---|
public void visitAttribute(final Attribute attribute) Overrides jdk. Doc from jdk. Visits a non standard attribute of the class. |
visitEnd | back to summary |
---|---|
public void visitEnd() Overrides jdk. Doc from jdk. Visits the end of the class. This method, which is the last one to be called, is used to inform the visitor that all the fields and methods of the class have been visited.
|
visitField | back to summary |
---|---|
public FieldVisitor visitField(final int access, final String name, final String descriptor, final String signature, final Object value) Overrides jdk. Doc from jdk. Visits a field of the class.
|
visitInnerClass | back to summary |
---|---|
public void visitInnerClass(final String name, final String outerName, final String innerName, final int access) Overrides jdk. Doc from jdk. Visits information about an inner class. This inner class is not necessarily a member of the class being visited. More precisely, every class or interface C which is referenced by this class and which is not a package member must be visited with this method. This class must reference its nested class or interface members, and its enclosing class, if any. See the JVMS 4.7.6 section for more details.
|
visitMethod | back to summary |
---|---|
public MethodVisitor visitMethod(final int access, final String name, final String descriptor, final String signature, final String[] exceptions) Overrides jdk. Doc from jdk. Visits a method of the class. This method must return a new
|
visitModule | back to summary |
---|---|
public ModuleVisitor visitModule(final String name, final int flags, final String version) Overrides jdk. Doc from jdk. Visit the module corresponding to the class.
|
visitNestHost | back to summary |
---|---|
public void visitNestHost(final String nestHost) Overrides jdk. Doc from jdk. Visits the nest host class of the class. A nest is a set of classes of the same package that share access to their private members. One of these classes, called the host, lists the other members of the nest, which in turn should link to the host of their nest. This method must be called only once and only if the visited class is a non-host member of a nest. A class is implicitly its own nest, so it's invalid to call this method with the visited class name as argument.
|
visitNestMember | back to summary |
---|---|
public void visitNestMember(final String nestMember) Overrides jdk. Doc from jdk. Visits a member of the nest. A nest is a set of classes of the same package that share access to their private members. One of these classes, called the host, lists the other members of the nest, which in turn should link to the host of their nest. This method must be called only if the visited class is the host of a nest. A nest host is implicitly a member of its own nest, so it's invalid to call this method with the visited class name as argument.
|
visitOuterClass | back to summary |
---|---|
public void visitOuterClass(final String owner, final String name, final String descriptor) Overrides jdk. Doc from jdk. Visits the enclosing class of the class. This method must be called only if this class is a local or anonymous class. See the JVMS 4.7.7 section for more details.
|
visitPermittedSubclass | back to summary |
---|---|
public void visitPermittedSubclass(final String permittedSubclass) Overrides jdk. Doc from jdk. Visits a permitted subclasses. A permitted subclass is one of the allowed subclasses of the current class.
|
visitRecordComponent | back to summary |
---|---|
public RecordComponentVisitor visitRecordComponent(final String name, final String descriptor, final String signature) Overrides jdk. Doc from jdk. Visits a record component of the class.
|
visitSource | back to summary |
---|---|
public void visitSource(final String file, final String debug) Overrides jdk. Doc from jdk. Visits the source of the class. |
visitTypeAnnotation | back to summary |
---|---|
public AnnotationVisitor visitTypeAnnotation(final int typeRef, final TypePath typePath, final String descriptor, final boolean visible) Overrides jdk. Doc from jdk. Visits an annotation on a type in the class signature.
|