1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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);
- }
- }
|