Prev Class | Next Class | Frames | No Frames |
Summary: Nested | Field | Method | Constr | Detail: Nested | Field | Method | Constr |
java.lang.Object
org.objectweb.asm.ClassWriter
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 ClassReader
and adapter class visitor
to generate a modified class from one or more existing Java classes.
Constructor Summary | |
| |
| |
|
Method Summary | |
int |
|
int |
|
int |
|
int |
|
int |
|
int |
|
byte[] |
|
void |
|
AnnotationVisitor |
|
void |
|
void |
|
FieldVisitor |
|
void |
|
MethodVisitor |
|
void |
|
void |
|
public ClassWriter(boolean computeMaxs)
Constructs a newClassWriter
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 thevisitMaxs
method of theMethodVisitor
returned by thevisitMethod
method will be ignored, and computed automatically from the signature and the bytecode of each method.
public ClassWriter(boolean computeMaxs, boolean skipUnknownAttributes)
Constructs a newClassWriter
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 thevisitMaxs
method of theMethodVisitor
returned by thevisitMethod
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.
public ClassWriter(ClassReader classReader, boolean computeMaxs)
Constructs a newClassWriter
object and enables optimizations for "mostly add" bytecode transformations. These optimizations are the following:
- The constant pool from the original class is copied as is in the new class, which saves time. New constant pool entries will be added at the end if necessary, but unused constant pool entries won't be removed.
- Methods that are not transformed are copied as is in the new class, directly from the original class bytecode (i.e. without emitting visit events for all the method instructions), which saves a lot of time. Untransformed methods are detected by the fact that the
ClassReader
receivesMethodVisitor
objects that come from aClassWriter
(and not from a customClassAdapter
or any otherClassVisitor
instance).
- Parameters:
classReader
- theClassReader
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 thevisitMaxs
method of theMethodVisitor
returned by thevisitMethod
method will be ignored, and computed automatically from the signature and the bytecode of each method.
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 forAttribute
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.
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 forAttribute
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 anInteger
, aFloat
, aLong
, aDouble
or aString
.
- Returns:
- the index of a new or already existing constant item with the given value.
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 forAttribute
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.
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 forAttribute
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.
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 forAttribute
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.
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 forAttribute
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.
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.
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces)
- Specified by:
- visit in interface ClassVisitor
public AnnotationVisitor visitAnnotation(String desc, boolean visible)
- Specified by:
- visitAnnotation in interface ClassVisitor
public void visitAttribute(Attribute attr)
- Specified by:
- visitAttribute in interface ClassVisitor
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value)
- Specified by:
- visitField in interface ClassVisitor
public void visitInnerClass(String name, String outerName, String innerName, int access)
- Specified by:
- visitInnerClass in interface ClassVisitor
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)
- Specified by:
- visitMethod in interface ClassVisitor
public void visitOuterClass(String owner, String name, String desc)
- Specified by:
- visitOuterClass in interface ClassVisitor
public void visitSource(String file, String debug)
- Specified by:
- visitSource in interface ClassVisitor