1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
-
- 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("Aspect.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 (Aspect) { // change to !target(String) to avoid bug
- Tester.event("Aspect.before-not");
- }
-
- // before(): call(void doit(I)) && !args(A) {
- // System.out.println("doit !A");
- // }
- }
|