]> source.dussan.org Git - javassist.git/commitdiff
made ProxyFactory.getClassLoader() customizable.
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Thu, 31 Aug 2006 18:46:24 +0000 (18:46 +0000)
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Thu, 31 Aug 2006 18:46:24 +0000 (18:46 +0000)
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@321 30ef5769-5b8d-40dd-aea6-55b5d6557bb3

src/main/javassist/CtClass.java
src/main/javassist/util/proxy/ProxyFactory.java

index 91ad996843574a0e739d1fb987cf4698ba32693e..22219da42172365c93fdb536562228f029e6b7ec 100644 (file)
@@ -52,7 +52,7 @@ public abstract class CtClass {
     /**
      * The version number of this release.
      */
-    public static final String version = "3.3";
+    public static final String version = "3.4";
 
     /**
      * Prints the version number and the copyright notice.
index fdd397ad3737585101bb24a76b2b7136e2471eb3..7fe72c7746842b5756c1ae0296c71fe0cfb4262a 100644 (file)
@@ -142,6 +142,13 @@ public class ProxyFactory {
         superClass = clazz;
     }
 
+    /**
+     * Obtains the super class set by <code>setSuperclass()</code>.
+     *
+     * @since 3.4
+     */
+    public Class getSuperclass() { return superClass; }
+
     /**
      * Sets the interfaces of a proxy class.
      */
@@ -149,6 +156,13 @@ public class ProxyFactory {
         interfaces = ifs;
     }
 
+    /**
+     * Obtains the interfaces set by <code>setInterfaces</code>.
+     *
+     * @since 3.4
+     */
+    public Class[] getInterfaces() { return interfaces; }
+
     /**
      * Sets a filter that selects the methods that will be controlled by a handler.
      */
@@ -177,14 +191,48 @@ public class ProxyFactory {
         return thisClass;
     }
 
+    /**
+     * A provider of class loaders.  
+     */
+    public static interface ClassLoaderProvider {
+        /**
+         * Returns a class loader.
+         *
+         * @param pf    a proxy factory that is going to obtain a class loader.
+         */
+        public ClassLoader get(ProxyFactory pf);
+    }
+
+    /**
+     * A provider used by <code>createClass()</code> for obtaining
+     * a class loader.
+     * <code>get()</code> on this <code>ClassLoaderGetter</code> object
+     * is called to obtain a class loader.
+     *
+     * <p>The value of this field can be updated for changing the default
+     * implementation.
+     *
+     * @since 3.4
+     */
+    public static ClassLoaderProvider classLoaderProvider
+        = new ClassLoaderProvider() {
+              public ClassLoader get(ProxyFactory pf) {
+                  return pf.getClassLoader0();
+              }
+          };
+
     protected ClassLoader getClassLoader() {
+        return classLoaderProvider.get(this);
+    }
+
+    protected ClassLoader getClassLoader0() {
         // return Thread.currentThread().getContextClassLoader();
         ClassLoader loader = null;
         if (superClass != null && !superClass.getName().equals("java.lang.Object"))
             loader = superClass.getClassLoader();
         else if (interfaces != null && interfaces.length > 0)
             loader = interfaces[0].getClassLoader();
-
         if (loader == null) {
             loader = getClass().getClassLoader();
             // In case javassist is in the endorsed dir