diff options
author | wisberg <wisberg> | 2002-12-16 18:51:06 +0000 |
---|---|---|
committer | wisberg <wisberg> | 2002-12-16 18:51:06 +0000 |
commit | 144143c2970a1e874d74cdbd0f8c622d4282a3c3 (patch) | |
tree | b12383d3d9e76c7e1f25f7fbec83051ef17f81fb /tests/new/TargetObjectReplacement.java | |
parent | fafae443719b26159ab2d7dac1c9b46b5e00b671 (diff) | |
download | aspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.tar.gz aspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.zip |
initial version
Diffstat (limited to 'tests/new/TargetObjectReplacement.java')
-rw-r--r-- | tests/new/TargetObjectReplacement.java | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/new/TargetObjectReplacement.java b/tests/new/TargetObjectReplacement.java new file mode 100644 index 000000000..6c5e26ce9 --- /dev/null +++ b/tests/new/TargetObjectReplacement.java @@ -0,0 +1,64 @@ +import org.aspectj.testing.Tester; + +/** @testcase replacing this or target in around advice */ +public class TargetObjectReplacement { + public static void main(String[] args) { + Foo f = new Foo("orig"); + // replacing target or this in advice does not affect caller reference + f.m(); + f.n(); + f.o(); + f.p(); + Tester.checkEqual(f.idhat, "orig"); // no affect presumed + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("m: m-delegate"); + Tester.expectEvent("n: n-delegate"); + Tester.expectEvent("o: o-delegate"); + Tester.expectEvent("p: orig"); // no affect presumed + } +} + +class Foo { + String id; + String idhat; + + Foo(String id) { + this.id = id; + this.idhat = id; + } + + void m() { + Tester.event("m: " + id); + } + + void n() { + Tester.event("n: " + id); + } + + void o() { + Tester.event("o: " + id); + } + + void p() { + Tester.event("p: " + id); // before around advice on idhat get + Tester.checkEqual(idhat, "p-delegate"); // callees affected + } +} + +aspect A { + + void around(Foo foo): target(foo) && call(void m()) { + proceed(new Foo("m-delegate")); + } + void around(Foo foo): target(foo) && execution(void n()) { + proceed(new Foo("n-delegate")); + } + void around(Foo foo): this(foo) && execution(void o()) { + proceed(new Foo("o-delegate")); + } + String around(Foo foo): target(foo) && get(String Foo.idhat) && within(Foo) { + return proceed(new Foo("p-delegate")); + } +} |