aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/bugs150/pr116626/TestAspect.aj19
-rw-r--r--tests/bugs150/pr116626/aop.xml9
-rw-r--r--tests/bugs150/pr116626/com/foo/bar/Test.java28
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java5
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/ajc150.xml7
-rw-r--r--weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java10
6 files changed, 74 insertions, 4 deletions
diff --git a/tests/bugs150/pr116626/TestAspect.aj b/tests/bugs150/pr116626/TestAspect.aj
new file mode 100644
index 000000000..105a53eb9
--- /dev/null
+++ b/tests/bugs150/pr116626/TestAspect.aj
@@ -0,0 +1,19 @@
+package com.foo.bar;
+
+public privileged aspect TestAspect {
+
+ pointcut TestToArray(Test mt) :
+ target(mt) &&
+ !within(TestAspect);
+
+
+ Object[] around(Test mt, Object[] objs) :
+ TestToArray(mt) &&
+ args(objs) &&
+ execution(Object[] Test.getObjs(Object[])) {
+
+ objs = proceed(mt, objs);
+ System.out.println("GO Aspects!");
+ return objs;
+ }
+}
diff --git a/tests/bugs150/pr116626/aop.xml b/tests/bugs150/pr116626/aop.xml
new file mode 100644
index 000000000..93ca6dd43
--- /dev/null
+++ b/tests/bugs150/pr116626/aop.xml
@@ -0,0 +1,9 @@
+<aspectj>
+ <aspects>
+ <aspect name="com.foo.bar.TestAspect"/>
+ </aspects>
+
+ <weaver options="-verbose -XlazyTjp -showWeaveInfo">
+ <include within="com.foo.*"/>
+ </weaver>
+</aspectj>
diff --git a/tests/bugs150/pr116626/com/foo/bar/Test.java b/tests/bugs150/pr116626/com/foo/bar/Test.java
new file mode 100644
index 000000000..5b255baee
--- /dev/null
+++ b/tests/bugs150/pr116626/com/foo/bar/Test.java
@@ -0,0 +1,28 @@
+package com.foo.bar;
+
+import java.util.*;
+
+public class Test<T> {
+
+ Set<T> intsSet;
+
+ public Test() {
+ this.intsSet = new HashSet<T>();
+ }
+
+ public <T> T[] getObjs(T[] a) {
+ return intsSet.toArray(a);
+ }
+
+ public static void main(String[] args) {
+ System.out.println("AAA :-)");
+ new TTT().foo();
+ }
+}
+
+class TTT {
+ public void foo() {
+ Test<Object> mt = new Test<Object>();
+ Object[] arr = mt.getObjs(new Object[]{});
+ }
+}
diff --git a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
index eab3ffac6..08209ca26 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
@@ -712,6 +712,11 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
public void testNoStackOverflowWithCircularPCDInGenericAspect2() {
runTest("no StackOverflowError with circular pcd in generic aspect - 2");
}
+
+ /*
+ * Load-time weaving bugs
+ */
+ public void testNPEinWeavingAdaptor_pr116626() { runTest("NPE in WeavingAdaptor");}
// helper methods.....
diff --git a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
index a2075580f..de7cf19d2 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
+++ b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
@@ -5559,5 +5559,12 @@
<ajc-test dir="java5/generics/itds/design" title="generic itds - design G">
<compile files="DesignG.java" options="-1.5"/>
</ajc-test>
+
+ <ajc-test dir="bugs150/pr116626" title="NPE in WeavingAdaptor">
+ <compile files="com/foo/bar/Test.java, TestAspect.aj" options="-1.5"/>
+ <run class="com.foo.bar.Test" ltw="aop.xml"
+ >
+ </run>
+ </ajc-test>
</suite> \ No newline at end of file
diff --git a/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java b/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java
index ea7590273..6d11ff307 100644
--- a/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java
+++ b/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java
@@ -387,14 +387,15 @@ public class WeavingAdaptor {
private class WeavingClassFileProvider implements IClassFileProvider {
+ private UnwovenClassFile unwovenClass;
private List unwovenClasses = new ArrayList(); /* List<UnovenClassFile> */
private UnwovenClassFile wovenClass;
private boolean isApplyAtAspectJMungersOnly = false;
public WeavingClassFileProvider (String name, byte[] bytes) {
- UnwovenClassFile unwoven = new UnwovenClassFile(name,bytes);
- unwovenClasses.add(unwoven);
- bcelWorld.addSourceObjectType(unwoven.getJavaClass());
+ this.unwovenClass = new UnwovenClassFile(name,bytes);
+ this.unwovenClasses.add(unwovenClass);
+ bcelWorld.addSourceObjectType(unwovenClass.getJavaClass());
}
public void setApplyAtAspectJMungersOnly() {
@@ -406,7 +407,8 @@ public class WeavingAdaptor {
}
public byte[] getBytes () {
- return wovenClass.getBytes();
+ if (wovenClass != null) return wovenClass.getBytes();
+ else return unwovenClass.getBytes();
}
public Iterator getClassFileIterator() {