|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.logicalcobwebs.asm.util.PrintClassVisitor org.logicalcobwebs.asm.util.DumpClassVisitor
public class 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.logicalcobwebs.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); 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); 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.logicalcobwebs.asm.util.PrintClassVisitor |
---|
buf, pw, text |
Constructor Summary | |
---|---|
DumpClassVisitor(java.io.PrintWriter pw)
Constructs a new DumpClassVisitor object. |
Method Summary | |
---|---|
(package private) void |
appendAccess(int access)
Appends a string representation of the given access modifiers to buf . |
(package private) static void |
appendConstant(java.lang.StringBuffer buf,
java.lang.Object cst)
Appends a string representation of the given constant to the given buffer. |
static void |
main(java.lang.String[] args)
Prints the ASM source code to generate the given class to the standard output. |
void |
visit(int access,
java.lang.String name,
java.lang.String superName,
java.lang.String[] interfaces,
java.lang.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,
java.lang.String name,
java.lang.String desc,
java.lang.Object value,
Attribute attrs)
Visits a field of the class. |
void |
visitInnerClass(java.lang.String name,
java.lang.String outerName,
java.lang.String innerName,
int access)
Visits information about an inner class. |
CodeVisitor |
visitMethod(int access,
java.lang.String name,
java.lang.String desc,
java.lang.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(java.io.PrintWriter pw)
DumpClassVisitor
object.
pw
- the print writer to be used to print the class.Method Detail |
---|
public static void main(java.lang.String[] args) throws java.lang.Exception
Usage: DumpClassVisitor <fully qualified class name>
args
- the command line arguments.
java.lang.Exception
- if the class cannot be found, or if an IO exception
occurs.public void visit(int access, java.lang.String name, java.lang.String superName, java.lang.String[] interfaces, java.lang.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(java.lang.String name, java.lang.String outerName, java.lang.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, java.lang.String name, java.lang.String desc, java.lang.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, java.lang.String name, java.lang.String desc, java.lang.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
void appendAccess(int access)
buf
.
access
- some access modifiers.static void appendConstant(java.lang.StringBuffer buf, java.lang.Object cst)
buf
- a string buffer.cst
- an Integer
, Float
, Long
, Double
or String
object. May be null.
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |