From c43f4a7cde41d04095feb027f33f3ab4da7248bd Mon Sep 17 00:00:00 2001 From: chibash Date: Wed, 4 Feb 2015 01:20:21 +0900 Subject: updated javadoc comments. makeClass(ClassFile cf) was added to ClassPool. --- src/main/javassist/bytecode/ClassFile.java | 29 +++++++++++++++++++++++++++-- src/main/javassist/bytecode/ConstPool.java | 12 +++++++++++- src/main/javassist/bytecode/FieldInfo.java | 9 +++++++++ src/main/javassist/bytecode/MethodInfo.java | 17 +++++++++++++++++ 4 files changed, 64 insertions(+), 3 deletions(-) (limited to 'src/main/javassist/bytecode') diff --git a/src/main/javassist/bytecode/ClassFile.java b/src/main/javassist/bytecode/ClassFile.java index cc7cae59..f27ff4d8 100644 --- a/src/main/javassist/bytecode/ClassFile.java +++ b/src/main/javassist/bytecode/ClassFile.java @@ -23,13 +23,38 @@ import java.util.ArrayList; import java.util.List; import java.util.ListIterator; import java.util.Map; + import javassist.CannotCompileException; /** * ClassFile represents a Java .class file, which * consists of a constant pool, methods, fields, and attributes. - * + * + *

For example, + *

+ * ClassFile cf = new ClassFile(false, "test.Foo", null);
+ * cf.setInterfaces(new String[] { "java.lang.Cloneable" });
+ *
+ * FieldInfo f = new FieldInfo(cf.getConstPool(), "width", "I");
+ * f.setAccessFlags(AccessFlag.PUBLIC);
+ * cf.addField(f);
+ *
+ * cf.write(new DataOutputStream(new FileOutputStream("Foo.class")));
+ * 
+ * This code generates a class file Foo.class for the following class: + *
+ * package test;
+ * class Foo implements Cloneable {
+ *     public int width;
+ * }
+ * 
+ *

+ * + * @see FieldInfo + * @see MethodInfo + * @see ClassFileWriter * @see javassist.CtClass#getClassFile() + * @see javassist.ClassPool#makeClass(ClassFile) */ public final class ClassFile { int major, minor; // version number @@ -132,7 +157,7 @@ public final class ClassFile { * @param classname * a fully-qualified class name * @param superclass - * a fully-qualified super class name + * a fully-qualified super class name or null. */ public ClassFile(boolean isInterface, String classname, String superclass) { major = MAJOR_VERSION; diff --git a/src/main/javassist/bytecode/ConstPool.java b/src/main/javassist/bytecode/ConstPool.java index f05dfd4f..78935160 100644 --- a/src/main/javassist/bytecode/ConstPool.java +++ b/src/main/javassist/bytecode/ConstPool.java @@ -94,10 +94,20 @@ public final class ConstPool { public static final int CONST_Utf8 = Utf8Info.tag; /** - * Cosnt_MethodHandle + * CONSTANT_MethodHandle */ public static final int CONST_MethodHandle = MethodHandleInfo.tag; + /** + * CONSTANT_MethodHandle + */ + public static final int CONST_MethodType = MethodTypeInfo.tag; + + /** + * CONSTANT_MethodHandle + */ + public static final int CONST_InvokeDynamic = InvokeDynamicInfo.tag; + /** * Represents the class using this constant pool table. */ diff --git a/src/main/javassist/bytecode/FieldInfo.java b/src/main/javassist/bytecode/FieldInfo.java index 485df3dd..cbba0a85 100644 --- a/src/main/javassist/bytecode/FieldInfo.java +++ b/src/main/javassist/bytecode/FieldInfo.java @@ -25,6 +25,15 @@ import java.util.ArrayList; /** * field_info structure. * + *

The following code adds a public field width + * of int type: + *

+ * ClassFile cf = ...
+ * FieldInfo f = new FieldInfo(cf.getConstPool(), "width", "I");
+ * f.setAccessFlags(AccessFlag.PUBLIC);
+ * cf.addField(f);
+ * 
+ * * @see javassist.CtField#getFieldInfo() */ public final class FieldInfo { diff --git a/src/main/javassist/bytecode/MethodInfo.java b/src/main/javassist/bytecode/MethodInfo.java index df436dda..4b8c1c4d 100644 --- a/src/main/javassist/bytecode/MethodInfo.java +++ b/src/main/javassist/bytecode/MethodInfo.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; + import javassist.ClassPool; import javassist.bytecode.stackmap.MapMaker; @@ -30,9 +31,25 @@ import javassist.bytecode.stackmap.MapMaker; * *

The bytecode sequence of the method is represented * by a CodeAttribute object. + * + *

The following code adds the default constructor to a class: + * of int type: + *

+ * ClassFile cf = ...
+ * Bytecode code = new Bytecode(cf.getConstPool());
+ * code.addAload(0);
+ * code.addInvokespecial("java/lang/Object", MethodInfo.nameInit, "()V");
+ * code.addReturn(null);
+ * code.setMaxLocals(1);
+ *
+ * MethodInfo minfo = new MethodInfo(cf.getConstPool(), MethodInfo.nameInit, "()V");
+ * minfo.setCodeAttribute(code.toCodeAttribute());
+ * cf.addMethod(minfo);
+ * 
* * @see #getCodeAttribute() * @see CodeAttribute + * @see Bytecode * @see javassist.CtMethod#getMethodInfo() * @see javassist.CtConstructor#getMethodInfo() */ -- cgit v1.2.3