Browse Source

tests for pr11280, update to reflection api to get classloading right for test suite etc.

tags/V1_5_0RC1
acolyer 18 years ago
parent
commit
508dbcbc90

+ 37
- 0
tests/bugs150/Pr112880.aj View File

@@ -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();
}
}

+ 4
- 0
tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java View File

@@ -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
*/

+ 11
- 1
tests/src/org/aspectj/systemtest/ajc150/ajc150.xml View File

@@ -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"/>

+ 4
- 5
weaver/src/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateFactory.java View File

@@ -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");
}
}

Loading…
Cancel
Save