diff options
-rw-r--r-- | tests/bugs150/pr116626/TestAspect.aj | 19 | ||||
-rw-r--r-- | tests/bugs150/pr116626/aop.xml | 9 | ||||
-rw-r--r-- | tests/bugs150/pr116626/com/foo/bar/Test.java | 28 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java | 5 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc150/ajc150.xml | 7 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java | 10 |
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() { |