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.

MultiAndAround.java 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import org.aspectj.testing.Tester;
  2. public class MultiAndAround {
  3. public static void main(String[] args) {
  4. exercise(new Base());
  5. exercise(new Derived());
  6. exercise(new SubBase());
  7. Tester.checkEventsFromFile("MultiAndAround.out");
  8. }
  9. static void exercise(IBase b) {
  10. Tester.event("**************************************");
  11. b.base1("1");
  12. b.base2("2");
  13. b.base3("3");
  14. }
  15. }
  16. interface IBase {
  17. void base1(String s);
  18. void base2(String s);
  19. void base3(String s);
  20. }
  21. interface IDerived extends IBase {
  22. void base1(String s);
  23. }
  24. class Base implements IBase {
  25. public void base2(String s) { Tester.event("Base.base2"); }
  26. }
  27. class Derived implements IDerived {
  28. public void base3(String s) { Tester.event("Derived.base3"); }
  29. }
  30. class SubBase extends Base {
  31. public void base3(String s) { Tester.event("SubBase.base3"); }
  32. }
  33. aspect Intro {
  34. public void IBase.base1(String s) { Tester.event("IBase.base1 from Intro"); }
  35. public void IBase.base3(String s) { Tester.event("IBase.base3 from Intro"); }
  36. public void IDerived.base1(String s) { Tester.event("IDerived.base1 from Intro"); }
  37. public void IDerived.base2(String s) { Tester.event("IDerived.base2 from Intro"); }
  38. public void IDerived.base3(String s) { Tester.event("IDerived.base3 from Intro"); }
  39. }
  40. aspect A {
  41. Object around(): call(* IBase.*(..)) {
  42. Tester.event("around call(IBase.*)");
  43. return proceed();
  44. }
  45. Object around(): call(* IBase+.*(..)) {
  46. Tester.event("around call(IBase+.*)");
  47. return proceed();
  48. }
  49. Object around(): call(* Base.*(..)) {
  50. Tester.event("around call(Base.*)");
  51. return proceed();
  52. }
  53. Object around(): execution(* Base+.*(..)) {
  54. Tester.event("around execution(Base+.*)");
  55. return proceed();
  56. }
  57. }