aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpatriot1burke <patriot1burke@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2003-04-22 14:08:16 +0000
committerpatriot1burke <patriot1burke@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2003-04-22 14:08:16 +0000
commitfb431982111b03608b888953f7ed8ba7e98f421c (patch)
tree1eced3d2152129148e8d835a82165e9aa3b68394
parent069bceaf72fd0d6ffad14ce4e3e00ca91a280bde (diff)
downloadjavassist-fb431982111b03608b888953f7ed8ba7e98f421c.tar.gz
javassist-fb431982111b03608b888953f7ed8ba7e98f421c.zip
changed licensing
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@8 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
-rw-r--r--Readme.html910
1 files changed, 457 insertions, 453 deletions
diff --git a/Readme.html b/Readme.html
index cfb73123..7b154ce1 100644
--- a/Readme.html
+++ b/Readme.html
@@ -1,453 +1,457 @@
-<html>
-<HEAD>
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
- <TITLE>Read Me First</TITLE>
-</HEAD>
-<body>
-
-<h1>Javassist version 2</h1>
-
-<h3>in February, 2003.
-<br>Copyright (C) 2000-2003 by Shigeru Chiba, All rights reserved.</h3>
-
-<p><br></p>
-
-<p>Javassist (JAVA programming ASSISTant) is yet another reflective
-system for Java. 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. On the other hand, the bytecode-level API allows
-the users to directly edit a class file.
-
-<p><br>
-
-<h2>Files</h2>
-
-<ul>
-<table>
-<tr>
-<td><li><tt><a href="License.html">License.html</a></tt></td>
-<td>License file</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>./javassist-src.zip</tt></td>
-<td>The source archive</td>
-</tr>
-
-<tr>
-<td><li><tt><a href="html/index.html">html/index.html</a></tt></tr>
-<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>To extract source files from the archive, use the jar command:<br>
-
-<ul><pre>% jar xvf javassist-src.zip</pre></ul>
-
-
-<p><br>
-
-<h2>How to run sample programs</h2>
-
-<p>JDK 1.2.2 or later is needed.
-
-<h3>1. Move to the directory where this Readme.html file is located.</h3>
-
-<p>In the description below, we assume that the platform is JDK 1.2
-(or later) for Solaris. If the platform is JDK 1.2 (or later) for
-Windows, the class-path option is:
-
-<ul><pre>
--classpath ".;javassist.jar"
-</pre></ul>
-
-<p>If you don't want to put the class-path option, copy
-<tt>./javassist.jar</tt> to
-
-<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:\jdk1.2\</tt>, etc.
-
-<p>If you don't use javassist.jar, first compile Javassist:
-<ul><pre>
-% cd src
-% javac -d .. javassist/*.java javassist/*/*.java
-% cd ..
-</pre></ul>
-
-<p>Then you can compile and run the sample programs without the class-path
-option.
-
-<h3>2. sample/Test.java</h3>
-
-<p> This is a very simple program using Javassist.
-
-<p> To run, type the commands:
-
-<ul><pre>
-% javac -classpath ".:javassist.jar" sample/Test.java
-% java -cp ".:javassist.jar" 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 -classpath ".:javassist.jar" sample/reflect/*.java
-% java -cp ".:javassist.jar" javassist.reflect.Loader sample.reflect.Main Joe
-</pre></ul>
-
-<p>Compare this result with that of the regular execution without reflection:
-
-<ul><pre>% java -cp ".:javassist.jar" 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 -cp ".:javassist.jar" javassist.reflect.Compiler sample.reflect.Person -m sample.reflect.VerboseMetaobj
-</pre></ul>
-
-<p> Then,
-<ul><pre>
-% java -cp ".:javassist.jar" 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 -classpath ".:javassist.jar" sample/duplicate/*.java
-% java -cp ".:javassist.jar" 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.
-This is a demonstration of the use of <tt>javassist.preproc</tt> package.
-
-<p> To run, type the commands:
-<ul><pre>
-% javac -classpath ".:javassist.jar" sample/vector/*.java
-% java -cp ".:javassist.jar" javassist.preproc.Compiler sample/vector/Test.j
-% javac sample/vector/Test.java
-% java sample.vector.Test
-</pre></ul>
-
-<p>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 -classpath ".:javassist.jar" sample/rmi/*.java
-% java -cp ".:javassist.jar" 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 -cp ".:javassist.jar" 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 -classpath ".:javassist.jar" sample/evolve/*.java
-% java -cp ".:javassist.jar" 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. Hints</h3>
-
-<p>Javassist provides a class file viewer for debugging. For more details,
-see javassist.Dump.
-
-<p><br>
-
-<h2>Changes</h2>
-
-<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 in April, 1999.
-<ul>
- <li>The first release.
-</ul>
-
-<p><br>
-
-<h2>Bug reports etc.</h2>
-
-<dl>
-<dt>Bug reports:
-<dd><tt><a href="mailto:chiba@acm.org">chiba@acm.org</a></tt>
-<br>or
-<tt><a href="mailto:chiba@is.titech.ac.jp">chiba@is.titech.ac.jp</a></tt>
-<br>
-
-<p><dt>The home page of Javassist:
-<dd><tt><a href="http://www.csg.is.titech.ac.jp/~chiba/javassist">http://www.csg.is.titech.ac.jp/~chiba/javassist</a></tt>
-
-<p><dt>The Javassist mailing list:
-<dd><tt><a href="javassist@csg.is.titech.ac.jp">javassist@csg.is.titech.ac.jp</a></tt>
-</dl>
-
-<p><br>
-
-<h2>Copyright notices</h2>
-
-<p>This software is subject to the <a href="license.html">Mozilla Public
-License Version 1.1</a>.
-
-<p>Software distributed under the License is distributed on an "AS IS"
-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-the License for the specific language governing rights and limitations
-under the License.
-
-<p>The Original Code is Javassist.
-
-<p>The Initial Developer of the Original Code is Shigeru Chiba.
-<br>Portions
-created by Shigeru Chiba are Copyright (C) 1999-2003 Shigeru Chiba.
-All Rights Reserved.
-
-<p><br>
-
-<h2>Acknowledgments</h2>
-
-<p>The development of this software is sponsored in part by the PRESTO
-program (Sakigake Kenkyu 21) 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, and Dante Torres estrada for their contributions.
-
-<p><br>
-
-<hr>
-<a href="http://www.is.titech.ac.jp/~chiba">Shigeru Chiba</a>
-(Email: <tt>chiba@is.titech.ac.jp</tt>)
-<br>Dept. of Math. and Computing Sciences,
-<a href="http://www.titech.ac.jp">Tokyo Institute of Technology</a>
+<html>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+ <TITLE>Read Me First</TITLE>
+</HEAD>
+<body>
+
+<h1>Javassist version 2</h1>
+
+<h3>in February, 2003.
+<br>Copyright (C) 2000-2003 by Shigeru Chiba, All rights reserved.</h3>
+
+<p><br></p>
+
+<p>Javassist (JAVA programming ASSISTant) is yet another reflective
+system for Java. 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. On the other hand, the bytecode-level API allows
+the users to directly edit a class file.
+
+<p><br>
+
+<h2>Files</h2>
+
+<ul>
+<table>
+<tr>
+<td><li><tt><a href="License.html">License.html</a></tt></td>
+<td>License file</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>./javassist-src.zip</tt></td>
+<td>The source archive</td>
+</tr>
+
+<tr>
+<td><li><tt><a href="html/index.html">html/index.html</a></tt></tr>
+<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>To extract source files from the archive, use the jar command:<br>
+
+<ul><pre>% jar xvf javassist-src.zip</pre></ul>
+
+
+<p><br>
+
+<h2>How to run sample programs</h2>
+
+<p>JDK 1.2.2 or later is needed.
+
+<h3>1. Move to the directory where this Readme.html file is located.</h3>
+
+<p>In the description below, we assume that the platform is JDK 1.2
+(or later) for Solaris. If the platform is JDK 1.2 (or later) for
+Windows, the class-path option is:
+
+<ul><pre>
+-classpath ".;javassist.jar"
+</pre></ul>
+
+<p>If you don't want to put the class-path option, copy
+<tt>./javassist.jar</tt> to
+
+<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:\jdk1.2\</tt>, etc.
+
+<p>If you don't use javassist.jar, first compile Javassist:
+<ul><pre>
+% cd src
+% javac -d .. javassist/*.java javassist/*/*.java
+% cd ..
+</pre></ul>
+
+<p>Then you can compile and run the sample programs without the class-path
+option.
+
+<h3>2. sample/Test.java</h3>
+
+<p> This is a very simple program using Javassist.
+
+<p> To run, type the commands:
+
+<ul><pre>
+% javac -classpath ".:javassist.jar" sample/Test.java
+% java -cp ".:javassist.jar" 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 -classpath ".:javassist.jar" sample/reflect/*.java
+% java -cp ".:javassist.jar" javassist.reflect.Loader sample.reflect.Main Joe
+</pre></ul>
+
+<p>Compare this result with that of the regular execution without reflection:
+
+<ul><pre>% java -cp ".:javassist.jar" 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 -cp ".:javassist.jar" javassist.reflect.Compiler sample.reflect.Person -m sample.reflect.VerboseMetaobj
+</pre></ul>
+
+<p> Then,
+<ul><pre>
+% java -cp ".:javassist.jar" 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 -classpath ".:javassist.jar" sample/duplicate/*.java
+% java -cp ".:javassist.jar" 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.
+This is a demonstration of the use of <tt>javassist.preproc</tt> package.
+
+<p> To run, type the commands:
+<ul><pre>
+% javac -classpath ".:javassist.jar" sample/vector/*.java
+% java -cp ".:javassist.jar" javassist.preproc.Compiler sample/vector/Test.j
+% javac sample/vector/Test.java
+% java sample.vector.Test
+</pre></ul>
+
+<p>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 -classpath ".:javassist.jar" sample/rmi/*.java
+% java -cp ".:javassist.jar" 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 -cp ".:javassist.jar" 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 -classpath ".:javassist.jar" sample/evolve/*.java
+% java -cp ".:javassist.jar" 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. Hints</h3>
+
+<p>Javassist provides a class file viewer for debugging. For more details,
+see javassist.Dump.
+
+<p><br>
+
+<h2>Changes</h2>
+
+<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 in April, 1999.
+<ul>
+ <li>The first release.
+</ul>
+
+<p><br>
+
+<h2>Bug reports etc.</h2>
+
+<dl>
+<dt>Bug reports:
+<dd><tt><a href="mailto:chiba@acm.org">chiba@acm.org</a></tt>
+<br>or
+<tt><a href="mailto:chiba@is.titech.ac.jp">chiba@is.titech.ac.jp</a></tt>
+<br>
+
+<p><dt>The home page of Javassist:
+<dd><tt><a href="http://www.csg.is.titech.ac.jp/~chiba/javassist">http://www.csg.is.titech.ac.jp/~chiba/javassist</a></tt>
+
+<p><dt>The Javassist mailing list:
+<dd><tt><a href="javassist@csg.is.titech.ac.jp">javassist@csg.is.titech.ac.jp</a></tt>
+</dl>
+
+<p><br>
+
+<h2>Copyright notices</h2>
+
+<p>
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+</p>
+
+<p>Software distributed under the License is distributed on an "AS IS"
+basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+the License for the specific language governing rights and limitations
+under the License.
+
+<p>The Original Code is Javassist.
+
+<p>The Initial Developer of the Original Code is Shigeru Chiba.
+<br>Portions
+created by Shigeru Chiba are Copyright (C) 1999-2003 Shigeru Chiba.
+All Rights Reserved.
+
+<p><br>
+
+<h2>Acknowledgments</h2>
+
+<p>The development of this software is sponsored in part by the PRESTO
+program (Sakigake Kenkyu 21) 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, and Dante Torres estrada for their contributions.
+
+<p><br>
+
+<hr>
+<a href="http://www.is.titech.ac.jp/~chiba">Shigeru Chiba</a>
+(Email: <tt>chiba@is.titech.ac.jp</tt>)
+<br>Dept. of Math. and Computing Sciences,
+<a href="http://www.titech.ac.jp">Tokyo Institute of Technology</a>