summaryrefslogtreecommitdiffstats
path: root/tests/bugs/AmbiguousBindings.aj
diff options
context:
space:
mode:
authoracolyer <acolyer>2004-12-16 13:08:07 +0000
committeracolyer <acolyer>2004-12-16 13:08:07 +0000
commitd2ef5057552185144c54afa37a7f7de81664ea9c (patch)
treea6c03f61b6b98a1ffb23d855bc89dada210e73c9 /tests/bugs/AmbiguousBindings.aj
parent2f85beef220b0b67fefb587b9045d80fd1356da1 (diff)
downloadaspectj-d2ef5057552185144c54afa37a7f7de81664ea9c.tar.gz
aspectj-d2ef5057552185144c54afa37a7f7de81664ea9c.zip
more ambiguous bindings testing
Diffstat (limited to 'tests/bugs/AmbiguousBindings.aj')
-rw-r--r--tests/bugs/AmbiguousBindings.aj60
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/bugs/AmbiguousBindings.aj b/tests/bugs/AmbiguousBindings.aj
new file mode 100644
index 000000000..ade1f3113
--- /dev/null
+++ b/tests/bugs/AmbiguousBindings.aj
@@ -0,0 +1,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;
+ }
+
+} \ No newline at end of file