Browse Source

added ClassPool#removeCached so that subclasses of ClassPool can do

their own caching.   A bug in CtClassType#setName was fixed.


git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@29 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
tags/rel_3_17_1_ga
chiba 21 years ago
parent
commit
f6c16db268
2 changed files with 30 additions and 5 deletions
  1. 14
    1
      src/main/javassist/ClassPool.java
  2. 16
    4
      tutorial/tutorial.html

+ 14
- 1
src/main/javassist/ClassPool.java View File

@@ -86,12 +86,25 @@ public class ClassPool {
/**
* Provide a hook so that subclasses can do their own
* caching of classes
*
* @see #removeCached(String)
*/
protected CtClass getCached(String classname)
{
return (CtClass)classes.get(classname);
}

/**
* Provide a hook so that subclasses can do their own
* caching of classes
*
* @see #getCached(String)
*/
protected void removeCached(String classname)
{
classes.remove(classname);
}

/**
* Creates a class pool.
*
@@ -480,7 +493,7 @@ public class ClassPool {
synchronized void classNameChanged(String oldname, CtClass clazz) {
CtClass c = (CtClass)getCached(oldname);
if (c == clazz) // must check this equation
classes.remove(c);
removeCached(oldname);

String newName = clazz.getName();
checkNotFrozen(newName, "the class with the new name is frozen.");

+ 16
- 4
tutorial/tutorial.html View File

@@ -34,9 +34,10 @@ Shigeru Chiba
Java bytecode is stored in a binary file called a class file.
Each class file contains one Java class or interface.

<p>The class <code>Javassist.CtClass</code> is an abstract representation
of a class file. A <code>CtClass</code> object is a handle for dealing
with a class file. The following program is a very simple example:
<p>The class <code>Javassist.CtClass</code> is an abstract
representation of a class file. A <code>CtClass</code> (compile-time
class) object is a handle for dealing with a class file. The
following program is a very simple example:

<ul><pre>
ClassPool pool = ClassPool.getDefault();
@@ -57,7 +58,18 @@ to a file or an output stream.
mapping between classes and <code>CtClass</code> objects. Javassist
never allows two distinct <code>CtClass</code> objects to represent
the same class. This is a crucial feature to consistent program
transformaiton.
transformaiton. If you need, however, you can deal with multiple
instances of <code>ClassPool</code> at the same time. To create a new
instance of <code>ClassPool</code>, write the following code:

<ul><pre>
ClassPool cp = new ClassPool(null);
cp.appendSystemPath();
cp.insertClassPath("."); // or something appropriate
</pre></ul>

<p><code>ClassPool.getDefault()</code> is just a singleton factory
method provided for convenience.

<p>To modify the definition of a class, the users must first obtain a
reference to the <code>CtClass</code> object representing that class.

Loading…
Cancel
Save