Class ClassFileWriter

java.lang.Object
javassist.bytecode.ClassFileWriter

public class ClassFileWriter extends Object
A quick class-file writer. This is useful when a generated class file is simple and the code generation should be fast.

Example:

ClassFileWriter cfw = new ClassFileWriter(ClassFile.JAVA_4, 0);
ConstPoolWriter cpw = cfw.getConstPool();

FieldWriter fw = cfw.getFieldWriter();
fw.add(AccessFlag.PUBLIC, "value", "I", null);
fw.add(AccessFlag.PUBLIC, "value2", "J", null);

int thisClass = cpw.addClassInfo("sample/Test");
int superClass = cpw.addClassInfo("java/lang/Object");

MethodWriter mw = cfw.getMethodWriter();

mw.begin(AccessFlag.PUBLIC, MethodInfo.nameInit, "()V", null, null);
mw.add(Opcode.ALOAD_0);
mw.add(Opcode.INVOKESPECIAL);
int signature = cpw.addNameAndTypeInfo(MethodInfo.nameInit, "()V");
mw.add16(cpw.addMethodrefInfo(superClass, signature));
mw.add(Opcode.RETURN);
mw.codeEnd(1, 1);
mw.end(null, null);

mw.begin(AccessFlag.PUBLIC, "one", "()I", null, null);
mw.add(Opcode.ICONST_1);
mw.add(Opcode.IRETURN);
mw.codeEnd(1, 1);
mw.end(null, null);

byte[] classfile = cfw.end(AccessFlag.PUBLIC, thisClass, superClass,
                           null, null);

The code above generates the following class:

package sample;
public class Test {
    public int value;
    public long value2;
    public Test() { super(); }
    public one() { return 1; }
}
Since:
3.13
  • Constructor Details

    • ClassFileWriter

      public ClassFileWriter(int major, int minor)
      Constructs a class file writer.
      Parameters:
      major - the major version (ClassFile.JAVA_4, ClassFile.JAVA_5, ...).
      minor - the minor version (0 for JDK 1.3 and later).
  • Method Details

    • getConstPool

      public ClassFileWriter.ConstPoolWriter getConstPool()
      Returns a constant pool.
    • getFieldWriter

      public ClassFileWriter.FieldWriter getFieldWriter()
      Returns a filed writer.
    • getMethodWriter

      public ClassFileWriter.MethodWriter getMethodWriter()
      Returns a method writer.
    • end

      public byte[] end(int accessFlags, int thisClass, int superClass, int[] interfaces, ClassFileWriter.AttributeWriter aw)
      Ends writing and returns the contents of the class file.
      Parameters:
      accessFlags - access flags.
      thisClass - this class. an index indicating its CONSTANT_Class_info.
      superClass - super class. an index indicating its CONSTANT_Class_info.
      interfaces - implemented interfaces. index numbers indicating their ClassInfo. It may be null.
      aw - attributes of the class file. May be null.
      See Also:
    • end

      public void end(DataOutputStream out, int accessFlags, int thisClass, int superClass, int[] interfaces, ClassFileWriter.AttributeWriter aw) throws IOException
      Ends writing and writes the contents of the class file into the given output stream.
      Parameters:
      accessFlags - access flags.
      thisClass - this class. an index indicating its CONSTANT_Class_info.
      superClass - super class. an index indicating its CONSTANT_Class_info.
      interfaces - implemented interfaces. index numbers indicating their CONSTATNT_Class_info. It may be null.
      aw - attributes of the class file. May be null.
      Throws:
      IOException
      See Also: