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><<i>java-home</i>><tt>/jre/lib/ext</tt>.</ul> 112*f1fbf3c2SXin Li 113*f1fbf3c2SXin Li<p><<i>java-home</i>> 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> 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