[jboss-cvs] JBossAS SVN: r83159 - in projects/aop/trunk: aop/src/main/java/org/jboss/aop/util and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jan 21 11:38:03 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-01-21 11:38:03 -0500 (Wed, 21 Jan 2009)
New Revision: 83159

Modified:
   projects/aop/trunk/aop/build-tests-jdk50.xml
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/util/ClassLoaderUtils.java
   projects/aop/trunk/asintegration-core/src/test/java/org/jboss/test/aop/classpool/test/DelegatingClassPoolTestSuite.java
   projects/aop/trunk/asintegration-core/src/test/java/org/jboss/test/aop/classpool/test/SimpleDelegatingClassPoolTestCase.java
   projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java
   projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClParentDelegationStrategy.java
   projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java
Log:
[JBAOP-666] Enable looking up arrays from pools, e.g. ClassPool.get("java.lang.String[]")

Modified: projects/aop/trunk/aop/build-tests-jdk50.xml
===================================================================
--- projects/aop/trunk/aop/build-tests-jdk50.xml	2009-01-21 16:01:16 UTC (rev 83158)
+++ projects/aop/trunk/aop/build-tests-jdk50.xml	2009-01-21 16:38:03 UTC (rev 83159)
@@ -837,11 +837,11 @@
                <include name="org/jboss/test/aop/annotationc/AnnotationTester.class"/>
                <include name="org/jboss/test/aop/bridgemethodnotwoven/BridgeMethodTestCase.class"/>
                <include name="org/jboss/test/aop/pointcut/PointcutTestCase.class"/>
-               <include name="org/jboss/test/aop/unit/assignability/*Test.class"/>
+               <include name="org/jboss/test/aop/unit/**/*Test.class"/>
+               <include name="org/jboss/test/aop/ejb3dependencies/EJB3CompatibilityTestCase.class"/>
+               <include name="org/jboss/test/aop/schema/SchemaTestCase.class"/>
                <exclude name="org/jboss/test/aop/unit/assignability/ParameterizedTypeTest.class"/>
                <exclude name="org/jboss/test/aop/unit/assignability/VariableTargetAlgorithmTest.class"/>
