blob: b500ed4a72bc522bde8005aac992fa290fbcb355 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
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 dominates MultiCall {
public static boolean enabled = false;
String getPrefix() { return "exec"; }
pointcut m(): execution(String C.doit(Object)) && if(enabled);
}
|