diff options
4 files changed, 56 insertions, 6 deletions
diff --git a/tests/bugs150/Pr112880.aj b/tests/bugs150/Pr112880.aj new file mode 100644 index 000000000..14a3d9d87 --- /dev/null +++ b/tests/bugs150/Pr112880.aj @@ -0,0 +1,37 @@ + +abstract class AbstractAttributeGuiFactory<A,B> { + + public A getThis() { + return null; + } + + public B getThat() { + return null; + } + +} + +class ColorAttributeGuiFactory extends AbstractAttributeGuiFactory<C1,C2> {} + +class C1 {} + +class C2 {} + +aspect ForceParameterization { + + + before() : call(C1 *(..)) || call(C2 *(..)) { + System.out.println("method returning C1 or C2"); + } + +} + +public class Pr112880 { + + public static void main(String[] args) { + ColorAttributeGuiFactory f = new ColorAttributeGuiFactory(); + f.getThis(); + f.getThat(); + } + +}
\ No newline at end of file diff --git a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java index c0ae27441..282e04c8b 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java +++ b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java @@ -747,6 +747,10 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase { runTest("parameterized pointcut and advice"); } + public void testDoublyParameterizedAbstractType() { + runTest("double parameter generic abstract type"); + } + /* * Load-time weaving bugs */ diff --git a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml index 311903ca1..bc6d6d009 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml +++ b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml @@ -37,8 +37,18 @@ <line text="AA.going()"/> </stdout> </run> - </ajc-test>acj + </ajc-test> + <ajc-test dir="bugs150" pr="112880" title="double parameter generic abstract type"> + <compile files="Pr112880.aj" options="-1.5"> + </compile> + <run class="Pr112880"> + <stdout> + <line text="method returning C1 or C2"/> + <line text="method returning C1 or C2"/> + </stdout> + </run> + </ajc-test> <ajc-test dir="bugs150/pr114005" title="Annotated ITDFs - 2"> <compile files="Declaration2.java" options="-1.5"/> diff --git a/weaver/src/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateFactory.java b/weaver/src/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateFactory.java index c48b19cf1..fc19988b5 100644 --- a/weaver/src/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateFactory.java +++ b/weaver/src/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateFactory.java @@ -49,17 +49,16 @@ public class ReflectionBasedReferenceTypeDelegateFactory { private static ReflectionBasedReferenceTypeDelegate create15Delegate(ReferenceType forReferenceType, Class forClass, ClassLoader usingClassLoader, World inWorld) { try { - // important that we use *our own* classloader for the next call... - Class delegateClass = Class.forName("org.aspectj.weaver.reflect.Java15ReflectionBasedReferenceTypeDelegate",false,ReflectionBasedReferenceTypeDelegate.class.getClassLoader()); + Class delegateClass = Class.forName("org.aspectj.weaver.reflect.Java15ReflectionBasedReferenceTypeDelegate",false,usingClassLoader);//ReflectionBasedReferenceTypeDelegate.class.getClassLoader()); ReflectionBasedReferenceTypeDelegate ret = (ReflectionBasedReferenceTypeDelegate) delegateClass.newInstance(); ret.initialize(forReferenceType,forClass,usingClassLoader,inWorld); return ret; } catch (ClassNotFoundException cnfEx) { - return null; + throw new IllegalStateException("Attempted to create Java 1.5 reflection based delegate but org.aspectj.weaver.reflect.Java15ReflectionBasedReferenceTypeDelegate was not found on classpath"); } catch (InstantiationException insEx) { - return null; + throw new IllegalStateException("Attempted to create Java 1.5 reflection based delegate but InstantiationException: " + insEx + " occured"); } catch (IllegalAccessException illAccEx) { - return null; + throw new IllegalStateException("Attempted to create Java 1.5 reflection based delegate but IllegalAccessException: " + illAccEx + " occured"); } } |