<html>
<HEAD>
   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
   <TITLE>Read Me First</TITLE>
</HEAD>
<body>

<h1>Javassist version 3</h1>

<h3>Copyright (C) 1999-2018 by Shigeru Chiba, All rights reserved.</h3>

<p><br></p>

<p>Javassist (JAVA programming ASSISTant) makes Java bytecode manipulation
simple.  It is a class library for editing bytecodes in Java;
it enables Java programs to define a new class at runtime and to
modify a class file when the JVM loads it.  Unlike other similar
bytecode editors, Javassist provides two levels of API: source level
and bytecode level.  If the users use the source-level API, they can
edit a class file without knowledge of the specifications of the Java
bytecode.  The whole API is designed with only the vocabulary of the
Java language.  You can even specify inserted bytecode in the form of
source text; Javassist compiles it on the fly.  On the other hand, the
bytecode-level API allows the users to directly edit a class file as
other editors.

<p><br>

<h2>Files</h2>

<ul>
<table>
<tr>
<td><li><tt><a href="License.html">License.html</a></tt></td>
<td>License file (MPL/LGPL/Apache triple license)
(Also see the <a href="#copyright">copyright notices</a> below)</td>
</tr>

<tr>
<td><li><tt><a href="tutorial/tutorial.html">tutorial/tutorial.html</a></tt></td>
<td>Tutorial</td>
</tr>

<tr>
<td><li><tt>./javassist.jar</tt></td>
<td>The Javassist jar file (class files)</td>
</tr>

<tr>
<td><li><tt>./src/main</tt></td>
<td>The source files</td>
</tr>

<tr>
<td><li><tt><a href="html/index.html">html/index.html</a></tt></td>
<td>The top page of the Javassist API document.</td>
</tr>

<tr>
<td><li><tt>./sample/</tt></td>
<td>Sample programs</td>
</tr>
</table>
</ul>

<p><br>

<h2>How to run sample programs</h2>

<p>JDK 1.4 or later is needed.

<h3>0. If you have Apache Ant</h3>

<p>Run the sample-all task.
Otherwise, follow the instructions below.

<h3>1. Move to the directory where this Readme.html file is located.</h3>

<p>In the following instructions, we assume that the javassist.jar
file is included in the class path.
For example, the javac and java commands must receive
the following <code>classpath</code> option:

<ul><pre>
-classpath ".:javassist.jar"
</pre></ul>

<p>If the operating system is Windows, the path
separator must be not <code>:</code> (colon) but
<code>;</code> (semicolon).  The java command can receive
the <code>-cp</code> option
as well as <code>-classpath</code>.

<p>If you don't want to use the class-path option, you can make
<code>javassist.jar</code> included in the <code>CLASSPATH</code>
environment:

<ul><pre>
export CLASSPATH=.:javassist.jar
</pre></ul>

<p>or if the operating system is Windows:

<ul><pre>
set CLASSPATH=.;javassist.jar
</pre></ul>


<p>Otherwise, you can copy <tt>javassist.jar</tt> to the directory

<ul>&lt;<i>java-home</i>&gt;<tt>/jre/lib/ext</tt>.</ul>

<p>&lt;<i>java-home</i>&gt; depends on the system.  It is usually
<tt>/usr/local/java</tt>, <tt>c:\j2sdk1.4\</tt>, etc.

<h3>2. sample/Test.java</h3>

<p>   This is a very simple program using Javassist.

<p>   To run, type the commands:

<ul><pre>
% javac sample/Test.java
% java sample.Test
</pre></ul>

<p>   For more details, see <a type="text/plain" href="sample/Test.java">sample/Test.java</a>

