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/PR528.java | |
parent | fafae443719b26159ab2d7dac1c9b46b5e00b671 (diff) | |
download | aspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.tar.gz aspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.zip |
initial version
Diffstat (limited to 'tests/new/PR528.java')
-rw-r--r-- | tests/new/PR528.java | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/new/PR528.java b/tests/new/PR528.java new file mode 100644 index 000000000..1f299e483 --- /dev/null +++ b/tests/new/PR528.java @@ -0,0 +1,71 @@ +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +/** + * @testcase PR#528 10rc1 error in return type (verify error if -usejavac, compile error (missing return value) otherwise) + * @testcase PR#528 10a1 unimplemented method if around advice/cflow on methods introduced by interface + * + * The !cflow(within(B)) winds up being the best test case so far for + * the ExceptionInInitializer bug with null fields for cflow state + * + */ +public class PR528 { + public static void main(String[] args) { + C c = new C(); + c.trigger(); // toggled to true, do callback + c.trigger(); // toggled to false, do trigger + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("test"); + Tester.expectEvent("test"); // called for each trigger + Tester.expectEvent("callback"); + Tester.expectEvent("trigger"); + Tester.expectEvent("around 0"); + Tester.expectEvent("around 1"); + } +} +class C { +} + +abstract aspect A { + static boolean toggle; + static int originalIndex; + static int callbackIndex; + static int aroundIndex; + interface I { + } + + public boolean I.test() { + Tester.event("test"); + return (toggle = !toggle); + } + + public void I.trigger() { + Tester.event("trigger"); + Tester.check(0==originalIndex, "trigger called again: "); + originalIndex++; + } + + public void I.callback() { + Tester.event("callback"); + Tester.check(0==callbackIndex, "callback called again: "); + callbackIndex++; + } + + declare parents: C implements I; +} + +aspect B extends A { + void around(I i) + : target(i) + && execution(public void I.trigger()) + && !cflow(within(B)) { + Tester.event("around " + aroundIndex++); + if(i.test()) { + i.callback(); + } else { + proceed(i); + } + } +} |