You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2006/12/30 02:03:37 UTC

svn commit: r491144 - in /tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services: ClassFactoryClassPool.java ClassFactoryImpl.java CtClassSource.java

Author: hlship
Date: Fri Dec 29 17:03:36 2006
New Revision: 491144

URL: http://svn.apache.org/viewvc?view=rev&rev=491144
Log:
Modifications to the ClassFactory implementations, to allow direct control and coordination of the ClassPool (needed by tapestry-core to build proxies that can access properties added via enhancement).

Modified:
    tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryClassPool.java
    tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryImpl.java
    tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/CtClassSource.java

Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryClassPool.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryClassPool.java?view=diff&rev=491144&r1=491143&r2=491144
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryClassPool.java (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryClassPool.java Fri Dec 29 17:03:36 2006
@@ -12,91 +12,89 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.ioc.internal.services;
-
+package org.apache.tapestry.ioc.internal.services;
+
 import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newSet;
-
-import java.util.Set;
-
-import javassist.CannotCompileException;
-import javassist.ClassPath;
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.LoaderClassPath;
-
-/**
- * Used to ensure that {@link javassist.ClassPool#appendClassPath(javassist.ClassPath)} is invoked
- * with a synchronized lock, and also handles tricky class loading issues (caused by the creation of
- * classes, and class loaders, at runtime).
- * 
- * @author Howard Lewis Ship
- */
-class ClassFactoryClassPool extends ClassPool
-{
-    // This is the loader with the widest visibility yet seen.
-
-    private ClassLoader _loader;
-
-    private ClassPath _priorClassPath;
-
-    /**
-     * Used to identify which class loaders have already been integrated into the pool.
-     */
-    private Set<ClassLoader> _loaders = newSet();
-
-    ClassFactoryClassPool(ClassLoader contextClassLoader)
-    {
-        super(null);
-
-        addClassLoaderIfNeeded(contextClassLoader);
-    }
-
-    /**
-     * Convienience method for adding to the ClassPath for a particular class loader.
-     * <p>
-     * TODO: This code assumes that ClassLoaders are structured as a "line" not a proper "tree".
-     * That is, if the ClassLoader hiearchy actually does have branches, rather than a straight line
-     * from root to leaf, it may not work.
-     * 
-     * @param loader
-     *            the class loader to add (derived from a loaded class, and may be null for some
-     *            system classes)
-     */
-    public synchronized void addClassLoaderIfNeeded(ClassLoader loader)
-    {
-        if (loader == null || loader == _loader || _loaders.contains(loader))
-            return;
-
-        ClassPath path = new LoaderClassPath(loader);
-
-        if (_priorClassPath != null)
-            removeClassPath(_priorClassPath);
-
-        appendClassPath(path);
-
-        _priorClassPath = path;
-
-        ClassLoader l = loader;
-        while (l != null)
-        {
-            _loaders.add(l);
-            l = l.getParent();
-        }
-
-        _loader = loader;
-    }
-
-    public ClassLoader getLoader()
-    {
-        return _loader;
-    }
-
-    /**
-     * Invoked to convert an fabricated class into a real class.
-     */
-    @Override
-    public synchronized Class toClass(CtClass ctClass) throws CannotCompileException
-    {
-        return ctClass.toClass(_loader);
-    }
+
+import java.util.Set;
+
+import javassist.CannotCompileException;
+import javassist.ClassPath;
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.LoaderClassPath;
+
+/**
+ * Used to ensure that {@link javassist.ClassPool#appendClassPath(javassist.ClassPath)} is invoked
+ * within a synchronized lock, and also handles tricky class loading issues (caused by the creation of
+ * classes, and class loaders, at runtime).
+ * 
+ * @author Howard Lewis Ship
+ */
+public class ClassFactoryClassPool extends ClassPool
+{
+    // This is the loader with the widest visibility yet seen.
+
+    private ClassLoader _loader;
+
+    private ClassPath _priorClassPath;
+
+    /**
+     * Used to identify which class loaders have already been integrated into the pool.
+     */
+    private Set<ClassLoader> _loaders = newSet();
+
+    public ClassFactoryClassPool(ClassLoader contextClassLoader)
+    {
+        super(null);
+
+        addClassLoaderIfNeeded(contextClassLoader);
+    }
+
+    /**
+     * Convienience method for adding to the ClassPath for a particular class loader.
+     * <p>
+     * TODO: This code assumes that ClassLoaders are structured as a "line" not a proper "tree".
+     * That is, if the ClassLoader hiearchy actually does have branches, rather than a straight line
+     * from root to leaf, it may not work.
+     * 
+     * @param loader
+     *            the class loader to add (derived from a loaded class, and may be null for some
+     *            system classes)
+     */
+    public synchronized void addClassLoaderIfNeeded(ClassLoader loader)
+    {
+        if (loader == null || loader == _loader || _loaders.contains(loader)) return;
+
+        ClassPath path = new LoaderClassPath(loader);
+
+        if (_priorClassPath != null) removeClassPath(_priorClassPath);
+
+        appendClassPath(path);
+
+        _priorClassPath = path;
+
+        ClassLoader l = loader;
+        while (l != null)
+        {
+            _loaders.add(l);
+            l = l.getParent();
+        }
+
+        _loader = loader;
+    }
+
+    public ClassLoader getLoader()
+    {
+        return _loader;
+    }
+
+    /**
+     * Invoked to convert an fabricated class into a real class.
+     */
+    @Override
+    public synchronized Class toClass(CtClass ctClass) throws CannotCompileException
+    {
+        return ctClass.toClass(_loader);
+    }
 }

Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryImpl.java?view=diff&rev=491144&r1=491143&r2=491144
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryImpl.java (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryImpl.java Fri Dec 29 17:03:36 2006
@@ -53,9 +53,15 @@
     /** Main constructor where a specific class loader and log is provided. */
     public ClassFactoryImpl(ClassLoader classLoader, Log log)
     {
+        this(classLoader, new ClassFactoryClassPool(classLoader), log);
+    }
+
+    /** Special constructor used when the class pool is provided externally. */
+    public ClassFactoryImpl(ClassLoader classLoader, ClassFactoryClassPool pool, Log log)
+    {
         _loader = classLoader;
 
-        _pool = new ClassFactoryClassPool(classLoader);
+        _pool = pool;
 
         _classSource = new CtClassSource(_pool);
 

Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/CtClassSource.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/CtClassSource.java?view=diff&rev=491144&r1=491143&r2=491144
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/CtClassSource.java (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/CtClassSource.java Fri Dec 29 17:03:36 2006
@@ -27,7 +27,7 @@
  */
 class CtClassSource
 {
-    private ClassFactoryClassPool _pool;
+    private final ClassFactoryClassPool _pool;
 
     private int _createdClassCount = 0;