@@ -0,0 +1,20 @@ | |||
import java.util.*; | |||
public class TTT { | |||
public void foo() { | |||
System.err.println("Creating Test<Integer> instance"); | |||
Test<Integer> mt = new Test<Integer>(); | |||
System.err.println("Calling toArray"); | |||
Integer[] arr = mt.toArray(new Integer[]{}); | |||
System.err.println("done"); | |||
} | |||
public Integer getFirst() { | |||
System.err.println("Creating Test<Integer> instance"); | |||
Test<Integer> mt = new Test<Integer>(); | |||
System.err.println("Calling getFirst"); | |||
Integer i = mt.getFirst(); | |||
System.err.println("done"); | |||
return i; | |||
} | |||
} |
@@ -0,0 +1,16 @@ | |||
import java.util.*; | |||
public class Test<T extends Number> { | |||
Set<T> set = new HashSet<T>(); | |||
T t = null; | |||
public <T> T[] toArray(T[] a) { | |||
System.err.println("In toArray()"); | |||
return set.toArray(a); | |||
} | |||
public T getFirst() { | |||
return t; | |||
} | |||
} |
@@ -0,0 +1,32 @@ | |||
import java.util.*; | |||
public privileged aspect TestAspect { | |||
pointcut TestToArray(Test mt) : target(mt) && !within(TestAspect); | |||
pointcut getFirstExec(Test mt) : | |||
execution(* getFirst(..)) && target(mt) && !within(TestAspect); | |||
Object[] around(Test mt, Object[] objs) : | |||
TestToArray(mt) && args(objs) && | |||
execution(Object[] Test.toArray(Object[])) { | |||
System.err.println("In around advice"); | |||
objs = proceed(mt, objs); | |||
return objs; | |||
} | |||
Object around(Test mt): getFirstExec(mt) { | |||
System.err.println("around on getFirstExec(): running"); | |||
return proceed(mt); | |||
} | |||
public static void main(String[] argv) { | |||
System.err.println("TestAspect.main: Calling foo"); | |||
new TTT().foo(); | |||
Object o = new TTT().getFirst(); | |||
System.err.println("TestAspect.main: done"); | |||
} | |||
} |
@@ -57,6 +57,7 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase { | |||
public void testMatthewsAspect_pr113947_2() { runTest("maws generic aspect - 2");} | |||
public void testFieldGet_pr114343() { runTest("field-get, generics and around advice");} | |||
public void testFieldGet_pr114343_2() { runTest("field-get, generics and around advice - 2");} | |||
public void testFieldGet_pr114343_3() { runTest("field-get, generics and around advice - 3");} | |||
public void testCaptureBinding_pr114744() { runTest("capturebinding wildcard problem");} | |||
public void testBadDecp_pr110788_1() { runTest("bad generic decp - 1");} |
@@ -44,6 +44,25 @@ | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="bugs150/pr114343/case3" title="field-get, generics and around advice - 3"> | |||
<compile files="Test.java,TTT.java,TestAspect.java" options="-1.5"/> | |||
<run class="TestAspect"> | |||
<stderr> | |||
<line text="TestAspect.main: Calling foo"/> | |||
<line text="Creating Test<Integer> instance"/> | |||
<line text="Calling toArray"/> | |||
<line text="In around advice"/> | |||
<line text="In toArray()"/> | |||
<line text="done"/> | |||
<line text="Creating Test<Integer> instance"/> | |||
<line text="Calling getFirst"/> | |||
<line text="around on getFirstExec(): running"/> | |||
<line text="done"/> | |||
<line text="TestAspect.main: done"/> | |||
</stderr> | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="bugs150/pr113947/case1" title="maws generic aspect - 1"> | |||
<compile files="AbstractListSupport.java,AnotherItem.java,Item.java,LinkedList.java,LinkedListItem.java,ListItem.java,StringList.java" options="-1.5"> | |||
<!-- the 'static ref' messages are a bit poor and ought to be eliminated... --> |