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.

SuperField.java 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import org.aspectj.testing.Tester;
  2. public class SuperField {
  3. public static void main(String[] args) {
  4. Derived d = new Derived();
  5. Tester.checkAndClearEvents(new String[] {
  6. "set Base on <Derived>",
  7. "set Derived on <Derived>",
  8. });
  9. d.m1();
  10. Tester.checkAndClearEvents(new String[] {
  11. "get Derived on <Derived>",
  12. "Derived",
  13. });
  14. d.m2();
  15. Tester.checkAndClearEvents(new String[] {
  16. "get Derived on <Derived>",
  17. "Derived",
  18. });
  19. d.m3();
  20. Tester.checkAndClearEvents(new String[] {
  21. "get Base on <Derived>",
  22. "Base",
  23. });
  24. d.m4();
  25. Tester.checkAndClearEvents(new String[] {
  26. "get Base on <Derived>",
  27. "set BaseNew on <Derived>",
  28. "get BaseNew on <Derived>",
  29. "BaseNew",
  30. });
  31. Tester.printEvents();
  32. }
  33. }
  34. class Base {
  35. String s = "Base";
  36. public String toString() { return "<Base>"; }
  37. }
  38. class Derived extends Base {
  39. String s = "Derived";
  40. void m1() {
  41. Tester.event(s);
  42. }
  43. void m2() {
  44. Tester.event(this.s);
  45. }
  46. void m3() {
  47. Tester.event(super.s);
  48. }
  49. void m4() {
  50. super.s += "New";
  51. Tester.event(super.s);
  52. }
  53. public String toString() { return "<Derived>"; }
  54. }
  55. aspect A {
  56. after(Object o) returning (String v): target(o) && get(String s) {
  57. Tester.event("get " + v + " on " + o);
  58. }
  59. before(Object o, String v): target(o) && set(String s) && args(v) {
  60. Tester.event("set " + v + " on " + o);
  61. }
  62. }