|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.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);
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();
}
}
where Hello is defined by:
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)
ClassVisitorCodeVisitor 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 ClassVisitorvisitEnd in class PrintClassVisitorvoid 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 | ||||||||