12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- 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)
- */
|