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.

MethodIntroductions.java 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import org.aspectj.testing.Tester;
  2. public class MethodIntroductions {
  3. public static void main(String[] args) {
  4. new MethodIntroductions().realMain(args);
  5. }
  6. public void realMain(String[] args) {
  7. AbstractSuper as0 = new AbstractSuper() { public int foo() { return 1; } };
  8. AbstractSuper as1 = new ExtendsAbstractSuper();
  9. AbstractSuper as2 = new ExtendsExtendsAbstractSuper();
  10. ExtendsAbstractSuper eas = new ExtendsAbstractSuper();
  11. ExtendsExtendsAbstractSuper eeas = new ExtendsExtendsAbstractSuper();
  12. Tester.checkEqual(as0.foo(), 1, "as0");
  13. Tester.checkEqual(as1.foo(), 2, "as1");
  14. Tester.checkEqual(as2.foo(), 3, "as2");
  15. Tester.checkEqual(eas.foo(), 2, "eas");
  16. Tester.checkEqual(eeas.foo(), 3, "eeas");
  17. Super s0 = new Super() {};
  18. Super s1 = new ExtendsSuper();
  19. Super s2 = new ExtendsExtendsSuper();
  20. ExtendsSuper es = new ExtendsSuper();
  21. ExtendsExtendsSuper ees = new ExtendsExtendsSuper();
  22. Tester.checkEqual(s0.foo(), 4, "s0");
  23. Tester.checkEqual(s1.foo(), 5, "s1");
  24. Tester.checkEqual(s2.foo(), 6, "s2");
  25. Tester.checkEqual(es.foo(), 5, "es");
  26. Tester.checkEqual(ees.foo(), 6, "ees");
  27. AbstractSuperNoIntro as0n = new AbstractSuperNoIntro() { public int foo() { return 7; } };
  28. AbstractSuperNoIntro as1n = new ExtendsAbstractSuperNoIntro();
  29. AbstractSuperNoIntro as2n = new ExtendsExtendsAbstractSuperNoIntro();
  30. ExtendsAbstractSuperNoIntro easn = new ExtendsAbstractSuperNoIntro();
  31. ExtendsExtendsAbstractSuperNoIntro eeasn = new ExtendsExtendsAbstractSuperNoIntro();
  32. Tester.checkEqual(as0n.foo(), 7, "as0n");
  33. Tester.checkEqual(as1n.foo(), 8, "as1n");
  34. Tester.checkEqual(as2n.foo(), 9, "as2n");
  35. Tester.checkEqual(easn.foo(), 8, "easn");
  36. Tester.checkEqual(eeasn.foo(), 9, "eeasn");
  37. }
  38. }
  39. interface I {
  40. public int foo();
  41. }
  42. abstract class AbstractSuper {}
  43. class ExtendsAbstractSuper extends AbstractSuper {}
  44. class ExtendsExtendsAbstractSuper extends ExtendsAbstractSuper {}
  45. class Super {}
  46. class ExtendsSuper extends Super {}
  47. class ExtendsExtendsSuper extends ExtendsSuper {}
  48. abstract class AbstractSuperNoIntro {}
  49. class ExtendsAbstractSuperNoIntro extends AbstractSuperNoIntro {}
  50. class ExtendsExtendsAbstractSuperNoIntro extends ExtendsAbstractSuperNoIntro {}
  51. aspect Introducer {
  52. declare parents: AbstractSuper implements I;
  53. public int AbstractSuper.foo() { return 1; }
  54. public int ExtendsAbstractSuper.foo() { return 2; }
  55. public int ExtendsExtendsAbstractSuper.foo() { return 3; }
  56. declare parents: Super implements I;
  57. public int Super.foo() { return 4; }
  58. public int ExtendsSuper.foo() { return 5; }
  59. public int ExtendsExtendsSuper.foo() { return 6; }
  60. declare parents: AbstractSuperNoIntro implements I;
  61. public int ExtendsAbstractSuperNoIntro.foo() { return 8; }
  62. public int ExtendsExtendsAbstractSuperNoIntro.foo() { return 9; }
  63. }