org.objectweb.asm

Class ClassWriter

Implemented Interfaces:
ClassVisitor

public class ClassWriter
extends Object
implements ClassVisitor

A ClassVisitor that generates Java class files. More precisely this visitor generates a byte array conforming to the Java class file format. It can be used alone, to generate a Java class "from scratch", or with one or more ClassReader and adapter class visitor to generate a modified class from one or more existing Java classes.
Author:
Eric Bruneton

Constructor Summary

ClassWriter(boolean computeMaxs)
Constructs a new ClassWriter object.
ClassWriter(boolean computeMaxs, boolean skipUnknownAttributes)
Constructs a new ClassWriter object.

Method Summary

int
newClass(String value)
Adds a class reference to the constant pool of the class being build.
int
newConst(Object cst)
Adds a number or string constant to the constant pool of the class being build.
int
newConstDouble(double d)
int
newConstFloat(float f)
int
newConstInt(int i)
int
newConstLong(long l)
int
newField(String owner, String name, String desc)
Adds a field reference to the constant pool of the class being build.
int
newMethod(String owner, String name, String desc, boolean itf)
Adds a method reference to the constant pool of the class being build.
int
newNameType(String name, String desc)
Adds a name and type to the constant pool of the class being build.
int
newUTF8(String value)
Adds an UTF8 string to the constant pool of the class being build.
byte[]
toByteArray()
Returns the bytecode of the class that was build with this class writer.
void
visit(int version, int access, String name, String superName, String[] interfaces, String sourceFile)
void
visitAttribute(Attribute attr)
void
visitEnd()
void
visitField(int access, String name, String desc, Object value, Attribute attrs)
void
visitInnerClass(String name, String outerName, String innerName, int access)
CodeVisitor
visitMethod(int access, String name, String desc, String[] exceptions, Attribute attrs)

Constructor Details

ClassWriter

public ClassWriter(boolean computeMaxs)
Parameters:
computeMaxs - true if the maximum stack size and the maximum number of local variables must be automatically computed. If this flag is true, then the arguments of the visitMaxs method of the CodeVisitor returned by the visitMethod method will be ignored, and computed automatically from the signature and the bytecode of each method.

ClassWriter

public ClassWriter(boolean computeMaxs,
                   boolean skipUnknownAttributes)
Parameters:
computeMaxs - true if the maximum stack size and the maximum number of local variables must be automatically computed. If this flag is true, then the arguments of the visitMaxs method of the CodeVisitor returned by the visitMethod method will be ignored, and computed automatically from the signature and the bytecode of each method.
skipUnknownAttributes - true to silently ignore unknown attributes, or false to throw an exception if an unknown attribute is found.

Method Details

newClass

public int newClass(String value)
Parameters:
value - the internal name of the class.
Returns:
the index of a new or already existing class reference item.

newConst

public int newConst(Object cst)
Parameters:
cst - the value of the constant to be added to the constant pool. This parameter must be an Integer, a Float, a Long, a Double or a String.
Returns:
the index of a new or already existing constant item with the given value.

newConstDouble

public int newConstDouble(double d)

newConstFloat

public int newConstFloat(float f)

newConstInt

public int newConstInt(int i)

newConstLong

public int newConstLong(long l)

newField

public int newField(String owner,
                    String name,
                    String desc)
Parameters:
owner - the internal name of the field's owner class.
name - the field's name.
desc - the field's descriptor.
Returns:
the index of a new or already existing field reference item.

newMethod

public int newMethod(String owner,
                     String name,
                     String desc,
                     boolean itf)
Parameters:
owner - the internal name of the method's owner class.
name - the method's name.
desc - the method's descriptor.
itf - true if owner is an interface.
Returns:
the index of a new or already existing method reference item.

newNameType

public int newNameType(String name,
                       String desc)
Parameters:
name - a name.
desc - a type descriptor.
Returns:
the index of a new or already existing name and type item.

newUTF8

public int newUTF8(String value)
Parameters:
value - the String value.
Returns:
the index of a new or already existing UTF8 item.

toByteArray

public byte[] toByteArray()
Returns the bytecode of the class that was build with this class writer.
Returns:
the bytecode of the class that was build with this class writer.

visit

public void visit(int version,
                  int access,
                  String name,
                  String superName,
                  String[] interfaces,
                  String sourceFile)
Specified by:
visit in interface ClassVisitor

visitAttribute

public void visitAttribute(Attribute attr)
Specified by:
visitAttribute in interface ClassVisitor

visitEnd

public void visitEnd()
Specified by:
visitEnd in interface ClassVisitor

visitField

public void visitField(int access,
                       String name,
                       String desc,
                       Object value,
                       Attribute attrs)
Specified by:
visitField in interface ClassVisitor

visitInnerClass

public void visitInnerClass(String name,
                            String outerName,
                            String innerName,
                            int access)
Specified by:
visitInnerClass in interface ClassVisitor

visitMethod

public CodeVisitor visitMethod(int access,
                               String name,
                               String desc,
                               String[] exceptions,
                               Attribute attrs)
Specified by:
visitMethod in interface ClassVisitor