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;