org.objectweb.asm

Class ClassWriter

public class ClassWriter extends Object implements ClassVisitor

A {@link ClassVisitor} that generates classes in bytecode form. 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 {@link ClassReader 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 {@link ClassWriter ClassWriter} object.
ClassWriter(boolean computeMaxs, boolean skipUnknownAttributes)
Constructs a new {@link ClassWriter} object.
ClassWriter(ClassReader classReader, boolean computeMaxs)
Constructs a new {@link ClassWriter} object and enables optimizations for "mostly add" bytecode transformations.
Method Summary
intnewClass(String value)
Adds a class reference to the constant pool of the class being build.
intnewConst(Object cst)
Adds a number or string constant to the constant pool of the class being build.
intnewField(String owner, String name, String desc)
Adds a field reference to the constant pool of the class being build.
intnewMethod(String owner, String name, String desc, boolean itf)
Adds a method reference to the constant pool of the class being build.
intnewNameType(String name, String desc)
Adds a name and type to the constant pool of the class being build.
intnewUTF8(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.
voidvisit(int version, int access, String name, String signature, String superName, String[] interfaces)
AnnotationVisitorvisitAnnotation(String desc, boolean visible)
voidvisitAttribute(Attribute attr)
voidvisitEnd()
FieldVisitorvisitField(int access, String name, String desc, String signature, Object value)
voidvisitInnerClass(String name, String outerName, String innerName, int access)
MethodVisitorvisitMethod(int access, String name, String desc, String signature, String[] exceptions)
voidvisitOuterClass(String owner, String name, String desc)
voidvisitSource(String file, String debug)

Constructor Detail

ClassWriter

public ClassWriter(boolean computeMaxs)
Constructs a new {@link ClassWriter ClassWriter} object.

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 {@link MethodVisitor#visitMaxs visitMaxs} method of the {@link MethodVisitor} returned by the {@link #visitMethod visitMethod} method will be ignored, and computed automatically from the signature and the bytecode of each method.

ClassWriter

public ClassWriter(boolean computeMaxs, boolean skipUnknownAttributes)
Constructs a new {@link ClassWriter} object.

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 {@link MethodVisitor#visitMaxs visitMaxs} method of the {@link MethodVisitor} returned by the {@link #visitMethod visitMethod} method will be ignored, and computed automatically from the signature and the bytecode of each method. skipUnknownAttributes Deprecated. The value of this parameter is ignored.

ClassWriter

public ClassWriter(ClassReader classReader, boolean computeMaxs)
Constructs a new {@link ClassWriter} object and enables optimizations for "mostly add" bytecode transformations. These optimizations are the following:

Parameters: classReader the {@link ClassReader} used to read the original class. It will be used to copy the entire constant pool from the original class and also to copy other fragments of original bytecode where applicable. 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 {@link MethodVisitor#visitMaxs visitMaxs} method of the {@link MethodVisitor} returned by the {@link #visitMethod visitMethod} method will be ignored, and computed automatically from the signature and the bytecode of each method.

Method Detail

newClass

public int newClass(String value)
Adds a class reference to the constant pool of the class being build. Does nothing if the constant pool already contains a similar item. This method is intended for {@link Attribute} sub classes, and is normally not needed by class generators or adapters.

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)
Adds a number or string constant to the constant pool of the class being build. Does nothing if the constant pool already contains a similar item. This method is intended for {@link Attribute} sub classes, and is normally not needed by class generators or adapters.

Parameters: cst the value of the constant to be added to the constant pool. This parameter must be an {@link Integer}, a {@link Float}, a {@link Long}, a {@link Double} or a {@link String}.

Returns: the index of a new or already existing constant item with the given value.

newField

public int newField(String owner, String name, String desc)
Adds a field reference to the constant pool of the class being build. Does nothing if the constant pool already contains a similar item. This method is intended for {@link Attribute} sub classes, and is normally not needed by class generators or adapters.

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)
Adds a method reference to the constant pool of the class being build. Does nothing if the constant pool already contains a similar item. This method is intended for {@link Attribute} sub classes, and is normally not needed by class generators or adapters.

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)
Adds a name and type to the constant pool of the class being build. Does nothing if the constant pool already contains a similar item. This method is intended for {@link Attribute} sub classes, and is normally not needed by class generators or adapters.

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)
Adds an UTF8 string to the constant pool of the class being build. Does nothing if the constant pool already contains a similar item. This method is intended for {@link Attribute} sub classes, and is normally not needed by class generators or adapters.

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 signature, String superName, String[] interfaces)

visitAnnotation

public AnnotationVisitor visitAnnotation(String desc, boolean visible)

visitAttribute

public void visitAttribute(Attribute attr)

visitEnd

public void visitEnd()

visitField

public FieldVisitor visitField(int access, String name, String desc, String signature, Object value)

visitInnerClass

public void visitInnerClass(String name, String outerName, String innerName, int access)

visitMethod

public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)

visitOuterClass

public void visitOuterClass(String owner, String name, String desc)

visitSource

public void visitSource(String file, String debug)