1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import org.aspectj.testing.Tester;
-
- public class MultiDispatchCp {
- 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.checkEventsFromFile("MultiDispatchCp.out");
- //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();
- }
- }
-
- abstract aspect Multi {
- abstract pointcut m();
-
- abstract String getPrefix();
-
- String around(String s): m() && args(s) {
- return getPrefix() + "-string-" + s;
- }
- String around(Integer i): m() && args(i) {
- //System.out.println(thisJoinPoint + " would return " + proceed(i));
- return getPrefix() + "-integer-" + i;
- }
- String around(Double d): m() && args(d) {
- return getPrefix() + "-double-" + d;
- }
- }
-
- aspect MultiCall extends Multi {
- public static boolean enabled = false;
-
- String getPrefix() { return "call"; }
-
- pointcut m(): call(String C.doit(Object)) && if(enabled);
- }
-
-
- // dominates should have no effect as call join points
- // always come before executions
- aspect MultiExec extends Multi { declare dominates: MultiExec, MultiCall;
- public static boolean enabled = false;
-
- String getPrefix() { return "exec"; }
-
- pointcut m(): execution(String C.doit(Object)) && if(enabled);
- }
|