]> source.dussan.org Git - javassist.git/commitdiff
updated javadoc comments. makeClass(ClassFile cf) was added to ClassPool.
authorchibash <chiba@javassist.org>
Tue, 3 Feb 2015 16:20:21 +0000 (01:20 +0900)
committerchibash <chiba@javassist.org>
Tue, 3 Feb 2015 16:20:21 +0000 (01:20 +0900)
Readme.html
javassist.jar
src/main/javassist/ClassPool.java
src/main/javassist/CtClass.java
src/main/javassist/CtClassType.java
src/main/javassist/bytecode/ClassFile.java
src/main/javassist/bytecode/ConstPool.java
src/main/javassist/bytecode/FieldInfo.java
src/main/javassist/bytecode/MethodInfo.java

index 745a0729b100c9f95f75cf352a316925281177d3..0b9ea9ebac46b6cf7ae861892dfa7ebb0dc793b3 100644 (file)
@@ -281,6 +281,13 @@ see javassist.Dump.
 
 <h2>Changes</h2>
 
+<p>-version 3.20
+<ul>
+<li>JIRA JASSIST-241
+</ul>
+</p>
+
+
 <p>-version 3.19 on January 6, 2015
 <ul>
 <li>JIRA JASSIST-158, 205, 206, 207, 208, 209, 211, 212, 216, 220, 223, 224,
index 4548862277b6290ca0b61e280754337b976bb731..8fdba885b64f01715e0ec64d914a66e00df60565 100644 (file)
Binary files a/javassist.jar and b/javassist.jar differ
index a1e46e2e94312378f1d046640205a033748c1807..c90c2c7408ffb6f8be30e4453323877342909f89 100644 (file)
@@ -31,6 +31,8 @@ import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.ArrayList;
 import java.util.Enumeration;
+
+import javassist.bytecode.ClassFile;
 import javassist.bytecode.Descriptor;
 
 /**
@@ -734,6 +736,54 @@ public class ClassPool {
         return clazz;
     }
 
+    /**
+     * Creates a new class (or interface) from the given class file.
+     * If there already exists a class with the same name, the new class
+     * overwrites that previous class.
+     *
+     * <p>This method is used for creating a <code>CtClass</code> object
+     * directly from a class file.  The qualified class name is obtained
+     * from the class file; you do not have to explicitly give the name.
+     *
+     * @param classfile         class file.
+     * @throws RuntimeException if there is a frozen class with the
+     *                          the same name.
+     * @since 3.20
+     */
+    public CtClass makeClass(ClassFile classfile)
+        throws RuntimeException
+    {
+        return makeClass(classfile, true);
+    }
+
+    /**
+     * Creates a new class (or interface) from the given class file.
+     * If there already exists a class with the same name, the new class
+     * overwrites that previous class.
+     *
+     * <p>This method is used for creating a <code>CtClass</code> object
+     * directly from a class file.  The qualified class name is obtained
+     * from the class file; you do not have to explicitly give the name.
+     *
+     * @param classfile     class file.
+     * @param ifNotFrozen       throws a RuntimeException if this parameter is true
+     *                          and there is a frozen class with the same name.
+     * @since 3.20
+     */
+    public CtClass makeClass(ClassFile classfile, boolean ifNotFrozen)
+        throws RuntimeException
+    {
+        compress();
+        CtClass clazz = new CtClassType(classfile, this);
+        clazz.checkModify();
+        String classname = clazz.getName();
+        if (ifNotFrozen)
+            checkNotFrozen(classname);
+
+        cacheCtClass(classname, clazz, true);
+        return clazz;
+    }
+
     /**
      * Creates a new class (or interface) from the given class file.
      * If there already exists a class with the same name, this method
index 251cd10f523520ab3865af307d25c3000f5da43a..fc8288476460fbd91c4eff17dcb5d76e0d6663cf 100644 (file)
@@ -69,7 +69,7 @@ public abstract class CtClass {
     /**
      * The version number of this release.
      */
