Browse Source

updated javadoc comments. makeClass(ClassFile cf) was added to ClassPool.

tags/rel_3_20_0_ga
chibash 9 years ago
parent
commit
c43f4a7cde

+ 7
- 0
Readme.html View 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,

BIN
javassist.jar View File


+ 50
- 0
src/main/javassist/ClassPool.java View 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

+ 1
- 1
src/main/javassist/CtClass.java View 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.

+ 6
- 0
src/main/javassist/CtClassType.java View 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 ");

+ 27
- 2
src/main/javassist/bytecode/ClassFile.java View 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;

+ 11
- 1
src/main/javassist/bytecode/ConstPool.java View 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.
*/

+ 9
- 0
src/main/javassist/bytecode/FieldInfo.java View 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 {

+ 17
- 0
src/main/javassist/bytecode/MethodInfo.java View 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()
*/

Loading…
Cancel
Save