summaryrefslogtreecommitdiffstats
path: root/tests/new/MultiDispatchCp.java
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);
}