Skip to content

Commit

Permalink
renamed insertTranslator() in ClassPool to addTranslator() since
Browse files Browse the repository at this point in the history
it appends a class path to the tail of the chain.
ClassClassPath has been implemented.


git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@79 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
  • Loading branch information
chiba committed Apr 7, 2004
1 parent 707e08a commit baf561d
Show file tree
Hide file tree
Showing 8 changed files with 119 additions and 47 deletions.
2 changes: 1 addition & 1 deletion sample/evolve/DemoLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class DemoLoader {
public static void main(String[] args) throws Throwable {
Evolution translator = new Evolution();
ClassPool cp = ClassPool.getDefault();
cp.insertTranslator(translator);
cp.addTranslator(translator);
Loader cl = new Loader();
cl.setClassPool(cp);

Expand Down
96 changes: 96 additions & 0 deletions src/main/javassist/ClassClassPath.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/*
* Javassist, a Java-bytecode translator toolkit.
* Copyright (C) 1999-2004 Shigeru Chiba. All Rights Reserved.
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. Alternatively, the contents of this file may be used under
* the terms of the GNU Lesser General Public License Version 2.1 or later.
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*/

package javassist;

import java.io.InputStream;
import java.net.URL;

/**
* A search-path for obtaining a class file
* by <code>getResourceAsStream()</code> in <code>java.lang.Class</code>.
*
* <p>Try adding a <code>ClassClassPath</code> when a program is running
* with a user-defined class loader and any class files are not found with
* the default <code>ClassPool</code>. For example,
*
* <ul><pre>
* ClassPool cp = ClassPool.getDefault();
* cp.insertClassPath(new ClassClassPath(this.getClass()));
* </pre></ul>
*
* This code snippet permanently adds a <code>ClassClassPath</code>
* to the default <code>ClassPool</code>. Note that the default
* <code>ClassPool</code> is a singleton. The added
* <code>ClassClassPath</code> uses a class object representing
* the class including the code snippet above.
*
* @see ClassPool#insertClassPath(ClassPath)
* @see ClassPool#appendClassPath(ClassPath)
* @see LoaderClassPath
*/
public class ClassClassPath implements ClassPath {
private Class thisClass;

/** Creates a search path.
*
* @param c the <code>Class</code> object used to obtain a class
* file. <code>getResourceAsStream()</code> is called on
* this object.
*/
public ClassClassPath(Class c) {
thisClass = c;
}

ClassClassPath() {
/* The value of thisClass was this.getClass() in early versions:
*
* thisClass = this.getClass();
*
* However, this made openClassfile() not search all the system
* class paths if javassist.jar is put in jre/lib/ext/
* (with JDK1.4).
*/
this(java.lang.Object.class);
}

/**
* Obtains a class file by <code>getResourceAsStream()</code>.
*/
public InputStream openClassfile(String classname) {
String jarname = "/" + classname.replace('.', '/') + ".class";
return thisClass.getResourceAsStream(jarname);
}

/**
* Obtains the URL of the specified class file.
*
* @return null if the class file could not be found.
*/
public URL find(String classname) {
String jarname = "/" + classname.replace('.', '/') + ".class";
return thisClass.getResource(jarname);
}

/**
* Does nothing.
*/
public void close() {
}

public String toString() {
return thisClass.getName() + ".class";
}
}
23 changes: 17 additions & 6 deletions src/main/javassist/ClassPool.java
Original file line number Diff line number Diff line change
Expand Up @@ -123,17 +123,23 @@ public ClassPool(ClassPool p) {
}

/**
* Inserts a new translator at the head of the translator chain.
* Adds a new translator at the end of the translator chain.
*
* @param trans a new translator associated with this class pool.
* @throws RuntimeException if trans.start() throws an exception.
*/
public void insertTranslator(Translator trans) throws RuntimeException {
ClassPool next = new ClassPool(source, parent);
next.translator = trans;
source = next;
public void addTranslator(Translator trans) throws RuntimeException {
ClassPool cp;
if (translator == null)
cp = this;
else {
cp = new ClassPool(source, parent);
source = cp;
}

cp.translator = trans;
try {
trans.start(next);
trans.start(cp);
}
catch (Exception e) {
throw new RuntimeException(
Expand All @@ -160,7 +166,12 @@ public void insertTranslator(Translator trans) throws RuntimeException {
* cp.appendSystemPath();
* </code></ul>
*
* <p>If the default class pool cannot find any class files,
* try <code>ClassClassPath</code> and <code>LoaderClassPath</code>.
*
* @param t null or the translator linked to the class pool.
* @see ClassClassPath
* @see LoaderClassPath
*/
public static synchronized ClassPool getDefault() {
if (defaultPool == null) {
Expand Down
37 changes: 1 addition & 36 deletions src/main/javassist/ClassPoolTail.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,40 +31,6 @@ final class ClassPathList {
}
}


final class SystemClassPath implements ClassPath {
Class thisClass;

SystemClassPath() {
/* The value of thisClass was this.getClass() in early versions:
*
* thisClass = this.getClass();
*
* However, this made openClassfile() not search all the system
* class paths if javassist.jar is put in jre/lib/ext/
* (with JDK1.4).
*/
thisClass = java.lang.Object.class;
}

public InputStream openClassfile(String classname) {
String jarname = "/" + classname.replace('.', '/') + ".class";
return thisClass.getResourceAsStream(jarname);
}

public URL find(String classname) {
String jarname = "/" + classname.replace('.', '/') + ".class";
return thisClass.getResource(jarname);
}

public void close() {}

public String toString() {
return "*system class path*";
}
}


final class DirClassPath implements ClassPath {
String directory;

Expand Down Expand Up @@ -106,7 +72,6 @@ public String toString() {
}
}


final class JarClassPath implements ClassPath {
JarFile jarfile;
String jarfileURL;
Expand Down Expand Up @@ -279,7 +244,7 @@ public synchronized void removeClassPath(ClassPath cp) {
}

public ClassPath appendSystemPath() {
return appendClassPath(new SystemClassPath());
return appendClassPath(new ClassClassPath());
}

public ClassPath insertClassPath(String pathname)
Expand Down
2 changes: 1 addition & 1 deletion src/main/javassist/LoaderClassPath.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@
* @author <a href="mailto:bill@jboss.org">Bill Burke</a>
* @author Shigeru Chiba
*
* @see javassist.ClassPath
* @see ClassPool#insertClassPath(ClassPath)
* @see ClassPool#appendClassPath(ClassPath)
* @see ClassClassPath
*/
public class LoaderClassPath implements ClassPath {
private WeakReference clref;
Expand Down
2 changes: 1 addition & 1 deletion src/main/javassist/reflect/Compiler.java
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ private static void processClasses(CompiledClass[] entries, int n)
{
Reflection implementor = new Reflection();
ClassPool pool = ClassPool.getDefault();
pool.insertTranslator(implementor);
pool.addTranslator(implementor);

for (int i = 0; i < n; ++i) {
CtClass c = pool.get(entries[i].classname);
Expand Down
2 changes: 1 addition & 1 deletion src/main/javassist/reflect/Loader.java
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ public Loader() {

reflection = new Reflection();
ClassPool pool = ClassPool.getDefault();
pool.insertTranslator(reflection);
pool.addTranslator(reflection);
setClassPool(pool);
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/javassist/rmi/AppletServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ private AppletServer(ClassPool loader, StubGenerator gen, int port)
exportedNames = new Hashtable();
exportedObjects = new Vector();
stubGen = gen;
loader.insertTranslator(gen);
loader.addTranslator(gen);
setClassPool(loader);
}

Expand Down

0 comments on commit baf561d

Please sign in to comment.