mirror of
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-08-14 02:10:40 +02:00
54 lines
1.4 KiB
Java
54 lines
1.4 KiB
Java
|
|
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");
|
|
// }
|
|
}
|