From 144143c2970a1e874d74cdbd0f8c622d4282a3c3 Mon Sep 17 00:00:00 2001 From: wisberg Date: Mon, 16 Dec 2002 18:51:06 +0000 Subject: initial version --- tests/new/TargetObjectReplacement.java | 64 ++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 tests/new/TargetObjectReplacement.java (limited to 'tests/new/TargetObjectReplacement.java') 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")); + } +} -- cgit v1.2.3