aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/bugs150/Pr112880.aj37
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java4
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/ajc150.xml12
-rw-r--r--weaver/src/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateFactory.java9
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");
}
}