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.

AspectInheritance.java 1.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import org.aspectj.testing.Tester;
  2. import java.util.*;
  3. public class AspectInheritance {
  4. public static void main(String[] args) {
  5. new C().m(2);
  6. Tester.checkEqual(Base.aspectNames, "FullConcrete ConcreteFlow", "names");
  7. }
  8. }
  9. abstract aspect Base {
  10. public static Set aspectNames = new HashSet();
  11. abstract pointcut targets(int i, C c);
  12. after(int i, C c): targets(i, c) {
  13. Base.aspectNames.add(this.getClass().getName());
  14. }
  15. }
  16. aspect EmptyConcrete extends Base {
  17. pointcut targets(int i, C c);
  18. }
  19. aspect FullConcrete extends Base {
  20. pointcut targets(int i, C c): target(c) && call(void C.m(int)) && args(i);
  21. }
  22. abstract aspect Flow percflow(entries()) {
  23. abstract pointcut entries();
  24. {
  25. Base.aspectNames.add(this.getClass().getName());
  26. }
  27. }
  28. abstract aspect MainFlow extends Flow {
  29. pointcut entries(): execution(void C.m(..));
  30. }
  31. aspect ConcreteFlow extends MainFlow { }
  32. abstract aspect AbstractWorld {
  33. before(): execution(void C.m(..)) {
  34. System.out.println("before C.m");
  35. }
  36. }
  37. class C {
  38. public void m(int i) { }
  39. }