12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import java.util.*;
- import org.aspectj.lang.*;
- import org.aspectj.lang.reflect.*;
- import org.aspectj.testing.*;
-
- public class Binkley2 {
- public static void main(String[] args) {
- // catch the static init early
- C c = new C();
-
- Art.enable = true;
- Ar.enable = false;
- new C().foo();
-
- Art.enable = false;
- Ar.enable = true;
- new C().foo();
- Post.checkAll();
- }
- }
-
- class C {
- public int x = 0;
- public void foo()
- {
- x = 1;
- x = 2;
- }
-
- }
-
- class Post {
- static List haves = new Vector();
- static String[] wants = new String[] {
- "preinitialization(C())-Ar-0",
- "initialization(C())-Ar-0",
- "execution(C())-Ar-0",
- "set(C.x)-Ar-0",
- "execution(C.foo())-Ar-0",
- "set(C.x)-Ar-0",
- "set(C.x)-Ar-0",
-
- "preinitialization(C())-Art-0",
- "initialization(C())-Art-0",
- "execution(C())-Art-1",
- "set(C.x)-Art-2",
- "execution(C.foo())-Art-0",
- "set(C.x)-Art-1",
- "set(C.x)-Art-2",
- };
-
- static void post(JoinPoint jp, String name, int num) {
- //System.out.println("have: " + jp.toShortString() + "-" + name + "-" + num);
- haves.add(jp.toShortString() + "-" + name + "-" + num);
- }
- static void checkAll() {
- Tester.checkEqual(haves, wants, "haves != wants");
- }
- }
-
- aspect Ar percflow(pc()){
- pointcut pc() : within(C) ;
- int count = 0;
- static boolean enable = false;
- before(): pc() {
- if ( enable ) {
- Post.post(thisJoinPoint, "Ar", count++);
- }
- }
- }
-
- /*
- * I'm trying to simulate eachcflowrootop.
- */
- aspect Art percflow(Art.pc() && !cflowbelow(Art.pc()))
- {
- pointcut pc() : within(C) ;
- //pointcut pctop(): pc() && !cflow(pc()); (see above)
- int count = 0;
- static boolean enable = false;
-
- before(): pc() {
- if ( enable ) {
- Post.post(thisJoinPoint, "Art", count++);
- }
- }
- }
|