diff options
Diffstat (limited to 'tests/new/CallNotTarget.java')
-rw-r--r-- | tests/new/CallNotTarget.java | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/new/CallNotTarget.java b/tests/new/CallNotTarget.java new file mode 100644 index 000000000..c710e2b60 --- /dev/null +++ b/tests/new/CallNotTarget.java @@ -0,0 +1,53 @@ + +import org.aspectj.testing.*; + +/** @testcase PR#661 !target with second advice on casted call */ +public class CallNotTarget { + public static void main (String args []) { + //new B().go(); // remove cast to avoid bug + ((I) new B()).go(); + Tester.checkAllEvents(); + + doit(new B()); + doit(new A()); + } + static { + Tester.expectEvent("A.before"); + Tester.expectEvent("A.before-not"); + Tester.expectEvent("A*.before-not"); + Tester.expectEvent("go"); + } + + static void doit(I i) { + Tester.check(i != null, "null i"); + //System.out.println(i); + } +} + +interface I { public void go (); } + +class A implements I { + public void go () { Tester.check(false, "A"); } +} +class B implements I { + public void go () { Tester.event("go"); } +} + +aspect Aspect { + + pointcut pc() : call(void I.go()); // same result if pointcut not named + + before () : pc() { // remove this advice to avoid bug + Tester.event("A.before"); + } + before () : pc() && !target (A) { // change to !target(String) to avoid bug + Tester.event("A.before-not"); + } + before () : pc() && !target (A*) { // change to !target(String) to avoid bug + Tester.event("A*.before-not"); + } + +// before(): call(void doit(I)) && !args(A) { +// System.out.println("doit !A"); +// } +} |