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.

OverridingPointcuts.java 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import org.aspectj.testing.Tester;
  2. public class OverridingPointcuts {
  3. public static void main(String[] args) {
  4. C c1 = new C();
  5. C c2 = new C();
  6. c1.m1();
  7. c2.m2();
  8. Tester.checkEqual(c1.m1(), "A1-m1");
  9. Tester.checkEqual(c2.m2(), "m2");
  10. Tester.checkEqual(c1.m3(), "A1-m3");
  11. Tester.checkEqual(c2.m3(), "m3");
  12. Tester.check(!A2.hasAspect(c1), "c1 hasa A2");
  13. Tester.check(A1.hasAspect(c1), "c1 hasa A1");
  14. Tester.check(A2.hasAspect(c2), "c2 hasa A2");
  15. Tester.check(!A1.hasAspect(c2), "!c2 hasa A1");
  16. }
  17. }
  18. class C {
  19. public String m1() { return "m1"; }
  20. public String m2() { return "m2"; }
  21. public String m3() { return "m3"; }
  22. }
  23. abstract aspect A pertarget(target(C) && call(String m2())) {
  24. int cached;
  25. abstract pointcut testpoint();
  26. String modifyResult(String r) { return "A-" + r; }
  27. String around (): testpoint() {
  28. return modifyResult(proceed());
  29. }
  30. }
  31. aspect A1 extends A pertarget(target(C) && call(String m1())) {
  32. pointcut testpoint() : call(String C.*(..));
  33. String modifyResult(String s) { return "A1-" + s; }
  34. }
  35. aspect A2 extends A {
  36. pointcut testpoint();
  37. }
  38. /*
  39. public aspect A2 extends A of eachobject(instanceof(C) && receptions(String m2())) {
  40. pointcut testpoint() returns String: receptions(String *(..));
  41. String modifyResult(String s) { return "A2-" + s; }
  42. }
  43. */