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

<h1>Javassist version 3</h1>

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

<p><br></p>

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

<p><br>

<h2>Files</h2>

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

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

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

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

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

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

<p><br>

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

<p>JDK 1.4 or later is needed.

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

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

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

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

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

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

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

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

<p>or if the operating system is Windows:

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


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

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

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

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

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

<p>   To run, type the commands:

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

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

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

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

<p>   To run, type the commands:

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

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

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

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

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

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

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

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

<p>   This is another example of reflective programming.

<p>   To run, type the commands:

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

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

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

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

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

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

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

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

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

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

<p>   This demonstrates the javassist.rmi package.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<h2>Hints</h2>

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

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

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

<p><br>

<h2>Changes</h2>

<p>-version 3.14 on October 5, 2010

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

<p>-version 3.13 on July 19, 2010

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

<p>-version 3.12.1 on June 10, 2010

<p>-version 3.12 on April 16, 2010

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

<p>-version 3.10 on March 5, 2009

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

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

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

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

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

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

<p>-version 3.6.0 on September 13, 2007

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

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

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

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

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

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

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

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

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

<p>-version 3.2 on June 21, 2006

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

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

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

<p>- version 3.1 on February 23, 2006

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

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

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

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

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

<p>- version 3.0 on January 18, 2005

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

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

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

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

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

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

<p>- version 2.6 in August, 2003.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  <li>javassist.rmi.RmiLoader was added.

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

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

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

  <li>javassist.CtNewInterface was added.

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

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

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

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

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

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

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

<p><br>

<h2>Bug reports etc.</h2>

<dl>
<dt>Bug reports:
<dd>Post your reports at <a href="http://www.jboss.org/jive.jsp">Forums</a>
or directly send an email to:
<br>&nbsp;
<tt><a href="mailto:chiba@acm.org">chiba@acm.org</a></tt>
or
<tt><a href="mailto:chiba@is.titech.ac.jp">chiba@is.titech.ac.jp</a></tt>
<br>

<p><dt>The home page of Javassist:
<dd>Visit <a href="http://www.javassist.org"><tt>www.javassist.org</tt></a>
and <a href="http://www.jboss.org/index.html?module=html&op=userdisplay&id=developers/projects/javassist"><tt>www.jboss.org</tt></a>

</dl>

<p><br>

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

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

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

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

<p>The Original Code is Javassist. 

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

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

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

<p>All the contributors to the original source tree must agree to
the original license term described above.

<p><br>

<h2>Acknowledgments</h2>

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

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

<p><br>

<hr>
<a href="http://www.is.titech.ac.jp/~chiba">Shigeru Chiba</a>
(Email: <tt>chiba@acm.org</tt>)
<br>Dept. of Math. and Computing Sciences,
<a href="http://www.titech.ac.jp">Tokyo Institute of Technology</a>
