[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