|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import org.aspectj.testing.*;
- import java.io.*;
-
- public class PR355 {
- public static void main(String[] args) {
- new PR355().go();
- }
-
- static {
- String[] types = { "static", "non", "instance" };
- String[] advice = { "before", "after", "around" };
- for (int i = 0; i < types.length; i++) {
- for (int j = 0; j < advice.length; j++) {
- Tester.expectEvent(types[i] + "-" + advice[j]);
- }
- }
- Tester.expectEventsInString("C.f,C.e");
- }
-
- void go() {
- new C().f();
- Tester.checkAllEvents();
- }
- }
-
-
- class C {
- void f() { Tester.event("C.f"); e(); }
- void e() { Tester.event("C.e"); }
- }
-
- abstract aspect Cuts {
- pointcut p(): within(C) && call(* C.*(..));
- static void a(String s) { Tester.event(s); }
- }
-
- /* Static aspects have no problem */
- aspect StaticAspect extends Cuts {
- before(): p() { a("static-before"); }
- void around(): p() { a("static-around"); proceed(); }
- after (): p() { a("static-after"); }
- }
-
- /* Non-static aspects have a problem */
- aspect NonStaticAspect extends Cuts issingleton() {
- before(): p() { a("non-before"); }
- void around(): p() { a("non-around"); proceed(); }
- after (): p() { a("non-after"); }
- }
-
- /* No problem here */
- aspect InstanceOfAspect extends Cuts perthis(this(C)) {
- before(): p() { a("instance-before"); }
- void around(): p() { a("instance-around"); proceed(); }
- after (): p() { a("instance-after"); }
- }
|