|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.objectweb.asm.util.PrintClassVisitor
org.objectweb.asm.util.DumpClassVisitor
A PrintClassVisitor
that prints the ASM code that
generates the classes it visits. This class visitor can be used to quickly
write ASM code to generate some given bytecode:
DumpClassVisitor
visit this compiled
class (see the main
method);
where Hello is defined by:import org.objectweb.asm.*; import java.io.FileOutputStream; public class Dump implements Constants { public static void main (String[] args) throws Exception { ClassWriter cw = new ClassWriter(false); CodeVisitor cv; cw.visit(ACC_PUBLIC + ACC_SUPER, "Hello", "java/lang/Object", null, "Hello.java"); { cv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null); cv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); cv.visitLdcInsn("hello"); cv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); cv.visitInsn(RETURN); cv.visitMaxs(2, 1); } { cv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); cv.visitVarInsn(ALOAD, 0); cv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); cv.visitInsn(RETURN); cv.visitMaxs(1, 1); } cw.visitEnd(); FileOutputStream os = new FileOutputStream("Dumped.class"); os.write(cw.toByteArray()); os.close(); } }
public class Hello { public static void main (String[] args) { System.out.println("hello"); } }
Field Summary |
Fields inherited from class org.objectweb.asm.util.PrintClassVisitor |
buf, DEFAULT_ATTRIBUTES, pw, text |
Constructor Summary | |
DumpClassVisitor(PrintWriter pw)
Constructs a new DumpClassVisitor object. |
Method Summary | |
static void |
main(String[] args)
Prints the ASM source code to generate the given class to the standard output. |
void |
visit(int access,
String name,
String superName,
String[] interfaces,
String sourceFile)
Visits the header of the class. |
void |
visitAttribute(Attribute attr)
Visits a non standard attribute of the class. |
void |
visitEnd()
Visits the end of the class. |
void |
visitField(int access,
String name,
String desc,
Object value,
Attribute attrs)
Visits a field of the class. |
void |
visitInnerClass(String name,
String outerName,
String innerName,
int access)
Visits information about an inner class. |
CodeVisitor |
visitMethod(int access,
String name,
String desc,
String[] exceptions,
Attribute attrs)
Visits a method of the class. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
public DumpClassVisitor(PrintWriter pw)
DumpClassVisitor
object.
pw
- the print writer to be used to print the class.Method Detail |
public static void main(String[] args) throws Exception
Usage: DumpClassVisitor <fully qualified 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 access, String name, String superName, String[] interfaces, String sourceFile)
ClassVisitor
access
- the class's access flags (see Constants
). This
parameter also indicates if the class is deprecated.name
- the internal name of the class (see getInternalName
).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 java.lang.Object
class.interfaces
- the internal names of the class's interfaces (see getInternalName
). May be null.sourceFile
- the name of the source file from which this class was
compiled. May be null.public void visitInnerClass(String name, String outerName, String innerName, int access)
ClassVisitor
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.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 void visitField(int access, String name, String desc, Object value, Attribute attrs)
ClassVisitor
access
- the field's access flags (see Constants
). This
parameter also indicates if the field is synthetic and/or deprecated.name
- the field's name.desc
- the field's descriptor (see Type
).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
. 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.attrs
- the non standard method attributes, linked together by their
next field. May be null.public CodeVisitor visitMethod(int access, String name, String desc, String[] exceptions, Attribute attrs)
ClassVisitor
CodeVisitor
instance (or null) each time it
is called, i.e., it should not return a previously returned visitor.
access
- the method's access flags (see Constants
). This
parameter also indicates if the method is synthetic and/or deprecated.name
- the method's name.desc
- the method's descriptor (see Type
).exceptions
- the internal names of the method's exception
classes (see getInternalName
). May be
null.attrs
- the non standard method attributes, linked together by their
next field. May be null.
public void visitAttribute(Attribute attr)
ClassVisitor
attr
- a non standard class attribute. Must not be null.public void visitEnd()
ClassVisitor
visitEnd
in interface ClassVisitor
visitEnd
in class PrintClassVisitor
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |