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/PR560.java | |
parent | fafae443719b26159ab2d7dac1c9b46b5e00b671 (diff) | |
download | aspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.tar.gz aspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.zip |
initial version
Diffstat (limited to 'tests/new/PR560.java')
-rw-r--r-- | tests/new/PR560.java | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/new/PR560.java b/tests/new/PR560.java new file mode 100644 index 000000000..19df8057d --- /dev/null +++ b/tests/new/PR560.java @@ -0,0 +1,64 @@ +import org.aspectj.testing.Tester; + +/** + * @testcase PR#560 compile fails for aspect derived from percflow base aspect unless pointcut excludes base aspect and subaspects + * - works with issingleton perthis and pertarget + * - works when advice is in the same class/aspect + */ +public class PR560 { // XXX broken? + public static void main( String args[] ) { + Tester.expectEvent("Target.run()"); + Tester.expectEvent("same aspect"); + Tester.expectEvent("derived aspect"); + new Target().run(); + Tester.checkAllEventsIgnoreDups(); + } +} + +class Target { + public void run(){ + Tester.event("Target.run()"); + } +} +abstract aspect Base percflow(callcflow()) { + pointcut callcflow() + : cflow(call(public void Target.run())) + && !within(Base+) + ; + before() : within(Target) { + Tester.event("same aspect"); + } +} + +aspect Derived extends Base { + before() : within(Target) { + Tester.event("derived aspect"); + } +} + +/* + -- passing variants + - + : cflow(call(public void Target.run())) + && !within(Base+) + + -- failing variants + - + : cflow(call(public void Target.run()) && !within(Derived)) + (cflowbelow selects Derived.*) + - + : cflow(call(public void Target.run())) + && !cflow(within(Derived)) + (cflowbelow selects Base.*) + - + : cflow(call(public void Target.run()) && !within(Base+)) + (cflowbelow selects Base.*) + - + : cflow(call(public void Target.run())) + && !this(Base+) + (some join points in Base/Derived do not have Base/Derived as this) + - + : cflow(call(public void Target.run())) + && !target(Base+) + (some join points in Base/Derived do not have Base/Derived as target) +*/ |