aboutsummaryrefslogtreecommitdiffstats
path: root/tests/bugs/AmbiguousBindings.aj
blob: ade1f3113a3653d44b4acfbac5cc7b0dc2f1be37 (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
// pushes the limits of what ajc will accept as an unambiguous binding...

aspect AmbiguousBindings {
	
	pointcut p1(Foo foo) : (call(* *(..)) && this(foo)) || (execution(* *(..)) && args(foo)); 
	
	pointcut p2(Foo foo) : (call(* m(..)) && this(foo)) || (call(* n(..)) && args(foo));
	
	pointcut p3(Foo foo) : (execution(* *(int,int)) && this(foo)) || (execution(* *(int)) && this(foo));
	
	pointcut p4(Foo foo) : (get(int a) && this(foo)) || (get(int b) && target(foo));
	
	pointcut p5(int x) : (set(int a) && args(x)) || (set(int b) && args(x));
	
	pointcut p6(Foo foo) : (within(Foo) && this(foo)) || (within(AmbiguousBindings) && args(foo));

	pointcut q1(Foo foo) : (call(* m(..)) && this(foo)) || (call(* m*(..)) && args(foo));
	
	pointcut q2(Foo foo) : (execution(* *(int,int)) && this(foo)) || (execution(* *(int,*)) && args(foo));
	
	pointcut q3(Foo foo) : (get(int a) && this(foo)) || (get(int a) && target(foo));
	
	pointcut q4(int x) : (set(int a) && args(x)) || (set(* *) && this(x));
	
	pointcut q5(Foo foo) : (within(Foo) && this(foo)) || (within(F*) && args(foo));

	// these should be good
	before(Foo foo) : p1(foo) {}
	before(Foo foo) : p2(foo) {}
	before(Foo foo) : p3(foo) {}
	before(Foo foo) : p4(foo) {}
	before(int z) : p5(z) {}
	before(Foo foo) : p6(foo) {}
	
	// these are all ambiguous
	before(Foo foo) : q1(foo) {}
	before(Foo foo) : q2(foo) {}
	before(Foo foo) : q3(foo) {}
	before(int x) : q4(x) {}
	before(Foo foo) : q5(foo) {}
	
}


class Foo {
	
	int a;
	int b;
	
	public void m(int x, int y) {
		a = y;
		n(x);
	}
	
	public void n(int x) {
		b = x;
		a = a * 2;
	}
	
}