xref: /aosp_15_r20/external/javassist/Readme.html (revision f1fbf3c2ab775ce834e0af96b7a85bdc7a0eac65)
1*f1fbf3c2SXin Li<html>
2*f1fbf3c2SXin Li<HEAD>
3*f1fbf3c2SXin Li   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
4*f1fbf3c2SXin Li   <TITLE>Read Me First</TITLE>
5*f1fbf3c2SXin Li</HEAD>
6*f1fbf3c2SXin Li<body>
7*f1fbf3c2SXin Li
8*f1fbf3c2SXin Li<h1>Javassist version 3</h1>
9*f1fbf3c2SXin Li
10*f1fbf3c2SXin Li<h3>Copyright (C) 1999-2018 by Shigeru Chiba, All rights reserved.</h3>
11*f1fbf3c2SXin Li
12*f1fbf3c2SXin Li<p><br></p>
13*f1fbf3c2SXin Li
14*f1fbf3c2SXin Li<p>Javassist (JAVA programming ASSISTant) makes Java bytecode manipulation
15*f1fbf3c2SXin Lisimple.  It is a class library for editing bytecodes in Java;
16*f1fbf3c2SXin Liit enables Java programs to define a new class at runtime and to
17*f1fbf3c2SXin Limodify a class file when the JVM loads it.  Unlike other similar
18*f1fbf3c2SXin Libytecode editors, Javassist provides two levels of API: source level
19*f1fbf3c2SXin Liand bytecode level.  If the users use the source-level API, they can
20*f1fbf3c2SXin Liedit a class file without knowledge of the specifications of the Java
21*f1fbf3c2SXin Libytecode.  The whole API is designed with only the vocabulary of the
22*f1fbf3c2SXin LiJava language.  You can even specify inserted bytecode in the form of
23*f1fbf3c2SXin Lisource text; Javassist compiles it on the fly.  On the other hand, the
24*f1fbf3c2SXin Libytecode-level API allows the users to directly edit a class file as
25*f1fbf3c2SXin Liother editors.
26*f1fbf3c2SXin Li
27*f1fbf3c2SXin Li<p><br>
28*f1fbf3c2SXin Li
29*f1fbf3c2SXin Li<h2>Files</h2>
30*f1fbf3c2SXin Li
31*f1fbf3c2SXin Li<ul>
32*f1fbf3c2SXin Li<table>
33*f1fbf3c2SXin Li<tr>
34*f1fbf3c2SXin Li<td><li><tt><a href="License.html">License.html</a></tt></td>
35*f1fbf3c2SXin Li<td>License file (MPL/LGPL/Apache triple license)
36*f1fbf3c2SXin Li(Also see the <a href="#copyright">copyright notices</a> below)</td>
37*f1fbf3c2SXin Li</tr>
38*f1fbf3c2SXin Li
39*f1fbf3c2SXin Li<tr>
40*f1fbf3c2SXin Li<td><li><tt><a href="tutorial/tutorial.html">tutorial/tutorial.html</a></tt></td>
41*f1fbf3c2SXin Li<td>Tutorial</td>
42*f1fbf3c2SXin Li</tr>
43*f1fbf3c2SXin Li
44*f1fbf3c2SXin Li<tr>
45*f1fbf3c2SXin Li<td><li><tt>./javassist.jar</tt></td>
46*f1fbf3c2SXin Li<td>The Javassist jar file (class files)</td>
47*f1fbf3c2SXin Li</tr>
48*f1fbf3c2SXin Li
49*f1fbf3c2SXin Li<tr>
50*f1fbf3c2SXin Li<td><li><tt>./src/main</tt></td>
51*f1fbf3c2SXin Li<td>The source files</td>
52*f1fbf3c2SXin Li</tr>
53*f1fbf3c2SXin Li
54*f1fbf3c2SXin Li<tr>
55*f1fbf3c2SXin Li<td><li><tt><a href="html/index.html">html/index.html</a></tt></td>
56*f1fbf3c2SXin Li<td>The top page of the Javassist API document.</td>
57*f1fbf3c2SXin Li</tr>
58*f1fbf3c2SXin Li
59*f1fbf3c2SXin Li<tr>
60*f1fbf3c2SXin Li<td><li><tt>./sample/</tt></td>
61*f1fbf3c2SXin Li<td>Sample programs</td>
62*f1fbf3c2SXin Li</tr>
63*f1fbf3c2SXin Li</table>
64*f1fbf3c2SXin Li</ul>
65*f1fbf3c2SXin Li
66*f1fbf3c2SXin Li<p><br>
67*f1fbf3c2SXin Li
68*f1fbf3c2SXin Li<h2>How to run sample programs</h2>
69*f1fbf3c2SXin Li
70*f1fbf3c2SXin Li<p>JDK 1.4 or later is needed.
71*f1fbf3c2SXin Li
72*f1fbf3c2SXin Li<h3>0. If you have Apache Ant</h3>
73*f1fbf3c2SXin Li
74*f1fbf3c2SXin Li<p>Run the sample-all task.
75*f1fbf3c2SXin LiOtherwise, follow the instructions below.
76*f1fbf3c2SXin Li
77*f1fbf3c2SXin Li<h3>1. Move to the directory where this Readme.html file is located.</h3>
78*f1fbf3c2SXin Li
79*f1fbf3c2SXin Li<p>In the following instructions, we assume that the javassist.jar
80*f1fbf3c2SXin Lifile is included in the class path.
81*f1fbf3c2SXin LiFor example, the javac and java commands must receive
82*f1fbf3c2SXin Lithe following <code>classpath</code> option:
83*f1fbf3c2SXin Li
84*f1fbf3c2SXin Li<ul><pre>
85*f1fbf3c2SXin Li-classpath ".:javassist.jar"
86*f1fbf3c2SXin Li</pre></ul>
87*f1fbf3c2SXin Li
88*f1fbf3c2SXin Li<p>If the operating system is Windows, the path
89*f1fbf3c2SXin Liseparator must be not <code>:</code> (colon) but
90*f1fbf3c2SXin Li<code>;</code> (semicolon).  The java command can receive
91*f1fbf3c2SXin Lithe <code>-cp</code> option
92*f1fbf3c2SXin Lias well as <code>-classpath</code>.
93*f1fbf3c2SXin Li
94*f1fbf3c2SXin Li<p>If you don't want to use the class-path option, you can make
95*f1fbf3c2SXin Li<code>javassist.jar</code> included in the <code>CLASSPATH</code>
96*f1fbf3c2SXin Lienvironment:
97*f1fbf3c2SXin Li
98*f1fbf3c2SXin Li<ul><pre>
99*f1fbf3c2SXin Liexport CLASSPATH=.:javassist.jar
100*f1fbf3c2SXin Li</pre></ul>
101*f1fbf3c2SXin Li
102*f1fbf3c2SXin Li<p>or if the operating system is Windows:
103*f1fbf3c2SXin Li
104*f1fbf3c2SXin Li<ul><pre>
105*f1fbf3c2SXin Liset CLASSPATH=.;javassist.jar
106*f1fbf3c2SXin Li</pre></ul>
107*f1fbf3c2SXin Li
108*f1fbf3c2SXin Li
109*f1fbf3c2SXin Li<p>Otherwise, you can copy <tt>javassist.jar</tt> to the directory
110*f1fbf3c2SXin Li
111*f1fbf3c2SXin Li<ul>&lt;<i>java-home</i>&gt;<tt>/jre/lib/ext</tt>.</ul>
112*f1fbf3c2SXin Li
113*f1fbf3c2SXin Li<p>&lt;<i>java-home</i>&gt; depends on the system.  It is usually
114*f1fbf3c2SXin Li<tt>/usr/local/java</tt>, <tt>c:\j2sdk1.4\</tt>, etc.
115*f1fbf3c2SXin Li
116*f1fbf3c2SXin Li<h3>2. sample/Test.java</h3>
117*f1fbf3c2SXin Li
118*f1fbf3c2SXin Li<p>   This is a very simple program using Javassist.
119*f1fbf3c2SXin Li
120*f1fbf3c2SXin Li<p>   To run, type the commands:
121*f1fbf3c2SXin Li
122*f1fbf3c2SXin Li<ul><pre>
123*f1fbf3c2SXin Li% javac sample/Test.java
124*f1fbf3c2SXin Li% java sample.Test
125*f1fbf3c2SXin Li</pre></ul>
126*f1fbf3c2SXin Li
127*f1fbf3c2SXin Li<p>   For more details, see <a type="text/plain" href="sample/Test.java">sample/Test.java</a>
128*f1fbf3c2SXin Li
129*f1fbf3c2SXin Li<h3>3. sample/reflect/*.java</h3>
130*f1fbf3c2SXin Li
131*f1fbf3c2SXin Li<p>   This is the "verbose metaobject" example well known in reflective
132*f1fbf3c2SXin Li   programming.  This program dynamically attaches a metaobject to
133*f1fbf3c2SXin Li   a Person object.  The metaobject prints a message if a method
134*f1fbf3c2SXin Li   is called on the Person object.
135*f1fbf3c2SXin Li
136*f1fbf3c2SXin Li<p>   To run, type the commands:
137*f1fbf3c2SXin Li
138*f1fbf3c2SXin Li<ul><pre>
139*f1fbf3c2SXin Li% javac sample/reflect/*.java
140*f1fbf3c2SXin Li% java javassist.tools.reflect.Loader sample.reflect.Main Joe
141*f1fbf3c2SXin Li</pre></ul>
142*f1fbf3c2SXin Li
143*f1fbf3c2SXin Li<p>Compare this result with that of the regular execution without reflection:
144*f1fbf3c2SXin Li
145*f1fbf3c2SXin Li<ul><pre>% java sample.reflect.Person Joe</pre></ul>
146*f1fbf3c2SXin Li
147*f1fbf3c2SXin Li<p>   For more details, see <a type="text/plain" href="sample/reflect/Main.java">sample/reflect/Main.java</a>
148*f1fbf3c2SXin Li
149*f1fbf3c2SXin Li<p>   Furthermore, the Person class can be statically modified so that
150*f1fbf3c2SXin Li   all the Person objects become reflective without sample.reflect.Main.
151*f1fbf3c2SXin Li   To do this, type the commands:
152*f1fbf3c2SXin Li
153*f1fbf3c2SXin Li<ul><pre>
154*f1fbf3c2SXin Li% java javassist.tools.reflect.Compiler sample.reflect.Person -m sample.reflect.VerboseMetaobj
155*f1fbf3c2SXin Li</pre></ul>
156*f1fbf3c2SXin Li
157*f1fbf3c2SXin Li<p>   Then,
158*f1fbf3c2SXin Li<ul><pre>
159*f1fbf3c2SXin Li% java sample.reflect.Person Joe
160*f1fbf3c2SXin Li</pre></ul>
161*f1fbf3c2SXin Li
162*f1fbf3c2SXin Li<h3>4. sample/duplicate/*.java</h3>
163*f1fbf3c2SXin Li
164*f1fbf3c2SXin Li<p>   This is another example of reflective programming.
165*f1fbf3c2SXin Li
166*f1fbf3c2SXin Li<p>   To run, type the commands:
167*f1fbf3c2SXin Li
168*f1fbf3c2SXin Li<ul><pre>
169*f1fbf3c2SXin Li% javac sample/duplicate/*.java
170*f1fbf3c2SXin Li% java sample.duplicate.Main
171*f1fbf3c2SXin Li</pre></ul>
172*f1fbf3c2SXin Li
173*f1fbf3c2SXin Li<p>Compare this result with that of the regular execution without reflection:
174*f1fbf3c2SXin Li
175*f1fbf3c2SXin Li<ul><pre>% java sample.duplicate.Viewer</pre></ul>
176*f1fbf3c2SXin Li
177*f1fbf3c2SXin Li<p>For more details, see
178*f1fbf3c2SXin Li<a type="text/plain" href="sample/duplicate/Main.java">sample/duplicate/Main.java</a>
179*f1fbf3c2SXin Li
180*f1fbf3c2SXin Li<h3>5. sample/vector/*.java</h3>
181*f1fbf3c2SXin Li
182*f1fbf3c2SXin Li<p>This example shows the use of Javassit for producing a class representing
183*f1fbf3c2SXin Lia vector of a given type at compile time.
184*f1fbf3c2SXin Li
185*f1fbf3c2SXin Li<p>   To run, type the commands:
186*f1fbf3c2SXin Li<ul><pre>
187*f1fbf3c2SXin Li% javac sample/vector/*.java
188*f1fbf3c2SXin Li% java sample.preproc.Compiler sample/vector/Test.j
189*f1fbf3c2SXin Li% javac sample/vector/Test.java
190*f1fbf3c2SXin Li% java sample.vector.Test
191*f1fbf3c2SXin Li</pre></ul>
192*f1fbf3c2SXin Li
193*f1fbf3c2SXin Li<p>Note: <code>javassist.jar</code> is unnecessary to compile and execute
194*f1fbf3c2SXin Li<code>sample/vector/Test.java</code>.
195*f1fbf3c2SXin Li
196*f1fbf3c2SXin LiFor more details, see
197*f1fbf3c2SXin Li<a type="text/plain" href="sample/vector/Test.j">sample/vector/Test.j</a>
198*f1fbf3c2SXin Liand <a type="text/plain" href="sample/vector/VectorAssistant.java">sample/vector/VectorAssistant.java</a>
199*f1fbf3c2SXin Li
200*f1fbf3c2SXin Li<h3>6. sample/rmi/*.java</h3>
201*f1fbf3c2SXin Li
202*f1fbf3c2SXin Li<p>   This demonstrates the javassist.rmi package.
203*f1fbf3c2SXin Li
204*f1fbf3c2SXin Li<p>   To run, type the commands:
205*f1fbf3c2SXin Li<ul><pre>
206*f1fbf3c2SXin Li% javac sample/rmi/*.java
207*f1fbf3c2SXin Li% java sample.rmi.Counter 5001
208*f1fbf3c2SXin Li</pre></ul>
209*f1fbf3c2SXin Li
210*f1fbf3c2SXin Li<p>   The second line starts a web server listening to port 5001.
211*f1fbf3c2SXin Li
212*f1fbf3c2SXin Li<p>   Then, open <a href="sample/rmi/webdemo.html">sample/rmi/webdemo.html</a>
213*f1fbf3c2SXin Liwith a web browser running
214*f1fbf3c2SXin Li   on the local host.  (<tt>webdemo.html</tt> trys to fetch an applet from
215*f1fbf3c2SXin Li   <tt>http://localhost:5001/</tt>, which is the web server we started above.)
216*f1fbf3c2SXin Li
217*f1fbf3c2SXin Li<p>   Otherwise, run sample.rmi.CountApplet as an application:
218*f1fbf3c2SXin Li
219*f1fbf3c2SXin Li<ul><pre>
220*f1fbf3c2SXin Li% java javassist.web.Viewer localhost 5001 sample.rmi.CountApplet
221*f1fbf3c2SXin Li</pre></ul>
222*f1fbf3c2SXin Li
223*f1fbf3c2SXin Li<h3>7. sample/evolve/*.java</h3>
224*f1fbf3c2SXin Li
225*f1fbf3c2SXin Li<p>   This is a demonstration of the class evolution mechanism implemented
226*f1fbf3c2SXin Li   with Javassist.  This mechanism enables a Java program to reload an
227*f1fbf3c2SXin Li   existing class file under some restriction.
228*f1fbf3c2SXin Li
229*f1fbf3c2SXin Li<p>   To run, type the commands:
230*f1fbf3c2SXin Li<ul><pre>
231*f1fbf3c2SXin Li% javac sample/evolve/*.java
232*f1fbf3c2SXin Li% java sample.evolve.DemoLoader 5003
233*f1fbf3c2SXin Li</pre></ul>
234*f1fbf3c2SXin Li
235*f1fbf3c2SXin Li<p>   The second line starts a class loader DemoLoader, which runs a web
236*f1fbf3c2SXin Li   server DemoServer listening to port 5003.
237*f1fbf3c2SXin Li
238*f1fbf3c2SXin Li<p>   Then, open <a href="http://localhost:5003/demo.html">http://localhost:5003/demo.html</a> with a web browser running
239*f1fbf3c2SXin Li   on the local host.
240*f1fbf3c2SXin Li(Or, see <a href="sample/evolve/start.html">sample/evolve/start.html</a>.)
241*f1fbf3c2SXin Li
242*f1fbf3c2SXin Li<h3>8. sample/hotswap/*.java</h3>
243*f1fbf3c2SXin Li
244*f1fbf3c2SXin Li<p>This shows dynamic class reloading by the JPDA.  It needs JDK 1.4 or later.
245*f1fbf3c2SXin LiTo run, first type the following commands:
246*f1fbf3c2SXin Li
247*f1fbf3c2SXin Li<ul><pre>
248*f1fbf3c2SXin Li% cd sample/hotswap
249*f1fbf3c2SXin Li% javac *.java
250*f1fbf3c2SXin Li% cd logging
251*f1fbf3c2SXin Li% javac *.java
252*f1fbf3c2SXin Li% cd ..
253*f1fbf3c2SXin Li</pre></ul>
254*f1fbf3c2SXin Li
255*f1fbf3c2SXin Li<p>If your Java is 1.4, then type:
256*f1fbf3c2SXin Li
257*f1fbf3c2SXin Li<ul><pre>
258*f1fbf3c2SXin Li% java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 Test
259*f1fbf3c2SXin Li</pre></ul>
260*f1fbf3c2SXin Li
261*f1fbf3c2SXin Li<p>If you are using Java 5, then type:
262*f1fbf3c2SXin Li
263*f1fbf3c2SXin Li<ul><pre>
264*f1fbf3c2SXin Li% java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 Test
265*f1fbf3c2SXin Li</pre></ul>
266*f1fbf3c2SXin Li
267*f1fbf3c2SXin Li<p>Note that the class path must include <code>JAVA_HOME/lib/tools.jar</code>.
268*f1fbf3c2SXin Li
269*f1fbf3c2SXin Li<h2>Hints</h2>
270*f1fbf3c2SXin Li
271*f1fbf3c2SXin Li<p>To know the version number, type this command:
272*f1fbf3c2SXin Li
273*f1fbf3c2SXin Li<ul><pre>
274*f1fbf3c2SXin Li% java -jar javassist.jar
275*f1fbf3c2SXin Li</pre></ul>
276*f1fbf3c2SXin Li
277*f1fbf3c2SXin Li<p>Javassist provides a class file viewer for debugging.  For more details,
278*f1fbf3c2SXin Lisee javassist.Dump.
279*f1fbf3c2SXin Li
280*f1fbf3c2SXin Li<p><br>
281*f1fbf3c2SXin Li
282*f1fbf3c2SXin Li<h2>Changes</h2>
283*f1fbf3c2SXin Li
284*f1fbf3c2SXin Li<p>-version 3.24.1 on December 9, 2018
285*f1fbf3c2SXin Li<ul>
286*f1fbf3c2SXin Li    <li>GitHub Issue #228, #229</li>
287*f1fbf3c2SXin Li<ul>
288*f1fbf3c2SXin Li</p>
289*f1fbf3c2SXin Li
290*f1fbf3c2SXin Li<p>-version 3.24 on November 1, 2018
291*f1fbf3c2SXin Li<ul>
292*f1fbf3c2SXin Li    <li>Java 11 supports.</li>
293*f1fbf3c2SXin Li    <li>JIRA JASSIST-267.</li>
294*f1fbf3c2SXin Li    <li>Github PR #218.</li>
295*f1fbf3c2SXin Li</ul>
296*f1fbf3c2SXin Li</p>
297*f1fbf3c2SXin Li
298*f1fbf3c2SXin Li<p>-version 3.23.1 on July 2, 2018
299*f1fbf3c2SXin Li<ul>
300*f1fbf3c2SXin Li    <li>Github PR #171.</li>
301*f1fbf3c2SXin Li</ul>
302*f1fbf3c2SXin Li</p>
303*f1fbf3c2SXin Li
304*f1fbf3c2SXin Li<p>-version 3.23 on June 21, 2018
305*f1fbf3c2SXin Li
306*f1fbf3c2SXin Li<ul>
307*f1fbf3c2SXin Li    <li>Fix leaking file handlers in ClassPool and removed ClassPath.close(). Github issue #165.
308*f1fbf3c2SXin Li</ul>
309*f1fbf3c2SXin Li</p>
310*f1fbf3c2SXin Li
311*f1fbf3c2SXin Li<p>-version 3.22 on October 10, 2017
312*f1fbf3c2SXin Li
313*f1fbf3c2SXin Li<ul>
314*f1fbf3c2SXin Li<li>Java 9 supports.
315*f1fbf3c2SXin Li<li>JIRA JASSIST-261.
316*f1fbf3c2SXin Li</ul>
317*f1fbf3c2SXin Li</p>
318*f1fbf3c2SXin Li
319*f1fbf3c2SXin Li<p>-version 3.21 on October 4, 2016
320*f1fbf3c2SXin Li<ul>
321*f1fbf3c2SXin Li<li>JIRA JASSIST-244, 245, 248, 250, 255, 256, 259, 262.
322*f1fbf3c2SXin Li<li><code>javassist.tools.Callback</code> was modified to be Java 1.4 compatible.
323*f1fbf3c2SXin LiThe parameter type of <code>Callback#result()</code> was changed.
324*f1fbf3c2SXin Li<li>The algorithm for generating a stack-map table was modified to fix github issue #83.
325*f1fbf3c2SXin Li<li>A bug of ProxyFactory related to default methods was fixed.  It is github issue #45.
326*f1fbf3c2SXin Li</ul>
327*f1fbf3c2SXin Li</p>
328*f1fbf3c2SXin Li
329*f1fbf3c2SXin Li<p>-version 3.20 on June 25, 2015
330*f1fbf3c2SXin Li<ul>
331*f1fbf3c2SXin Li<li>JIRA JASSIST-241, 242, 246.
332*f1fbf3c2SXin Li</ul>
333*f1fbf3c2SXin Li</p>
334*f1fbf3c2SXin Li
335*f1fbf3c2SXin Li
336*f1fbf3c2SXin Li<p>-version 3.19 on January 6, 2015
337*f1fbf3c2SXin Li<ul>
338*f1fbf3c2SXin Li<li>JIRA JASSIST-158, 205, 206, 207, 208, 209, 211, 212, 216, 220, 223, 224,
339*f1fbf3c2SXin Li        227, 230, 234, 235, 236, 237, 238, 240.
340*f1fbf3c2SXin Li</ul>
341*f1fbf3c2SXin Li</p>
342*f1fbf3c2SXin Li
343*f1fbf3c2SXin Li<p>-version 3.18 on June 3, 2013
344*f1fbf3c2SXin Li<ul>
345*f1fbf3c2SXin Li<li>The source code repository has been moved to <a href="https://github.com/jboss-javassist/javassist">GitHub</a></li>.
346*f1fbf3c2SXin Li
347*f1fbf3c2SXin Li<li>JIRA JASSIST-181, 183, 184, 189, 162, 185, 186, 188, 190, 195, 199, 201.
348*f1fbf3c2SXin Li</ul>
349*f1fbf3c2SXin Li
350*f1fbf3c2SXin Li<p>-version 3.17.1 on December 3, 2012
351*f1fbf3c2SXin Li<ul>
352*f1fbf3c2SXin Li	<li>JIRA JASSIST-177, 178, 182.
353*f1fbf3c2SXin Li</ul>
354*f1fbf3c2SXin Li
355*f1fbf3c2SXin Li
356*f1fbf3c2SXin Li<p>-version 3.17 on November 8, 2012
357*f1fbf3c2SXin Li<ul>
358*f1fbf3c2SXin Li	<li>OSGi bundle info is now included in the jar file.
359*f1fbf3c2SXin Li	<li>A stackmap generator has been rewritten.
360*f1fbf3c2SXin Li	<li>JIRA JASSIST-160, 163, 166, 168, 170, 171, 174, 175, 176 have been fixed.
361*f1fbf3c2SXin Li</ul>
362*f1fbf3c2SXin Li
363*f1fbf3c2SXin Li<p>-version 3.16.1 on March 6, 2012
364*f1fbf3c2SXin Li<ul>
365*f1fbf3c2SXin Li	<li>Maven now works.  JIRA JASSIST-44, 106, 156 have been fixed.
366*f1fbf3c2SXin Li</ul>
367*f1fbf3c2SXin Li
368*f1fbf3c2SXin Li<p>-version 3.16 on February 19, 2012
369*f1fbf3c2SXin Li<ul>
370*f1fbf3c2SXin Li	<li>JIRA JASSIST-126, 127, 144, 145, 146, 147, 149, 150, 151, 152, 153, 155.
371*f1fbf3c2SXin Li	<li><code>javassist.bytecode.analysis.ControlFlow</code> was added.
372*f1fbf3c2SXin Li	<li>Java 7 compatibility.
373*f1fbf3c2SXin Li</ul>
374*f1fbf3c2SXin Li
375*f1fbf3c2SXin Li<p>-version 3.15 on July 8, 2011
376*f1fbf3c2SXin Li<ul>
377*f1fbf3c2SXin Li   	<li>The license was changed to MPL/LGPL/Apache triple.
378*f1fbf3c2SXin Li   	<li>JIRA JASSIST-138 and 142 were fixed.
379*f1fbf3c2SXin Li</ul>
380*f1fbf3c2SXin Li
381*f1fbf3c2SXin Li<p>-version 3.14 on October 5, 2010
382*f1fbf3c2SXin Li
383*f1fbf3c2SXin Li<ul>
384*f1fbf3c2SXin Li	<li>JIRA JASSIST-121, 123, 128, 129, 130, 131, 132.
385*f1fbf3c2SXin Li</ul>
386*f1fbf3c2SXin Li
387*f1fbf3c2SXin Li<p>-version 3.13 on July 19, 2010
388*f1fbf3c2SXin Li
389*f1fbf3c2SXin Li<ul>
390*f1fbf3c2SXin Li	<li>JIRA JASSIST-118, 119, 122, 124, 125.
391*f1fbf3c2SXin Li</ul>
392*f1fbf3c2SXin Li
393*f1fbf3c2SXin Li<p>-version 3.12.1 on June 10, 2010
394*f1fbf3c2SXin Li
395*f1fbf3c2SXin Li<p>-version 3.12 on April 16, 2010
396*f1fbf3c2SXin Li
397*f1fbf3c2SXin Li<p>-version 3.11 on July 3, 2009
398*f1fbf3c2SXin Li<ul>
399*f1fbf3c2SXin Li	<li>JIRA JASSIST-67, 68, 74, 75, 76, 77, 81, 83, 84, 85, 86, 87 were fixed.
400*f1fbf3c2SXin Li	<li>Now javassist.bytecode.CodeIterator can insert a gap into
401*f1fbf3c2SXin Li	a large method body more than 32KB.  (JIRA JASSIST-79, 80)
402*f1fbf3c2SXin Li</ul>
403*f1fbf3c2SXin Li
404*f1fbf3c2SXin Li<p>-version 3.10 on March 5, 2009
405*f1fbf3c2SXin Li
406*f1fbf3c2SXin Li<ul>
407*f1fbf3c2SXin Li	<li>JIRA JASSIST-69, 70, 71 were fixed.
408*f1fbf3c2SXin Li</ul>
409*f1fbf3c2SXin Li
410*f1fbf3c2SXin Li<p>-version 3.9 on October 9, 2008
411*f1fbf3c2SXin Li<ul>
412*f1fbf3c2SXin Li	<li>ClassPool.makeClassIfNew(InputStream) was implemented.
413*f1fbf3c2SXin Li	<li>CtNewMethod.wrapped(..) and CtNewConstructor.wrapped(..)
414*f1fbf3c2SXin Li	implicitly append a method like _added_m$0.
415*f1fbf3c2SXin Li	This method now has a synthetic attribute.
416*f1fbf3c2SXin Li    <li>JIRA JASSIST-66 has been fixed.
417*f1fbf3c2SXin Li</ul>
418*f1fbf3c2SXin Li
419*f1fbf3c2SXin Li<p>-version 3.8.1 on July 17, 2008
420*f1fbf3c2SXin Li<ul>
421*f1fbf3c2SXin Li	<li>CtClass.rebuildClassFile() has been added.
422*f1fbf3c2SXin Li	<li>A few bugs of javassist.bytecode.analysis have been fixed.
423*f1fbf3c2SXin Li	3.8.0 could not correctly deal with one letter class name
424*f1fbf3c2SXin Li	such as I and J.
425*f1fbf3c2SXin Li</ul>
426*f1fbf3c2SXin Li
427*f1fbf3c2SXin Li<p>-version 3.8.0 on June 13, 2008
428*f1fbf3c2SXin Li<ul>
429*f1fbf3c2SXin Li    <li>javassist.bytecode.analysis was implemented.
430*f1fbf3c2SXin Li  	<li>JASSIST-45, 47, 51, 54-57, 60, 62 were fixed.
431*f1fbf3c2SXin Li</ul>
432*f1fbf3c2SXin Li
433*f1fbf3c2SXin Li<p>-version 3.7.1 on March 10, 2008
434*f1fbf3c2SXin Li<ul>
435*f1fbf3c2SXin Li    <li>a bug of javassist.util.proxy has been fixed.
436*f1fbf3c2SXin Li</ul>
437*f1fbf3c2SXin Li
438*f1fbf3c2SXin Li<p>-version 3.7 on January 20, 2008
439*f1fbf3c2SXin Li<ul>
440*f1fbf3c2SXin Li	<li>Several minor bugs have been fixed.
441*f1fbf3c2SXin Li</ul>
442*f1fbf3c2SXin Li
443*f1fbf3c2SXin Li<p>-version 3.6.0 on September 13, 2007
444*f1fbf3c2SXin Li
445*f1fbf3c2SXin Li<p>-version 3.6.0.CR1 on July 27, 2007
446*f1fbf3c2SXin Li
447*f1fbf3c2SXin Li<ul>
448*f1fbf3c2SXin Li    <li>The stack map table introduced since Java 6 has been supported.
449*f1fbf3c2SXin Li    <li>CtClass#getDeclaredBehaviors() now returns a class initializer
450*f1fbf3c2SXin Li        as well as methods and constructors.
451*f1fbf3c2SXin Li    <li>The default status of automatic pruning was made off.
452*f1fbf3c2SXin Li        Instead of pruning, this version of Javassist compresses
453*f1fbf3c2SXin Li        the data structure of a class file after toBytecode() is called.
454*f1fbf3c2SXin Li        The compressed class file is automatically decompressed when needed.
455*f1fbf3c2SXin Li        This saves memory space better than pruning.
456*f1fbf3c2SXin Li    <li><a href="http://jira.jboss.com/jira/browse/JASSIST-33">JIRA JASSIST-33</a> has been fixed.
457*f1fbf3c2SXin Li</ul>
458*f1fbf3c2SXin Li
459*f1fbf3c2SXin Li<p>-version 3.5 on April 29, 2007
460*f1fbf3c2SXin Li<ul>
461*f1fbf3c2SXin Li	<li>Various minor updates.
462*f1fbf3c2SXin Li</ul>
463*f1fbf3c2SXin Li
464*f1fbf3c2SXin Li<p>-version 3.4 on November 17, 2006
465*f1fbf3c2SXin Li<ul>
466*f1fbf3c2SXin Li	<li>A bug in CodeConverter#replaceFieldRead() and CodeConverter#replaceFieldWrite()
467*f1fbf3c2SXin Li	was fixed. <a href="http://jira.jboss.com/jira/browse/JBAOP-284">JBAOP-284</a>.
468*f1fbf3c2SXin Li
469*f1fbf3c2SXin Li    <li>A synchronization bug and a performance bug in <code>javassist.util.proxy</code>
470*f1fbf3c2SXin Li    have been fixed
471*f1fbf3c2SXin Li    (<a href="http://jira.jboss.com/jira/browse/JASSIST-28">JASSIST-28</a>).
472*f1fbf3c2SXin Li    Now generated proxy classes are cached.  To turn the caching off,
473*f1fbf3c2SXin Li    set <code>ProxyFactory.useCache</code> to <code>false</code>.
474*f1fbf3c2SXin Li</ul>
475*f1fbf3c2SXin Li
476*f1fbf3c2SXin Li<p>-version 3.3 on August 17, 2006
477*f1fbf3c2SXin Li<ul>
478*f1fbf3c2SXin Li    <li>CtClass#toClass() and ClassPool#toClass() were modified to accept a
479*f1fbf3c2SXin Li    <code>ProtectionDomain</code>
480*f1fbf3c2SXin Li    (<a href="http://jira.jboss.com/jira/browse/JASSIST-23">JASSIST-23</a>).
481*f1fbf3c2SXin Li    Now ClassPool#toClass(CtClass, ClassLoader) should not be overridden.  All
482*f1fbf3c2SXin Li    subclasses of ClassPool must override toClass(CtClass, ClassLoader,
483*f1fbf3c2SXin Li    ProtectionDomain).
484*f1fbf3c2SXin Li
485*f1fbf3c2SXin Li    <li>CtClass#getAvailableAnnotations() etc. have been implemented.
486*f1fbf3c2SXin Li
487*f1fbf3c2SXin Li    <li>A bug related to a way of dealing with a bridge method was fixed
488*f1fbf3c2SXin Li    (<a href="http://jira.jboss.com/jira/browse/HIBERNATE-37">HIBERNATE-37</a>).
489*f1fbf3c2SXin Li
490*f1fbf3c2SXin Li    <li>javassist.scopedpool package was added.
491*f1fbf3c2SXin Li</ul>
492*f1fbf3c2SXin Li
493*f1fbf3c2SXin Li<p>-version 3.2 on June 21, 2006
494*f1fbf3c2SXin Li
495*f1fbf3c2SXin Li<ul>
496*f1fbf3c2SXin Li	<li>The behavior of CtBehavior#getParameterAnnotations() has been changed.
497*f1fbf3c2SXin Li	It is now compatible to Java Reflection API
498*f1fbf3c2SXin Li	(<a href="http://jira.jboss.com/jira/browse/JASSIST-19">JASSIST-19</a>).
499*f1fbf3c2SXin Li</ul>
500*f1fbf3c2SXin Li
501*f1fbf3c2SXin Li<p>- version 3.2.0.CR2 on May 9, 2006
502*f1fbf3c2SXin Li<ul>
503*f1fbf3c2SXin Li   <li>A bug of replace(String,ExprEditor) in javassist.expr.Expr has been fixed.
504*f1fbf3c2SXin Li  <li>Updated ProxyFactory getClassLoader to choose the javassit class loader
505*f1fbf3c2SXin Li   when the proxy superclass has a null class loader (a jdk/endorsed class)
506*f1fbf3c2SXin Li   (<a href='http://jira.jboss.com/jira/browse/JASSIST-18'>JASSIST-18</a>).
507*f1fbf3c2SXin Li  <li>Updated the throws clause of the javassist.util.proxy.MethodHandler
508*f1fbf3c2SXin Li   to be Throwable rather than Exception
509*f1fbf3c2SXin Li   (<a href='http://jira.jboss.com/jira/browse/JASSIST-16'>JASSIST-16</a>).
510*f1fbf3c2SXin Li</ul>
511*f1fbf3c2SXin Li
512*f1fbf3c2SXin Li<p>- version 3.2.0.CR1 on March 18, 2006
513*f1fbf3c2SXin Li<ul>
514*f1fbf3c2SXin Li  <li>Annotations enhancements to javassist.bytecode.MethodInfo.
515*f1fbf3c2SXin Li  <li>Allow a ClassPool to override the "guess" at the classloader to use.
516*f1fbf3c2SXin Li</ul>
517*f1fbf3c2SXin Li
518*f1fbf3c2SXin Li<p>- version 3.1 on February 23, 2006
519*f1fbf3c2SXin Li
520*f1fbf3c2SXin Li<ul>
521*f1fbf3c2SXin Li  <li>getFields(), getMethods(), and getConstructors() in CtClass
522*f1fbf3c2SXin Li    were changed to return non-private memebers instead of only
523*f1fbf3c2SXin Li    public members.
524*f1fbf3c2SXin Li  <li>getEnclosingClass() in javassist.CtClass was renamed
525*f1fbf3c2SXin Li      to getEnclosingMethod().
526*f1fbf3c2SXin Li  <li>getModifiers() was extended to return Modifier.STATIC if the class
527*f1fbf3c2SXin Li      is a static inner class.
528*f1fbf3c2SXin Li  <li>The return type of CtClass.stopPruning() was changed from void
529*f1fbf3c2SXin Li    to boolean.
530*f1fbf3c2SXin Li  <li>toMethod() in javassist.CtConstructor has been implemented.
531*f1fbf3c2SXin Li  <li>It includes new javassist.util.proxy package
532*f1fbf3c2SXin Li      similar to Enhancer of CGLIB.
533*f1fbf3c2SXin Li  <p>
534*f1fbf3c2SXin Li  <li>The subpackages of Javassist were restructured.
535*f1fbf3c2SXin Li  <ul>
536*f1fbf3c2SXin Li    <li>javassist.tool package was renamed to javassist.tools.
537*f1fbf3c2SXin Li    <li>HotSwapper was moved to javassist.util.
538*f1fbf3c2SXin Li    <li>Several subpackages were moved to javassist.tools.
539*f1fbf3c2SXin Li    <li>javassist.preproc package was elminated and the source was
540*f1fbf3c2SXin Li        moved to the sample directory.
541*f1fbf3c2SXin Li  </ul>
542*f1fbf3c2SXin Li</ul>
543*f1fbf3c2SXin Li
544*f1fbf3c2SXin Li<p>- version 3.1 RC2 on September 7, 2005
545*f1fbf3c2SXin Li
546*f1fbf3c2SXin Li<ul>
547*f1fbf3c2SXin Li  <li>RC2 is released mainly for an administrative reason.
548*f1fbf3c2SXin Li  <li>A few bugs have been fixed.
549*f1fbf3c2SXin Li</ul>
550*f1fbf3c2SXin Li
551*f1fbf3c2SXin Li<p>- version 3.1 RC1 on August 29, 2005
552*f1fbf3c2SXin Li
553*f1fbf3c2SXin Li<ul>
554*f1fbf3c2SXin Li  <li>Better annotation supports.  See <code>CtClass.getAnnotations()</code>
555*f1fbf3c2SXin Li  <li>javassist.tool.HotSwapper was added.
556*f1fbf3c2SXin Li  <li>javassist.ClassPool.importPackage() was added.
557*f1fbf3c2SXin Li  <li>The compiler now accepts array initializers
558*f1fbf3c2SXin Li    (only one dimensional arrays).
559*f1fbf3c2SXin Li  <li>javassist.Dump was moved to javassist.tool.Dump.
560*f1fbf3c2SXin Li  <li>Many bugs were fixed.
561*f1fbf3c2SXin Li</ul>
562*f1fbf3c2SXin Li
563*f1fbf3c2SXin Li<p>- version 3.0 on January 18, 2005
564*f1fbf3c2SXin Li
565*f1fbf3c2SXin Li<ul>
566*f1fbf3c2SXin Li  <li>The compiler now supports synchronized statements and finally
567*f1fbf3c2SXin Li  clauses.
568*f1fbf3c2SXin Li  <li>You can now remove a method and a field.
569*f1fbf3c2SXin Li</ul>
570*f1fbf3c2SXin Li
571*f1fbf3c2SXin Li<p>- version 3.0 RC1 on September 13, 2004.
572*f1fbf3c2SXin Li
573*f1fbf3c2SXin Li<ul>
574*f1fbf3c2SXin Li  <li>CtClass.toClass() has been reimplemented.  The behavior has been
575*f1fbf3c2SXin Li      changed.
576*f1fbf3c2SXin Li  <li>javassist.expr.NewArray has been implemented.  It enables modifying
577*f1fbf3c2SXin Li      an expression for array creation.
578*f1fbf3c2SXin Li  <li><code>.class</code> notation has been supported.  The modified class
579*f1fbf3c2SXin Li      file needs javassist.runtime.DotClass at runtime.
580*f1fbf3c2SXin Li  <li>a bug in <code>CtClass.getMethods()</code> has been fixed.
581*f1fbf3c2SXin Li  <li>The compiler supports a switch statement.
582*f1fbf3c2SXin Li</ul>
583*f1fbf3c2SXin Li
584*f1fbf3c2SXin Li<p>- version 3.0 beta on May 18th, 2004.
585*f1fbf3c2SXin Li
586*f1fbf3c2SXin Li<ul>
587*f1fbf3c2SXin Li  <li>The ClassPool framework has been redesigned.
588*f1fbf3c2SXin Li     <ul>
589*f1fbf3c2SXin Li     <li>writeFile(), write(), ... in ClassPool have been moved to CtClass.
590*f1fbf3c2SXin Li     <li>The design of javassist.Translator has been changed.
591*f1fbf3c2SXin Li     </ul>
592*f1fbf3c2SXin Li
593*f1fbf3c2SXin Li  <li>javassist.bytecode.annotation has been added for meta tags.
594*f1fbf3c2SXin Li  <li>CtClass.makeNestedClass() has been added.
595*f1fbf3c2SXin Li  <li>The methods declared in javassist.bytecode.InnerClassesAttribute
596*f1fbf3c2SXin Li      have been renamed a bit.
597*f1fbf3c2SXin Li  <li>Now local variables were made available in the source text passed to
598*f1fbf3c2SXin Li  CtBehavior.insertBefore(), MethodCall.replace(), etc.
599*f1fbf3c2SXin Li  <li>CtClass.main(), which prints the version number, has been added.
600*f1fbf3c2SXin Li  <li>ClassPool.SimpleLoader has been public.
601*f1fbf3c2SXin Li  <li>javassist.bytecode.DeprecatedAttribute has been added.
602*f1fbf3c2SXin Li  <li>javassist.bytecode.LocalVariableAttribute has been added.
603*f1fbf3c2SXin Li  <li>CtClass.getURL() and javassist.ClassPath.find() has been added.
604*f1fbf3c2SXin Li  <li>CtBehavior.insertAt() has been added.
605*f1fbf3c2SXin Li  <li>CtClass.detach() has been added.
606*f1fbf3c2SXin Li  <li>CodeAttribute.computeMaxStack() has been added.
607*f1fbf3c2SXin Li</ul>
608*f1fbf3c2SXin Li
609*f1fbf3c2SXin Li<p>- version 2.6 in August, 2003.
610*f1fbf3c2SXin Li
611*f1fbf3c2SXin Li<ul>
612*f1fbf3c2SXin Li  <li>The behavior of CtClass.setSuperclass() was changed.
613*f1fbf3c2SXin Li      To obtain the previous behavior, call CtClass.replaceClassName().
614*f1fbf3c2SXin Li  <li>CtConstructor.setBody() now works for class initializers.
615*f1fbf3c2SXin Li  <li>CtNewMethod.delegator() now works for static methods.
616*f1fbf3c2SXin Li  <li>javassist.expr.Expr.indexOfBytecode() has been added.
617*f1fbf3c2SXin Li  <li>javassist.Loader has been modified so that getPackage() returns
618*f1fbf3c2SXin Li      a package object.
619*f1fbf3c2SXin Li  <li>Now, the compiler can correctly compile a try statement and an
620*f1fbf3c2SXin Li      infinite while-loop.
621*f1fbf3c2SXin Li</ul>
622*f1fbf3c2SXin Li
623*f1fbf3c2SXin Li<p>- version 2.5.1 in May, 2003.
624*f1fbf3c2SXin Li<br>Simple changes for integration with JBoss AOP
625*f1fbf3c2SXin Li<ul>
626*f1fbf3c2SXin Li  <li>Made ClassPool.get0 protected so that subclasses of ClassPool can call it.
627*f1fbf3c2SXin Li  <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.
628*f1fbf3c2SXin Li</ul>
629*f1fbf3c2SXin Li
630*f1fbf3c2SXin Li<p>- version 2.5 in May, 2003.
631*f1fbf3c2SXin Li<br>From this version, Javassist is part of the JBoss project.
632*f1fbf3c2SXin Li<ul>
633*f1fbf3c2SXin Li  <li>The license was changed from MPL to MPL/LGPL dual.
634*f1fbf3c2SXin Li  <li>ClassPool.removeClassPath() and ClassPath.close() have been added.
635*f1fbf3c2SXin Li  <li>ClassPool.makeClass(InputStream) has been added.
636*f1fbf3c2SXin Li  <li>CtClass.makeClassInitializer() has been added.
637*f1fbf3c2SXin Li  <li>javassist.expr.Expr has been changed to a public class.
638*f1fbf3c2SXin Li  <li>javassist.expr.Handler has been added.
639*f1fbf3c2SXin Li  <li>javassist.expr.MethodCall.isSuper() has been added.
640*f1fbf3c2SXin Li  <li>CtMethod.isEmpty() and CtConstructor.isEmpty() have been added.
641*f1fbf3c2SXin Li  <li>LoaderClassPath has been implemented.
642*f1fbf3c2SXin Li</ul>
643*f1fbf3c2SXin Li
644*f1fbf3c2SXin Li<p>- version 2.4 in February, 2003.
645*f1fbf3c2SXin Li<ul>
646*f1fbf3c2SXin Li  <li>The compiler included in Javassist did not correctly work with
647*f1fbf3c2SXin Li	interface methods.  This bug was fixed.
648*f1fbf3c2SXin Li  <li>Now javassist.bytecode.Bytecode allows more than 255 local
649*f1fbf3c2SXin Li	variables in the same method.
650*f1fbf3c2SXin Li  <li>javassist.expr.Instanceof and Cast have been added.
651*f1fbf3c2SXin Li  <li>javassist.expr.{MethodCall,NewExpr,FieldAccess,Instanceof,Cast}.where()
652*f1fbf3c2SXin Li        have been added.  They return the caller-side method surrounding the
653*f1fbf3c2SXin Li	expression.
654*f1fbf3c2SXin Li  <li>javassist.expr.{MethodCall,NewExpr,FieldAccess,Instanceof,Cast}.mayThrow()
655*f1fbf3c2SXin Li        have been added.
656*f1fbf3c2SXin Li  <li>$class has been introduced.
657*f1fbf3c2SXin Li  <li>The parameters to replaceFieldRead(), replaceFieldWrite(),
658*f1fbf3c2SXin Li      and redirectFieldAccess() in javassist.CodeConverter are changed.
659*f1fbf3c2SXin Li  <li>The compiler could not correctly handle a try-catch statement.
660*f1fbf3c2SXin Li      This bug has been fixed.
661*f1fbf3c2SXin Li</ul>
662*f1fbf3c2SXin Li
663*f1fbf3c2SXin Li<p>- version 2.3 in December, 2002.
664*f1fbf3c2SXin Li<ul>
665*f1fbf3c2SXin Li  <li>The tutorial has been revised a bit.
666*f1fbf3c2SXin Li  <li>SerialVersionUID class was donated by Bob Lee.  Thanks.
667*f1fbf3c2SXin Li  <li>CtMethod.setBody() and CtConstructor.setBody() have been added.
668*f1fbf3c2SXin Li  <li>javassist.reflect.ClassMetaobject.useContextClassLoader has been added.
669*f1fbf3c2SXin Li  If true, the reflection package does not use Class.forName() but uses
670*f1fbf3c2SXin Li  a context class loader specified by the user.
671*f1fbf3c2SXin Li  <li>$sig and $type are now available.
672*f1fbf3c2SXin Li  <li>Bugs in Bytecode.write() and read() have been fixed.
673*f1fbf3c2SXin Li</ul>
674*f1fbf3c2SXin Li
675*f1fbf3c2SXin Li<p>- version 2.2 in October, 2002.
676*f1fbf3c2SXin Li<ul>
677*f1fbf3c2SXin Li  <li>The tutorial has been revised.
678*f1fbf3c2SXin Li  <li>A new package <code>javassist.expr</code> has been added.
679*f1fbf3c2SXin Li        This is replacement of classic <code>CodeConverter</code>.
680*f1fbf3c2SXin Li  <li>javassist.ConstParameter was changed into
681*f1fbf3c2SXin Li	javassist.CtMethod.ConstParameter.
682*f1fbf3c2SXin Li  <li>javassist.FieldInitializer was renamed into
683*f1fbf3c2SXin Li	javassist.CtField.Initializer.
684*f1fbf3c2SXin Li  <li>A bug in javassist.bytecode.Bytecode.addInvokeinterface() has been
685*f1fbf3c2SXin Li	fixed.
686*f1fbf3c2SXin Li  <li>In javassist.bytecode.Bytecode, addGetfield(), addGetstatic(),
687*f1fbf3c2SXin Li	addInvokespecial(), addInvokestatic(), addInvokevirtual(),
688*f1fbf3c2SXin Li	and addInvokeinterface()
689*f1fbf3c2SXin Li	have been modified to update the current statck depth.
690*f1fbf3c2SXin Li</ul>
691*f1fbf3c2SXin Li
692*f1fbf3c2SXin Li<p>- version 2.1 in July, 2002.
693*f1fbf3c2SXin Li<ul>
694*f1fbf3c2SXin Li  <li>javassist.CtMember and javassist.CtBehavior have been added.
695*f1fbf3c2SXin Li  <li>javassist.CtClass.toBytecode() has been added.
696*f1fbf3c2SXin Li  <li>javassist.CtClass.toClass() and javassist.ClassPool.writeAsClass()
697*f1fbf3c2SXin Li	has been added.
698*f1fbf3c2SXin Li  <li>javassist.ByteArrayClassPath has been added.
699*f1fbf3c2SXin Li  <li>javassist.bytecode.Mnemonic has been added.
700*f1fbf3c2SXin Li  <li>Several bugs have been fixed.
701*f1fbf3c2SXin Li</ul>
702*f1fbf3c2SXin Li
703*f1fbf3c2SXin Li<p>- version 2.0 (major update) in November, 2001.
704*f1fbf3c2SXin Li<ul>
705*f1fbf3c2SXin Li  <li>The javassist.bytecode package has been provided.  It is a
706*f1fbf3c2SXin Li    lower-level API for directly modifying a class file although
707*f1fbf3c2SXin Li    the users must have detailed knowledge of the Java bytecode.
708*f1fbf3c2SXin Li
709*f1fbf3c2SXin Li  <li>The mechanism for creating CtClass objects have been changed.
710*f1fbf3c2SXin Li
711*f1fbf3c2SXin Li  <li>javassist.tool.Dump moves to the javassist package.
712*f1fbf3c2SXin Li</ul>
713*f1fbf3c2SXin Li
714*f1fbf3c2SXin Li<p>version 1.0 in July, 2001.
715*f1fbf3c2SXin Li<ul>
716*f1fbf3c2SXin Li  <li>javassist.reflect.Metaobject and ClassMetaobject was changed.
717*f1fbf3c2SXin Li    Now they throw the same exception that they receive from a
718*f1fbf3c2SXin Li    base-level object.
719*f1fbf3c2SXin Li</ul>
720*f1fbf3c2SXin Li
721*f1fbf3c2SXin Li<p>- version 0.8
722*f1fbf3c2SXin Li<ul>
723*f1fbf3c2SXin Li  <li>javassist.tool.Dump was added.  It is a class file viewer.
724*f1fbf3c2SXin Li
725*f1fbf3c2SXin Li  <li>javassist.FiledInitializer.byNewArray() was added.  It is for
726*f1fbf3c2SXin Li    initializing a field with an array object.
727*f1fbf3c2SXin Li
728*f1fbf3c2SXin Li  <li>javassist.CodeConverter.redirectMethodCall() was added.
729*f1fbf3c2SXin Li
730*f1fbf3c2SXin Li  <li>javassist.Run was added.
731*f1fbf3c2SXin Li</ul>
732*f1fbf3c2SXin Li
733*f1fbf3c2SXin Li<p>- version 0.7
734*f1fbf3c2SXin Li<ul>
735*f1fbf3c2SXin Li  <li>javassit.Loader was largely modified.  javassist.UserLoader was
736*f1fbf3c2SXin Li    deleted.  Instead, Codebase was renamed to ClassPath
737*f1fbf3c2SXin Li    and UserClassPath was added.  Now programmers who want to
738*f1fbf3c2SXin Li    customize Loader must write a class implementing UserClassPath
739*f1fbf3c2SXin Li    instead of UserLoader.  This change is for sharing class search paths
740*f1fbf3c2SXin Li    between Loader and CtClass.CtClass(String).
741*f1fbf3c2SXin Li
742*f1fbf3c2SXin Li  <li>CtClass.addField(), addMethod(), addConstructor(), addWrapper() were
743*f1fbf3c2SXin Li    also largely modified so that it receives CtNewMethod, CtNewConstructor,
744*f1fbf3c2SXin Li    or CtNewField.  The static methods for creating these objects were
745*f1fbf3c2SXin Li    added to the API.
746*f1fbf3c2SXin Li
747*f1fbf3c2SXin Li  <li>Constructors are now represented by CtConstructor objects.
748*f1fbf3c2SXin Li    CtConstructor is a subclass of CtMethod.
749*f1fbf3c2SXin Li
750*f1fbf3c2SXin Li  <li>CtClass.getUserAttribute() was removed.  Use CtClass.getAttribute().
751*f1fbf3c2SXin Li
752*f1fbf3c2SXin Li  <li>javassist.rmi.RmiLoader was added.
753*f1fbf3c2SXin Li
754*f1fbf3c2SXin Li  <li>javassist.reflect.Metalevel._setMetaobject() was added.  Now
755*f1fbf3c2SXin Li    metaobjects can be replaced at runtime.
756*f1fbf3c2SXin Li</ul>
757*f1fbf3c2SXin Li
758*f1fbf3c2SXin Li<p>- version 0.6
759*f1fbf3c2SXin Li<ul>
760*f1fbf3c2SXin Li  <li>Javassist was modified to correctly deal with array types appearing
761*f1fbf3c2SXin Li    in signatures.
762*f1fbf3c2SXin Li
763*f1fbf3c2SXin Li  <li>A bug crashed resulting bytecode if a class includes a private static
764*f1fbf3c2SXin Li    filed.  It has been fixed.
765*f1fbf3c2SXin Li
766*f1fbf3c2SXin Li  <li>javassist.CtNewInterface was added.
767*f1fbf3c2SXin Li
768*f1fbf3c2SXin Li  <li>javassist.Loader.recordClass() was renamed into makeClass().
769*f1fbf3c2SXin Li
770*f1fbf3c2SXin Li  <li>javassist.UserLoader.loadClass() was changed to take the second
771*f1fbf3c2SXin Li    parameter.
772*f1fbf3c2SXin Li</ul>
773*f1fbf3c2SXin Li
774*f1fbf3c2SXin Li<p>- version 0.5
775*f1fbf3c2SXin Li<ul>
776*f1fbf3c2SXin Li  <li>a bug-fix version.
777*f1fbf3c2SXin Li</ul>
778*f1fbf3c2SXin Li
779*f1fbf3c2SXin Li<p>- version 0.4
780*f1fbf3c2SXin Li<ul>
781*f1fbf3c2SXin Li  <li>Major update again.  Many classes and methods were changed.
782*f1fbf3c2SXin Li    Most of methods taking java.lang.Class have been changed to
783*f1fbf3c2SXin Li    take javassist.CtClass.
784*f1fbf3c2SXin Li</ul>
785*f1fbf3c2SXin Li
786*f1fbf3c2SXin Li<p>- version 0.3
787*f1fbf3c2SXin Li<ul>
788*f1fbf3c2SXin Li  <li>Major update.  Many classes and methods were changed.
789*f1fbf3c2SXin Li</ul>
790*f1fbf3c2SXin Li
791*f1fbf3c2SXin Li<p>- version 0.2
792*f1fbf3c2SXin Li<ul>
793*f1fbf3c2SXin Li  <li>Jar/zip files are supported.
794*f1fbf3c2SXin Li</ul>
795*f1fbf3c2SXin Li
796*f1fbf3c2SXin Li<p>-version 0.1 on April 16, 1999.
797*f1fbf3c2SXin Li<ul>
798*f1fbf3c2SXin Li  <li>The first release.
799*f1fbf3c2SXin Li</ul>
800*f1fbf3c2SXin Li
801*f1fbf3c2SXin Li<p><br>
802*f1fbf3c2SXin Li
803*f1fbf3c2SXin Li<a name="copyright">
804*f1fbf3c2SXin Li<h2>Copyright notices</h2>
805*f1fbf3c2SXin Li
806*f1fbf3c2SXin Li<p>Javassist, a Java-bytecode translator toolkit.
807*f1fbf3c2SXin Li<br>Copyright (C) 1999- Shigeru Chiba. All Rights Reserved.
808*f1fbf3c2SXin Li
809*f1fbf3c2SXin Li<p>The contents of this software, Javassist, are subject to
810*f1fbf3c2SXin Lithe Mozilla Public License Version 1.1 (the "License");<br>
811*f1fbf3c2SXin Liyou may not use this software except in compliance
812*f1fbf3c2SXin Liwith the License. You may obtain a copy of the License at
813*f1fbf3c2SXin Li<br>http://www.mozilla.org/MPL/
814*f1fbf3c2SXin Li
815*f1fbf3c2SXin Li<p>Software distributed under the License is distributed on an "AS IS"
816*f1fbf3c2SXin Libasis, WITHOUT WARRANTY OF <br>ANY KIND, either express or implied.
817*f1fbf3c2SXin LiSee the License for the specific language governing rights and
818*f1fbf3c2SXin Li<br>limitations under the License.
819*f1fbf3c2SXin Li
820*f1fbf3c2SXin Li<p>The Original Code is Javassist.
821*f1fbf3c2SXin Li
822*f1fbf3c2SXin Li<p>The Initial Developer of the Original Code is Shigeru Chiba.
823*f1fbf3c2SXin LiPortions created by the Initial Developer are<br>&nbsp;
824*f1fbf3c2SXin LiCopyright (C) 1999- Shigeru Chiba. All Rights Reserved.
825*f1fbf3c2SXin Li<p>Contributor(s): __Bill Burke, Jason T. Greene______________.
826*f1fbf3c2SXin Li
827*f1fbf3c2SXin Li<p>Alternatively, the contents of this software may be used under the
828*f1fbf3c2SXin Literms of the GNU Lesser General Public License Version 2.1 or later
829*f1fbf3c2SXin Li(the "LGPL"), or the Apache License Version 2.0 (the "AL"),
830*f1fbf3c2SXin Liin which case the provisions of the LGPL or the AL are applicable
831*f1fbf3c2SXin Liinstead of those above. If you wish to allow use of your version of
832*f1fbf3c2SXin Lithis software only under the terms of either the LGPL or the AL, and not to allow others to
833*f1fbf3c2SXin Liuse your version of this software under the terms of the MPL, indicate
834*f1fbf3c2SXin Liyour decision by deleting the provisions above and replace them with
835*f1fbf3c2SXin Lithe notice and other provisions required by the LGPL or the AL. If you do not
836*f1fbf3c2SXin Lidelete the provisions above, a recipient may use your version of this
837*f1fbf3c2SXin Lisoftware under the terms of any one of the MPL, the LGPL or the AL.
838*f1fbf3c2SXin Li
839*f1fbf3c2SXin Li<p>If you obtain this software as part of JBoss, the contents of this
840*f1fbf3c2SXin Lisoftware may be used under only the terms of the LGPL.  To use them
841*f1fbf3c2SXin Liunder the MPL, you must obtain a separate package including only
842*f1fbf3c2SXin LiJavassist but not the other part of JBoss.
843*f1fbf3c2SXin Li
844*f1fbf3c2SXin Li<p>All the contributors to the original source tree have agreed to
845*f1fbf3c2SXin Lithe original license term described above.
846*f1fbf3c2SXin Li
847*f1fbf3c2SXin Li<p><br>
848*f1fbf3c2SXin Li
849*f1fbf3c2SXin Li<h2>Acknowledgments</h2>
850*f1fbf3c2SXin Li
851*f1fbf3c2SXin Li<p>The development of this software is sponsored in part by the PRESTO
852*f1fbf3c2SXin Liand CREST programs of <a href="http://www.jst.go.jp/">Japan
853*f1fbf3c2SXin LiScience and Technology Corporation</a>.
854*f1fbf3c2SXin Li
855*f1fbf3c2SXin Li<p>I'd like to thank Michiaki Tatsubori, Johan Cloetens,
856*f1fbf3c2SXin LiPhilip Tomlinson, Alex Villazon, Pascal Rapicault, Dan HE, Eric Tanter,
857*f1fbf3c2SXin LiMichael Haupt, Toshiyuki Sasaki, Renaud Pawlak, Luc Bourlier,
858*f1fbf3c2SXin LiEric Bui, Lewis Stiller, Susumu Yamazaki, Rodrigo Teruo Tomita,
859*f1fbf3c2SXin LiMarc Segura-Devillechaise, Jan Baudisch, Julien Blass, Yoshiki Sato,
860*f1fbf3c2SXin LiFabian Crabus, Bo Norregaard Jorgensen, Bob Lee, Bill Burke,
861*f1fbf3c2SXin LiRemy Sanlaville, Muga Nishizawa, Alexey Loubyansky, Saori Oki,
862*f1fbf3c2SXin LiAndreas Salathe, Dante Torres estrada, S. Pam, Nuno Santos,
863*f1fbf3c2SXin LiDenis Taye, Colin Sampaleanu, Robert Bialek, Asato Shimotaki,
864*f1fbf3c2SXin LiHoward Lewis Ship, Richard Jones, Marjan Sterjev,
865*f1fbf3c2SXin LiBruce McDonald, Mark Brennan, Vlad Skarzhevskyy,
866*f1fbf3c2SXin LiBrett Randall, Tsuyoshi Murakami, Nathan Meyers, Yoshiyuki Usui
867*f1fbf3c2SXin LiYutaka Sunaga, Arjan van der Meer, Bruce Eckel, Guillaume Pothier,
868*f1fbf3c2SXin LiKumar Matcha, Andreas Salathe, Renat Zubairov, Armin Haaf,
869*f1fbf3c2SXin LiEmmanuel Bernard, Jason T. Greene
870*f1fbf3c2SXin Liand all other contributors for their contributions.
871*f1fbf3c2SXin Li
872*f1fbf3c2SXin Li<p><br>
873*f1fbf3c2SXin Li
874*f1fbf3c2SXin Li<hr>
875*f1fbf3c2SXin Li<a href="http://www.javassist.org">Shigeru Chiba</a>
876*f1fbf3c2SXin Li(Email: <tt>[email protected]</tt>)
877*f1fbf3c2SXin Li
878*f1fbf3c2SXin Li</body>
879*f1fbf3c2SXin Li</html>
880