Author: hlship
Date: Mon Feb  5 16:33:15 2007
New Revision: 503934

URL: http://svn.apache.org/viewvc?view=rev&rev=503934
Log:
Change how CtClass instances are converted into Class instances to use the 
correct class loader (the current architecture caused ClassCastExceptions 
inside tapestry-core).

Modified:
    tapestry/tapestry5/tapestry-ioc/trunk/pom.xml
    
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
    
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ClassFabImplTest.java

Modified: tapestry/tapestry5/tapestry-ioc/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/pom.xml?view=diff&rev=503934&r1=503933&r2=503934
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/pom.xml (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/pom.xml Mon Feb  5 16:33:15 2007
@@ -4,12 +4,12 @@
     <groupId>org.apache.tapestry</groupId>
     <artifactId>tapestry-ioc</artifactId>
     <packaging>jar</packaging>
-    <version>5.0.1</version>
+    <version>5.0.2-SNAPSHOT</version>
     <!-- This should change to tapestry-project -->
     <parent>
         <groupId>org.apache.tapestry</groupId>
         <artifactId>tapestry-project</artifactId>
-        <version>5.0.1</version>
+        <version>5.0.2-SNAPSHOT</version>
         <relativePath>../tapestry-project/pom.xml</relativePath>
     </parent>
     <name>Tapestry Inversion of Control Container</name>

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=503934&r1=503933&r2=503934
==============================================================================
--- 
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
 Mon Feb  5 16:33:15 2007
@@ -26,15 +26,13 @@
 
 /**
  * Used to ensure that [EMAIL PROTECTED] 
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).
+ * 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;
@@ -70,7 +68,7 @@
 
         if (_priorClassPath != null) removeClassPath(_priorClassPath);
 
-        appendClassPath(path);
+        insertClassPath(path);
 
         _priorClassPath = path;
 
@@ -87,14 +85,5 @@
     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=503934&r1=503933&r2=503934
==============================================================================
--- 
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
 Mon Feb  5 16:33:15 2007
@@ -63,7 +63,7 @@
 
         _pool = pool;
 
-        _classSource = new CtClassSource(_pool);
+        _classSource = new CtClassSource(_pool, classLoader);
 
         _log = log;
     }

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=503934&r1=503933&r2=503934
==============================================================================
--- 
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
 Mon Feb  5 16:33:15 2007
@@ -14,6 +14,8 @@
 
 package org.apache.tapestry.ioc.internal.services;
 
+import java.security.ProtectionDomain;
+
 import javassist.CtClass;
 import javassist.NotFoundException;
 
@@ -29,6 +31,10 @@
 {
     private final ClassFactoryClassPool _pool;
 
+    private final ClassLoader _loader;
+
+    private final ProtectionDomain _domain = getClass().getProtectionDomain();
+
     private int _createdClassCount = 0;
 
     /**
@@ -39,9 +45,10 @@
         return _createdClassCount;
     }
 
-    public CtClassSource(ClassFactoryClassPool pool)
+    public CtClassSource(ClassFactoryClassPool pool, ClassLoader loader)
     {
         _pool = pool;
+        _loader = loader;
     }
 
     public CtClass getCtClass(Class searchClass)
@@ -76,12 +83,11 @@
 
     public synchronized Class createClass(CtClass ctClass)
     {
-        if (WRITE_DIR != null)
-            writeClass(ctClass);
+        if (WRITE_DIR != null) writeClass(ctClass);
 
         try
         {
-            Class result = _pool.toClass(ctClass);
+            Class result = _pool.toClass(ctClass, _loader, _domain);
 
             _createdClassCount++;
 

Modified: 
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ClassFabImplTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ClassFabImplTest.java?view=diff&rev=503934&r1=503933&r2=503934
==============================================================================
--- 
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ClassFabImplTest.java
 (original)
+++ 
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ClassFabImplTest.java
 Mon Feb  5 16:33:15 2007
@@ -60,7 +60,7 @@
 
         pool.addClassLoaderIfNeeded(threadLoader);
 
-        _source = new CtClassSource(pool);
+        _source = new CtClassSource(pool, threadLoader);
     }
 
     private ClassFab newClassFab(String className, Class superClass)


Reply via email to