-    public static final String version = "3.19.0-GA";
+    public static final String version = "3.20.0-GA";
 
     /**
      * Prints the version number and the copyright notice.
index 2f875f65525cb3197401318a51a67cda27ce4603..e86780d3e1cd0d4c83fc633d61e38ae60e6aba15 100644 (file)
@@ -97,6 +97,12 @@ class CtClassType extends CtClass {
         qualifiedName = classfile.getName();
     }
 
+    CtClassType(ClassFile cf, ClassPool cp) {
+        this((String)null, cp);
+        classfile = cf;
+        qualifiedName = classfile.getName();
+    }
+
     protected void extendToString(StringBuffer buffer) {
         if (wasChanged)
             buffer.append("changed ");
index cc7cae596912a80a5aa30f4bddd1dca86aade6b9..f27ff4d8fd9504f0d343c09711bb25d7493a30aa 100644 (file)
@@ -23,13 +23,38 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
+
 import javassist.CannotCompileException;
 
 /**
  * <code>ClassFile</code> represents a Java <code>.class</code> file, which
  * consists of a constant pool, methods, fields, and attributes.
- * 
+ *
+ * <p>For example,
+ * <blockquote><pre>
+ * 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")));
+ * </pre></blockquote>
+ * This code generates a class file <code>Foo.class</code> for the following class:
+ * <blockquote><pre>
+ * package test;
+ * class Foo implements Cloneable {
+ *     public int width;
+ * }
+ * </pre></blockquote>
+ * </p>
+ *
+ * @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;
index f05dfd4f760fbf978f37c56758de15dfe3cfb5ff..789351604509b4a0e4c8451d1709703e18032bd3 100644 (file)
@@ -94,10 +94,20 @@ public final class ConstPool {
     public static final int CONST_Utf8 = Utf8Info.tag;
 
     /**
-     * <code>Cosnt_MethodHandle</code>
+     * <code>CONSTANT_MethodHandle</code>
      */
     public static final int CONST_MethodHandle = MethodHandleInfo.tag;
 
+    /**
+     * <code>CONSTANT_MethodHandle</code>
+     */
+    public static final int CONST_MethodType = MethodTypeInfo.tag;
+
+    /**
+     * <code>CONSTANT_MethodHandle</code>
+     */
+    public static final int CONST_InvokeDynamic = InvokeDynamicInfo.tag;
+
     /**
      * Represents the class using this constant pool table.
      */
index 485df3ddbf3cab6d9c3ca3fad1b98b6e2200ca40..cbba0a85792475a953ece7d455ec734603fa27ff 100644 (file)
@@ -25,6 +25,15 @@ import java.util.ArrayList;
 /**
  * <code>field_info</code> structure.
  *
+ * <p>The following code adds a public field <code>width</code>
+ * of <code>int</code> type:
+ * <blockquote><pre>
+ * ClassFile cf = ...
+ * FieldInfo f = new FieldInfo(cf.getConstPool(), "width", "I");
+ * f.setAccessFlags(AccessFlag.PUBLIC);
+ * cf.addField(f);
+ * </pre></blockquote>
+ *
  * @see javassist.CtField#getFieldInfo()
  */
 public final class FieldInfo {
index df436dda40b2e76db0186bd8b794e26c144feb85..4b8c1c4de616eb315c43e9c37638dd7fc1253012 100644 (file)
@@ -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;
  *
  * <p>The bytecode sequence of the method is represented
  * by a <code>CodeAttribute</code> object.
+ *
+ * <p>The following code adds the default constructor to a class:
+ * of <code>int</code> type:
+ * <blockquote><pre>
+ * 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);
+ * </pre></blockquote>
  * 
  * @see #getCodeAttribute()
  * @see CodeAttribute
+ * @see Bytecode
  * @see javassist.CtMethod#getMethodInfo()
  * @see javassist.CtConstructor#getMethodInfo()
  */