-               <include name="org/jboss/test/aop/ejb3dependencies/EJB3CompatibilityTestCase.class"/>
-               <include name="org/jboss/test/aop/schema/SchemaTestCase.class"/>
             </fileset>
          </batchtest>
       </junit>

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/util/ClassLoaderUtils.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/util/ClassLoaderUtils.java	2009-01-21 16:01:16 UTC (rev 83158)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/util/ClassLoaderUtils.java	2009-01-21 16:38:03 UTC (rev 83159)
@@ -30,11 +30,7 @@
 {
    public static String getResourceName(String classname)
    {
-      String name = classname;
-      if (name.endsWith("[]"))
-      {
-         name = classname.substring(0, name.indexOf("[]"));
-      }
+      final String name = stripArrayFromClassName(classname);
       final int lastIndex = name.lastIndexOf('$');
       if (lastIndex < 0)
       {
@@ -48,7 +44,7 @@
 
    public static String getPackageName(String classname)
    {
-      int last = classname.lastIndexOf('.');
+      final int last = classname.lastIndexOf('.');
       if (last < 0)
       {
          return "";
@@ -58,4 +54,13 @@
          return classname.substring(0, last);
       }
    }
+   
+   public static String stripArrayFromClassName(String classname)
+   {
+      if (classname.endsWith("[]"))
+      {
+         return classname.substring(0, classname.indexOf("[]"));
+      }
+      return classname;
+   }
 }

Modified: projects/aop/trunk/asintegration-core/src/test/java/org/jboss/test/aop/classpool/test/DelegatingClassPoolTestSuite.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/test/java/org/jboss/test/aop/classpool/test/DelegatingClassPoolTestSuite.java	2009-01-21 16:01:16 UTC (rev 83158)
+++ projects/aop/trunk/asintegration-core/src/test/java/org/jboss/test/aop/classpool/test/DelegatingClassPoolTestSuite.java	2009-01-21 16:38:03 UTC (rev 83159)
@@ -21,6 +21,8 @@
 */ 
 package org.jboss.test.aop.classpool.test;
 
+import org.jboss.test.aop.unit.classpool.util.ClassLoaderUtilsTestCase;
+
 import junit.framework.Test;
 import junit.framework.TestSuite;
 import junit.textui.TestRunner;
@@ -41,6 +43,7 @@
    {
       TestSuite suite = new TestSuite("DelegatingClassPool All Tests");
       
+      suite.addTest(ClassLoaderUtilsTestCase.suite());
       suite.addTest(IsLocalResourcePluginFactoryTestCase.suite());
       suite.addTest(SimpleDelegatingClassPoolTestCase.suite());
       suite.addTest(ScopedSiblingDelegatingClassPoolTestCase.suite());

Modified: projects/aop/trunk/asintegration-core/src/test/java/org/jboss/test/aop/classpool/test/SimpleDelegatingClassPoolTestCase.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/test/java/org/jboss/test/aop/classpool/test/SimpleDelegatingClassPoolTestCase.java	2009-01-21 16:01:16 UTC (rev 83158)
+++ projects/aop/trunk/asintegration-core/src/test/java/org/jboss/test/aop/classpool/test/SimpleDelegatingClassPoolTestCase.java	2009-01-21 16:38:03 UTC (rev 83159)
@@ -111,4 +111,32 @@
       assertEquals(poolB, b.getClassPool());
    }
    
+   public void testCanLoadArrrayCtClass() throws Exception
+   {
+      ClassPoolDomain domain = createClassPoolDomain("SIMPLE", null, false);
+      ClassPool poolA = createDelegatingClassPool(domain, JAR_A);
+      ClassPool poolB = createDelegatingClassPool(domain, JAR_B);
+      accessCanLoadCtArray(poolA, poolB);
+      accessCanLoadCtArray(poolA, poolB);
+   }
+   
+   private void accessCanLoadCtArray(ClassPool poolA, ClassPool poolB) throws Exception
+   {
+      CtClass x = poolA.get(String.class.getName() + "[][]");
+      CtClass a = poolA.get(CLASS_A);
+      CtClass aArray = poolA.get(CLASS_A + "[]");
+      CtClass bArray = poolA.get(CLASS_B + "[][]");
+      CtClass b = poolA.get(CLASS_B);
+      
+      assertTrue(aArray.isArray());
+      assertSame(a, aArray.getComponentType());
+      assertTrue(bArray.isArray());
+      assertTrue(bArray.getComponentType().isArray());
+      assertSame(b, bArray.getComponentType().getComponentType());
+      assertNotSame(aArray.getClassPool(), bArray.getClassPool());
+      assertSame(poolA, aArray.getClassPool());
+      assertSame(poolB, bArray.getClassPool());
+      assertSame(a.getClassPool(), aArray.getClassPool());
+      assertSame(b.getClassPool(), bArray.getClassPool());
+   }
 }

Modified: projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java	2009-01-21 16:01:16 UTC (rev 83158)
+++ projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java	2009-01-21 16:38:03 UTC (rev 83159)
@@ -200,7 +200,7 @@
       try
       {
          Method m = Module.class.getMethod("getModuleForClass", String.class);
-         found = (Module)m.invoke(module, classname);
+         found = (Module)m.invoke(module, ClassLoaderUtils.stripArrayFromClassName(classname));
          if (trace) logger.trace(this + " module for " + classname + " " + found);
       }
       catch (Exception e1)
@@ -230,7 +230,7 @@
    private CtClass getCtClassFromDelegates(Module module, String classname, boolean trace)
    {
       List<? extends DelegateLoader> delegates = module.getDelegates();
-      if (delegates != null)
+      if (delegates != null && delegates.size() > 0)
       {
          for (DelegateLoader delegate : delegates)
          {
@@ -283,4 +283,5 @@
          return null;
       }
    }
+   
 }

Modified: projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClParentDelegationStrategy.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClParentDelegationStrategy.java	2009-01-21 16:01:16 UTC (rev 83158)
+++ projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClParentDelegationStrategy.java	2009-01-21 16:38:03 UTC (rev 83159)
@@ -24,6 +24,7 @@
 import org.jboss.aop.classpool.AbstractParentDelegationStrategy;
 import org.jboss.aop.classpool.ClassPoolDomain;
 import org.jboss.aop.classpool.ClassPoolToClassPoolDomainAdaptorFactory;
+import org.jboss.aop.util.ClassLoaderUtils;
 import org.jboss.classloader.spi.ParentPolicy;
 import org.jboss.classloader.spi.filter.ClassFilter;
 
@@ -49,7 +50,7 @@
    public boolean isParentAfter(String classname)
    {
       ClassFilter filter = parentPolicy.getAfterFilter();
-      boolean isParentAfter = filter.matchesClassName(classname);
+      boolean isParentAfter = filter.matchesClassName(ClassLoaderUtils.stripArrayFromClassName(classname));
       if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentAfter " + isParentAfter);      
       return isParentAfter;
    }
@@ -57,7 +58,7 @@
    public boolean isParentBefore(String classname)
    {
       ClassFilter filter = parentPolicy.getBeforeFilter();
-      boolean isParentBefore = filter.matchesClassName(classname);
+      boolean isParentBefore = filter.matchesClassName(ClassLoaderUtils.stripArrayFromClassName(classname));
       if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentBefore " + isParentBefore);
       return isParentBefore;
    }

Modified: projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java	2009-01-21 16:01:16 UTC (rev 83158)
+++ projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java	2009-01-21 16:38:03 UTC (rev 83159)
@@ -200,6 +200,10 @@
       super.tearDown();
    }
 
+   protected String array(String name)
+   {
+      return name + "[]";
+   }
 
    protected ClassLoader createClassLoader(String name, boolean importAll, URL... urls) throws Exception
    {
@@ -796,8 +800,48 @@
       {
          assertSame(expected, clazz.getClassPool());
       }
+      
+      //Load twice to test both create and cache
+      clazz = initiating.get(name);
+      if (expected != null)
+      {
+         assertSame(expected, clazz.getClassPool());
+      }
+      
+      assertLoadCtClassArray(name, clazz, initiating, expected);
+      
       return clazz;
    }
+   
+   private void assertLoadCtClassArray(String name, CtClass clazz, ClassPool initiating, ClassPool expected) throws Exception
+   {
+      assertLoadCtClassArray(name, clazz, 1, initiating, expected);
+      assertLoadCtClassArray(name, clazz, 2, initiating, expected);
+   }
+   
+   private void assertLoadCtClassArray(String name, CtClass clazz, int dimensions, ClassPool initiating, ClassPool expected) throws Exception
+   {
+      String arrayName = name;
+      for (int i = 0 ; i < dimensions ; i++)
+      {
+         arrayName = array(arrayName);
+      }
+      CtClass array = initiating.get(arrayName);
+      
+      if (expected != null)
+      {
+         assertSame(expected, array.getClassPool());
+      }
+      
+      assertSame(clazz.getClassPool(), array.getClassPool());
+      
+      CtClass type = array;
+      for (int i = 0 ; i < dimensions ; i++)
+      {
+         type = type.getComponentType();
+      }
+      assertSame(type, clazz);
+   }
 
    protected Module assertModule(String contextName)
    {




More information about the jboss-cvs-commits mailing list