mirror of
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-09-13 15:45:38 +02:00
65 lines
1.7 KiB
Java
65 lines
1.7 KiB
Java
|
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)
|
||
|
*/
|