You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PR353b.java 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import org.aspectj.lang.*;
  2. import org.aspectj.lang.reflect.*;
  3. import org.aspectj.testing.*;
  4. import java.util.*;
  5. public class PR353b {
  6. public static void main(String[] args){
  7. new PR353b().go();
  8. }
  9. void go(){
  10. s.c = "E"; C c = new E(); c.foo();
  11. s.c = "C"; c = new C(); c.foo();
  12. s.c = "E"; E e = new E(); e.foo();
  13. s.c = "E2"; E2 e2 = new E2(); e2.foo();
  14. s.c = "F"; F f = new F(); f.foo();
  15. }
  16. static {
  17. Tester.expectEvent("call C");
  18. Tester.expectEvent("call E2");
  19. }
  20. }
  21. class C { void foo() {} }
  22. class E extends C {}
  23. class F extends E {}
  24. class E2 extends C { void foo() {} }
  25. class s { public static String c; }
  26. aspect A {
  27. pointcut p3(): this(C) && call(* foo()) && !target(E);
  28. before(): p3() {
  29. Object target = thisJoinPoint.getTarget();
  30. JoinPoint.StaticPart sp = thisJoinPoint.getStaticPart();
  31. Signature sig = sp.getSignature();
  32. Class dt = sig.getDeclaringType();
  33. Tester.check(!(target instanceof E),
  34. target.getClass().getName() + " instanceof E");
  35. Tester.event("call " + target.getClass().getName());
  36. Tester.check(dt == PR353b.class,
  37. "dt != instanceof PR353b");
  38. Tester.check(!(target instanceof E),
  39. "!instanceof E");
  40. String c = thisJoinPoint.getSignature().getDeclaringType().getName();
  41. Tester.check(s.c.equals(c), "p3: " + s.c + " != " + c);
  42. }
  43. }