<h3>3. sample/reflect/*.java</h3>

<p>   This is the "verbose metaobject" example well known in reflective
   programming.  This program dynamically attaches a metaobject to
   a Person object.  The metaobject prints a message if a method
   is called on the Person object.

<p>   To run, type the commands:

<ul><pre>
% javac sample/reflect/*.java
% java javassist.tools.reflect.Loader sample.reflect.Main Joe
</pre></ul>

<p>Compare this result with that of the regular execution without reflection:

<ul><pre>% java sample.reflect.Person Joe</pre></ul>

<p>   For more details, see <a type="text/plain" href="sample/reflect/Main.java">sample/reflect/Main.java</a>

<p>   Furthermore, the Person class can be statically modified so that
   all the Person objects become reflective without sample.reflect.Main.
   To do this, type the commands:

<ul><pre>
% java javassist.tools.reflect.Compiler sample.reflect.Person -m sample.reflect.VerboseMetaobj
</pre></ul>

<p>   Then,
<ul><pre>
% java sample.reflect.Person Joe
</pre></ul>

<h3>4. sample/duplicate/*.java</h3>

<p>   This is another example of reflective programming.

<p>   To run, type the commands:

<ul><pre>
% javac sample/duplicate/*.java
% java sample.duplicate.Main
</pre></ul>

<p>Compare this result with that of the regular execution without reflection:

<ul><pre>% java sample.duplicate.Viewer</pre></ul>

<p>For more details, see
<a type="text/plain" href="sample/duplicate/Main.java">sample/duplicate/Main.java</a>

<h3>5. sample/vector/*.java</h3>

<p>This example shows the use of Javassit for producing a class representing
a vector of a given type at compile time.

<p>   To run, type the commands:
<ul><pre>
% javac sample/vector/*.java
% java sample.preproc.Compiler sample/vector/Test.j
% javac sample/vector/Test.java
% java sample.vector.Test
</pre></ul>

<p>Note: <code>javassist.jar</code> is unnecessary to compile and execute
<code>sample/vector/Test.java</code>.

For more details, see
<a type="text/plain" href="sample/vector/Test.j">sample/vector/Test.j</a>
and <a type="text/plain" href="sample/vector/VectorAssistant.java">sample/vector/VectorAssistant.java</a>

<h3>6. sample/rmi/*.java</h3>

<p>   This demonstrates the javassist.rmi package.

<p>   To run, type the commands:
<ul><pre>
% javac sample/rmi/*.java
% java sample.rmi.Counter 5001
</pre></ul>

<p>   The second line starts a web server listening to port 5001.

<p>   Then, open <a href="sample/rmi/webdemo.html">sample/rmi/webdemo.html</a>
with a web browser running
   on the local host.  (<tt>webdemo.html</tt> trys to fetch an applet from
   <tt>http://localhost:5001/</tt>, which is the web server we started above.)

<p>   Otherwise, run sample.rmi.CountApplet as an application:

<ul><pre>
% java javassist.web.Viewer localhost 5001 sample.rmi.CountApplet
</pre></ul>

<h3>7. sample/evolve/*.java</h3>

<p>   This is a demonstration of the class evolution mechanism implemented
   with Javassist.  This mechanism enables a Java program to reload an
   existing class file under some restriction.

<p>   To run, type the commands:
<ul><pre>
% javac sample/evolve/*.java
% java sample.evolve.DemoLoader 5003
</pre></ul>

<p>   The second line starts a class loader DemoLoader, which runs a web
   server DemoServer listening to port 5003.

<p>   Then, open <a href="http://localhost:5003/demo.html">http://localhost:5003/demo.html</a> with a web browser running
   on the local host.
(Or, see <a href="sample/evolve/start.html">sample/evolve/start.html</a>.)

<h3>8. sample/hotswap/*.java</h3>

<p>This shows dynamic class reloading by the JPDA.  It needs JDK 1.4 or later.
To run, first type the following commands:

<ul><pre>
% cd sample/hotswap
% javac *.java
% cd logging
% javac *.java
% cd ..
</pre></ul>

<p>If your Java is 1.4, then type:

<ul><pre>
% java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 Test
</pre></ul>

<p>If you are using Java 5, then type:

<ul><pre>
% java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 Test
</pre></ul>

<p>Note that the class path must include <code>JAVA_HOME/lib/tools.jar</code>.

<h2>Hints</h2>

<p>To know the version number, type this command:

<ul><pre>
% java -jar javassist.jar
</pre></ul>

<p>Javassist provides a class file viewer for debugging.  For more details,
see javassist.Dump.

<p><br>

<h2>Changes</h2>

<p>-version 3.24.1 on December 9, 2018
<ul>
    <li>GitHub Issue #228, #229</li>
<ul>
</p>

<p>-version 3.24 on November 1, 2018
<ul>
    <li>Java 11 supports.</li>
    <li>JIRA JASSIST-267.</li>
    <li>Github PR #218.</li>
</ul>
</p>

<p>-version 3.23.1 on July 2, 2018
<ul>
    <li>Github PR #171.</li>
</ul>
</p>

<p>-version 3.23 on June 21, 2018

<ul>
    <li>Fix leaking file handlers in ClassPool and removed ClassPath.close(). Github issue #165.
</ul>
</p>

<p>-version 3.22 on October 10, 2017

<ul>
<li>Java 9 supports.
<li>JIRA JASSIST-261.
</ul>
</p>

<p>-version 3.21 on October 4, 2016
<ul>
<li>JIRA JASSIST-244, 245, 248, 250, 255, 256, 259, 262.
<li><code>javassist.tools.Callback</code> was modified to be Java 1.4 compatible.
The parameter type of <code>Callback#result()</code> was changed.
<li>The algorithm for generating a stack-map table was modified to fix github issue #83.
<li>A bug of ProxyFactory related to default methods was fixed.  It is github issue #45. 
</ul>
</p>

<p>-version 3.20 on June 25, 2015
<ul>
<li>JIRA JASSIST-241, 242, 246.
</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,
        227, 230, 234, 235, 236, 237, 238, 240.
</ul>
</p>

<p>-version 3.18 on June 3, 2013
<ul>
<li>The source code repository has been moved to <a href="https://github.com/jboss-javassist/javassist">GitHub</a></li>.

<li>JIRA JASSIST-181, 183, 184, 189, 162, 185, 186, 188, 190, 195, 199, 201.
</ul>

<p>-version 3.17.1 on December 3, 2012
<ul>
	<li>JIRA JASSIST-177, 178, 182.
</ul>


<p>-version 3.17 on November 8, 2012
<ul>
	<li>OSGi bundle info is now included in the jar file.
	<li>A stackmap generator has been rewritten.
	<li>JIRA JASSIST-160, 163, 166, 168, 170, 171, 174, 175, 176 have been fixed.
</ul>

<p>-version 3.16.1 on March 6, 2012
<ul>
	<li>Maven now works.  JIRA JASSIST-44, 106, 156 have been fixed.
</ul>

<p>-version 3.16 on February 19, 2012
<ul>
	<li>JIRA JASSIST-126, 127, 144, 145, 146, 147, 149, 150, 151, 152, 153, 155.
	<li><code>javassist.bytecode.analysis.ControlFlow</code> was added.
	<li>Java 7 compatibility.
</ul>

<p>-version 3.15 on July 8, 2011
<ul>
   	<li>The license was changed to MPL/LGPL/Apache triple.
   	<li>JIRA JASSIST-138 and 142 were fixed.
</ul>

<p>-version 3.14 on October 5, 2010

<ul>
	<li>JIRA JASSIST-121, 123, 128, 129, 130, 131, 132.
</ul>

<p>-version 3.13 on July 19, 2010

<ul>
	<li>JIRA JASSIST-118, 119, 122, 124, 125.
</ul>

<p>-version 3.12.1 on June 10, 2010

<p>-version 3.12 on April 16, 2010

<p>-version 3.11 on July 3, 2009
<ul>
	<li>JIRA JASSIST-67, 68, 74, 75, 76, 77, 81, 83, 84, 85, 86, 87 were fixed.
	<li>Now javassist.bytecode.CodeIterator can insert a gap into
	a large method body more than 32KB.  (JIRA JASSIST-79, 80)
</ul>

<p>-version 3.10 on March 5, 2009

<ul>
	<li>JIRA JASSIST-69, 70, 71 were fixed.
</ul>

<p>-version 3.9 on October 9, 2008
<ul>
	<li>ClassPool.makeClassIfNew(InputStream) was implemented.
	<li>CtNewMethod.wrapped(..) and CtNewConstructor.wrapped(..)
	implicitly append a method like _added_m$0.
	This method now has a synthetic attribute.
    <li>JIRA JASSIST-66 has been fixed.
</ul>

<p>-version 3.8.1 on July 17, 2008
<ul>
	<li>CtClass.rebuildClassFile() has been added.
	<li>A few bugs of javassist.bytecode.analysis have been fixed.
	3.8.0 could not correctly deal with one letter class name
	such as I and J.
</ul>

<p>-version 3.8.0 on June 13, 2008
<ul>
    <li>javassist.bytecode.analysis was implemented.
  	<li>JASSIST-45, 47, 51, 54-57, 60, 62 were fixed.
</ul>

<p>-version 3.7.1 on March 10, 2008
<ul>
    <li>a bug of javassist.util.proxy has been fixed.
</ul>

<p>-version 3.7 on January 20, 2008
<ul>
	<li>Several minor bugs have been fixed.
</ul>

<p>-version 3.6.0 on September 13, 2007

<p>-version 3.6.0.CR1 on July 27, 2007

<ul>
    <li>The stack map table introduced since Java 6 has been supported.
    <li>CtClass#getDeclaredBehaviors() now returns a class initializer
        as well as methods and constructors.
    <li>The default status of automatic pruning was made off.
        Instead of pruning, this version of Javassist compresses
        the data structure of a class file after toBytecode() is called.
        The compressed class file is automatically decompressed when needed.
        This saves memory space better than pruning.
    <li><a href="http://jira.jboss.com/jira/browse/JASSIST-33">JIRA JASSIST-33</a> has been fixed.
</ul>

<p>-version 3.5 on April 29, 2007
<ul>
	<li>Various minor updates.
</ul>

<p>-version 3.4 on November 17, 2006
<ul>
	<li>A bug in CodeConverter#replaceFieldRead() and CodeConverter#replaceFieldWrite()
	was fixed. <a href="http://jira.jboss.com/jira/browse/JBAOP-284">JBAOP-284</a>.

    <li>A synchronization bug and a performance bug in <code>javassist.util.proxy</code>
    have been fixed
    (<a href="http://jira.jboss.com/jira/browse/JASSIST-28">JASSIST-28</a>).
    Now generated proxy classes are cached.  To turn the caching off,
    set <code>ProxyFactory.useCache</code> to <code>false</code>.
</ul>

<p>-version 3.3 on August 17, 2006
<ul>
    <li>CtClass#toClass() and ClassPool#toClass() were modified to accept a
    <code>ProtectionDomain</code>
    (<a href="http://jira.jboss.com/jira/browse/JASSIST-23">JASSIST-23</a>).
    Now ClassPool#toClass(CtClass, ClassLoader) should not be overridden.  All
    subclasses of ClassPool must override toClass(CtClass, ClassLoader,
    ProtectionDomain).

    <li>CtClass#getAvailableAnnotations() etc. have been implemented.

    <li>A bug related to a way of dealing with a bridge method was fixed
    (<a href="http://jira.jboss.com/jira/browse/HIBERNATE-37">HIBERNATE-37</a>).

    <li>javassist.scopedpool package was added.
</ul>

<p>-version 3.2 on June 21, 2006

<ul>
	<li>The behavior of CtBehavior#getParameterAnnotations() has been changed.
	It is now compatible to Java Reflection API
	(<a href="http://jira.jboss.com/jira/browse/JASSIST-19">JASSIST-19</a>).
</ul>

<p>- version 3.2.0.CR2 on May 9, 2006
<ul>
   <li>A bug of replace(String,ExprEditor) in javassist.expr.Expr has been fixed.
  <li>Updated ProxyFactory getClassLoader to choose the javassit class loader
   when the proxy superclass has a null class loader (a jdk/endorsed class)
   (<a href='http://jira.jboss.com/jira/browse/JASSIST-18'>JASSIST-18</a>).
  <li>Updated the throws clause of the javassist.util.proxy.MethodHandler
   to be Throwable rather than Exception
   (<a href='http://jira.jboss.com/jira/browse/JASSIST-16'>JASSIST-16</a>).
</ul>

<p>- version 3.2.0.CR1 on March 18, 2006
<ul>
  <li>Annotations enhancements to javassist.bytecode.MethodInfo.
  <li>Allow a ClassPool to override the "guess" at the classloader to use.
</ul>

<p>- version 3.1 on February 23, 2006

<ul>
  <li>getFields(), getMethods(), and getConstructors() in CtClass
    were changed to return non-private memebers instead of only
    public members.
  <li>getEnclosingClass() in javassist.CtClass was renamed
      to getEnclosingMethod().
  <li>getModifiers() was extended to return Modifier.STATIC if the class
      is a static inner class.
  <li>The return type of CtClass.stopPruning() was changed from void
    to boolean.
  <li>toMethod() in javassist.CtConstructor has been implemented.
  <li>It includes new javassist.util.proxy package
      similar to Enhancer of CGLIB.
  <p>
  <li>The subpackages of Javassist were restructured.
  <ul>
    <li>javassist.tool package was renamed to javassist.tools.
    <li>HotSwapper was moved to javassist.util.
    <li>Several subpackages were moved to javassist.tools.
    <li>javassist.preproc package was elminated and the source was
        moved to the sample directory.
  </ul>
</ul>

<p>- version 3.1 RC2 on September 7, 2005

<ul>
  <li>RC2 is released mainly for an administrative reason.
  <li>A few bugs have been fixed.
</ul>

<p>- version 3.1 RC1 on August 29, 2005

<ul>
  <li>Better annotation supports.  See <code>CtClass.getAnnotations()</code>
  <li>javassist.tool.HotSwapper was added.
  <li>javassist.ClassPool.importPackage() was added.
  <li>The compiler now accepts array initializers
    (only one dimensional arrays).
  <li>javassist.Dump was moved to javassist.tool.Dump.
  <li>Many bugs were fixed.
</ul>

<p>- version 3.0 on January 18, 2005

<ul>
  <li>The compiler now supports synchronized statements and finally
  clauses.
  <li>You can now remove a method and a field.
</ul>

<p>- version 3.0 RC1 on September 13, 2004.

<ul>
  <li>CtClass.toClass() has been reimplemented.  The behavior has been
      changed.
  <li>javassist.expr.NewArray has been implemented.  It enables modifying
      an expression for array creation.
  <li><code>.class</code> notation has been supported.  The modified class
      file needs javassist.runtime.DotClass at runtime.
  <li>a bug in <code>CtClass.getMethods()</code> has been fixed.
  <li>The compiler supports a switch statement.
</ul>

<p>- version 3.0 beta on May 18th, 2004.

<ul>
  <li>The ClassPool framework has been redesigned.
     <ul>
     <li>writeFile(), write(), ... in ClassPool have been moved to CtClass.
     <li>The design of javassist.Translator has been changed.
     </ul>

  <li>javassist.bytecode.annotation has been added for meta tags.
  <li>CtClass.makeNestedClass() has been added.
  <li>The methods declared in javassist.bytecode.InnerClassesAttribute
      have been renamed a bit.
  <li>Now local variables were made available in the source text passed to
  CtBehavior.insertBefore(), MethodCall.replace(), etc.
  <li>CtClass.main(), which prints the version number, has been added.
  <li>ClassPool.SimpleLoader has been public.
  <li>javassist.bytecode.DeprecatedAttribute has been added.
  <li>javassist.bytecode.LocalVariableAttribute has been added.
  <li>CtClass.getURL() and javassist.ClassPath.find() has been added.
  <li>CtBehavior.insertAt() has been added.
  <li>CtClass.detach() has been added.
  <li>CodeAttribute.computeMaxStack() has been added.
</ul>

<p>- version 2.6 in August, 2003.

<ul>
  <li>The behavior of CtClass.setSuperclass() was changed.
      To obtain the previous behavior, call CtClass.replaceClassName().
  <li>CtConstructor.setBody() now works for class initializers.
  <li>CtNewMethod.delegator() now works for static methods.
  <li>javassist.expr.Expr.indexOfBytecode() has been added.
  <li>javassist.Loader has been modified so that getPackage() returns
      a package object.
  <li>Now, the compiler can correctly compile a try statement and an
      infinite while-loop.
</ul>

<p>- version 2.5.1 in May, 2003.
<br>Simple changes for integration with JBoss AOP
<ul>
  <li>Made ClassPool.get0 protected so that subclasses of ClassPool can call it.
  <li>Moved all access to the class cache (the field ClassPool.classes) to a method called getCached(String classname).  This is so subclasses of ClassPool can override this behavior.
</ul>

<p>- version 2.5 in May, 2003.
<br>From this version, Javassist is part of the JBoss project.
<ul>
  <li>The license was changed from MPL to MPL/LGPL dual.
  <li>ClassPool.removeClassPath() and ClassPath.close() have been added.
  <li>ClassPool.makeClass(InputStream) has been added.
  <li>CtClass.makeClassInitializer() has been added.
  <li>javassist.expr.Expr has been changed to a public class.
  <li>javassist.expr.Handler has been added.
  <li>javassist.expr.MethodCall.isSuper() has been added.
  <li>CtMethod.isEmpty() and CtConstructor.isEmpty() have been added.
  <li>LoaderClassPath has been implemented.
</ul>

<p>- version 2.4 in February, 2003.
<ul>
  <li>The compiler included in Javassist did not correctly work with
	interface methods.  This bug was fixed.
  <li>Now javassist.bytecode.Bytecode allows more than 255 local
	variables in the same method.
  <li>javassist.expr.Instanceof and Cast have been added.
  <li>javassist.expr.{MethodCall,NewExpr,FieldAccess,Instanceof,Cast}.where()
        have been added.  They return the caller-side method surrounding the
	expression.
  <li>javassist.expr.{MethodCall,NewExpr,FieldAccess,Instanceof,Cast}.mayThrow()
        have been added.
  <li>$class has been introduced.
  <li>The parameters to replaceFieldRead(), replaceFieldWrite(),
      and redirectFieldAccess() in javassist.CodeConverter are changed.
  <li>The compiler could not correctly handle a try-catch statement.
      This bug has been fixed.
</ul>

<p>- version 2.3 in December, 2002.
<ul>
  <li>The tutorial has been revised a bit.
  <li>SerialVersionUID class was donated by Bob Lee.  Thanks.
  <li>CtMethod.setBody() and CtConstructor.setBody() have been added.
  <li>javassist.reflect.ClassMetaobject.useContextClassLoader has been added.
  If true, the reflection package does not use Class.forName() but uses
  a context class loader specified by the user.
  <li>$sig and $type are now available.
  <li>Bugs in Bytecode.write() and read() have been fixed.
</ul>

<p>- version 2.2 in October, 2002.
<ul>
  <li>The tutorial has been revised.
  <li>A new package <code>javassist.expr</code> has been added.
        This is replacement of classic <code>CodeConverter</code>.
  <li>javassist.ConstParameter was changed into
	javassist.CtMethod.ConstParameter.
  <li>javassist.FieldInitializer was renamed into
	javassist.CtField.Initializer.
  <li>A bug in javassist.bytecode.Bytecode.addInvokeinterface() has been
	fixed.
  <li>In javassist.bytecode.Bytecode, addGetfield(), addGetstatic(),
	addInvokespecial(), addInvokestatic(), addInvokevirtual(),
	and addInvokeinterface()
	have been modified to update the current statck depth.
</ul>

<p>- version 2.1 in July, 2002.
<ul>
  <li>javassist.CtMember and javassist.CtBehavior have been added.
  <li>javassist.CtClass.toBytecode() has been added.
  <li>javassist.CtClass.toClass() and javassist.ClassPool.writeAsClass()
	has been added.
  <li>javassist.ByteArrayClassPath has been added.
  <li>javassist.bytecode.Mnemonic has been added.
  <li>Several bugs have been fixed.
</ul>

<p>- version 2.0 (major update) in November, 2001.
<ul>
  <li>The javassist.bytecode package has been provided.  It is a
    lower-level API for directly modifying a class file although
    the users must have detailed knowledge of the Java bytecode.

  <li>The mechanism for creating CtClass objects have been changed.

  <li>javassist.tool.Dump moves to the javassist package.
</ul>

<p>version 1.0 in July, 2001.
<ul>
  <li>javassist.reflect.Metaobject and ClassMetaobject was changed.
    Now they throw the same exception that they receive from a
    base-level object.
</ul>

<p>- version 0.8
<ul>
  <li>javassist.tool.Dump was added.  It is a class file viewer.

  <li>javassist.FiledInitializer.byNewArray() was added.  It is for
    initializing a field with an array object.

  <li>javassist.CodeConverter.redirectMethodCall() was added.

  <li>javassist.Run was added.
</ul>

<p>- version 0.7
<ul>
  <li>javassit.Loader was largely modified.  javassist.UserLoader was
    deleted.  Instead, Codebase was renamed to ClassPath
    and UserClassPath was added.  Now programmers who want to
    customize Loader must write a class implementing UserClassPath
    instead of UserLoader.  This change is for sharing class search paths
    between Loader and CtClass.CtClass(String).

  <li>CtClass.addField(), addMethod(), addConstructor(), addWrapper() were
    also largely modified so that it receives CtNewMethod, CtNewConstructor,
    or CtNewField.  The static methods for creating these objects were
    added to the API.

  <li>Constructors are now represented by CtConstructor objects.
    CtConstructor is a subclass of CtMethod.

  <li>CtClass.getUserAttribute() was removed.  Use CtClass.getAttribute().

  <li>javassist.rmi.RmiLoader was added.

  <li>javassist.reflect.Metalevel._setMetaobject() was added.  Now
    metaobjects can be replaced at runtime.
</ul>

<p>- version 0.6
<ul>
  <li>Javassist was modified to correctly deal with array types appearing
    in signatures.

  <li>A bug crashed resulting bytecode if a class includes a private static
    filed.  It has been fixed.

  <li>javassist.CtNewInterface was added.

  <li>javassist.Loader.recordClass() was renamed into makeClass().

  <li>javassist.UserLoader.loadClass() was changed to take the second
    parameter.
</ul>

<p>- version 0.5
<ul>
  <li>a bug-fix version.
</ul>

<p>- version 0.4
<ul>
  <li>Major update again.  Many classes and methods were changed.
    Most of methods taking java.lang.Class have been changed to
    take javassist.CtClass.
</ul>

<p>- version 0.3
<ul>
  <li>Major update.  Many classes and methods were changed.
</ul>

<p>- version 0.2
<ul>
  <li>Jar/zip files are supported.
</ul>

<p>-version 0.1 on April 16, 1999.
<ul>
  <li>The first release.
</ul>

<p><br>

<a name="copyright">
<h2>Copyright notices</h2>

<p>Javassist, a Java-bytecode translator toolkit.
<br>Copyright (C) 1999- Shigeru Chiba. All Rights Reserved.

<p>The contents of this software, Javassist, are subject to
the Mozilla Public License Version 1.1 (the "License");<br>
you may not use this software except in compliance 
with the License. You may obtain a copy of the License at 
<br>http://www.mozilla.org/MPL/ 

<p>Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF <br>ANY KIND, either express or implied.
See the License for the specific language governing rights and
<br>limitations under the License. 

<p>The Original Code is Javassist. 

<p>The Initial Developer of the Original Code is Shigeru Chiba. 
Portions created by the Initial Developer are<br>&nbsp;
Copyright (C) 1999- Shigeru Chiba. All Rights Reserved. 
<p>Contributor(s): __Bill Burke, Jason T. Greene______________. 

<p>Alternatively, the contents of this software may be used under the
terms of the GNU Lesser General Public License Version 2.1 or later
(the "LGPL"), or the Apache License Version 2.0 (the "AL"),
in which case the provisions of the LGPL or the AL are applicable
instead of those above. If you wish to allow use of your version of
this software only under the terms of either the LGPL or the AL, and not to allow others to
use your version of this software under the terms of the MPL, indicate
your decision by deleting the provisions above and replace them with
the notice and other provisions required by the LGPL or the AL. If you do not
delete the provisions above, a recipient may use your version of this
software under the terms of any one of the MPL, the LGPL or the AL.

<p>If you obtain this software as part of JBoss, the contents of this
software may be used under only the terms of the LGPL.  To use them
under the MPL, you must obtain a separate package including only
Javassist but not the other part of JBoss.

<p>All the contributors to the original source tree have agreed to
the original license term described above.

<p><br>

<h2>Acknowledgments</h2>

<p>The development of this software is sponsored in part by the PRESTO
and CREST programs of <a href="http://www.jst.go.jp/">Japan
Science and Technology Corporation</a>.

<p>I'd like to thank Michiaki Tatsubori, Johan Cloetens,
Philip Tomlinson, Alex Villazon, Pascal Rapicault, Dan HE, Eric Tanter,
Michael Haupt, Toshiyuki Sasaki, Renaud Pawlak, Luc Bourlier,
Eric Bui, Lewis Stiller, Susumu Yamazaki, Rodrigo Teruo Tomita,
Marc Segura-Devillechaise, Jan Baudisch, Julien Blass, Yoshiki Sato,
Fabian Crabus, Bo Norregaard Jorgensen, Bob Lee, Bill Burke,
Remy Sanlaville, Muga Nishizawa, Alexey Loubyansky, Saori Oki,
Andreas Salathe, Dante Torres estrada, S. Pam, Nuno Santos,
Denis Taye, Colin Sampaleanu, Robert Bialek, Asato Shimotaki,
Howard Lewis Ship, Richard Jones, Marjan Sterjev,
Bruce McDonald, Mark Brennan, Vlad Skarzhevskyy,
Brett Randall, Tsuyoshi Murakami, Nathan Meyers, Yoshiyuki Usui
Yutaka Sunaga, Arjan van der Meer, Bruce Eckel, Guillaume Pothier,
Kumar Matcha, Andreas Salathe, Renat Zubairov, Armin Haaf,
Emmanuel Bernard, Jason T. Greene
and all other contributors for their contributions.

<p><br>

<hr>
<a href="http://www.javassist.org">Shigeru Chiba</a>
(Email: <tt>chiba@javassist.org</tt>)

</body>
</html>
