mirror of
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-09-13 15:45:38 +02:00
75 lines
1.8 KiB
Java
75 lines
1.8 KiB
Java
import org.aspectj.testing.Tester;
|
|
|
|
public class MultiDispatchCf {
|
|
public static void main(String[] args) {
|
|
C c = new C();
|
|
|
|
Tester.event("**** exec ****");
|
|
//MultiExec.enabled = true;
|
|
run(new C());
|
|
|
|
Tester.event("**** call ****");
|
|
//MultiExec.enabled = false;
|
|
//MultiCall.enabled = true;
|
|
run(new C());
|
|
|
|
Tester.event("**** both=call ****");
|
|
//MultiExec.enabled = true;
|
|
run(new C());
|
|
|
|
Tester.printEvents();
|
|
}
|
|
|
|
static void run(C c) {
|
|
Tester.event(c.doit("s1"));
|
|
Tester.event(c.doit(new Integer(10)));
|
|
Tester.event(c.doit(new Double(1.25)));
|
|
|
|
Object o;
|
|
o = "s2"; Tester.event(c.doit(o));
|
|
o = new Integer(20); Tester.event(c.doit(o));
|
|
o = new Double(2.25); Tester.event(c.doit(o));
|
|
}
|
|
}
|
|
|
|
|
|
class C {
|
|
String doit(Object o) {
|
|
return "did-" + o.toString();
|
|
}
|
|
}
|
|
|
|
aspect MultiCall {
|
|
pointcut t1(String s): call(String C.doit(Object)) && args(s);
|
|
|
|
String around(String s): t1(s) { return proceed(s); }
|
|
String around(Object o): t1(o) { return proceed(o); }
|
|
|
|
|
|
|
|
pointcut m(Object o): call(String C.doit(Object)) && args(o);
|
|
|
|
String getPrefix() { return "call"; }
|
|
|
|
String around(String s): m(s) { //ERR
|
|
return getPrefix() + "-string-" + s;
|
|
}
|
|
String around(Integer i): m(i) { //ERR
|
|
return getPrefix() + "-integer-" + i;
|
|
}
|
|
String around(Double d): m(d) { //ERR
|
|
return getPrefix() + "-double-" + d;
|
|
}
|
|
}
|
|
|
|
aspect MultiCreate {
|
|
pointcut make(Object o): this(o) && execution(new(..));
|
|
|
|
private interface I {}
|
|
declare parents: C implements I;
|
|
|
|
before(I i): make(i) { //ERR: doesn't match Object
|
|
System.out.println("new I: " + i);
|
|
}
|
|
}
|