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