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.

ThisInIntroFieldInit.java 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import org.aspectj.testing.Tester;
  2. import org.aspectj.testing.Tester;
  3. public class ThisInIntroFieldInit {
  4. public static void main(String[] args) {
  5. Tester.expectEvent("result init");
  6. Tester.expectEvent("internalResult init");
  7. TargetClass me = new TargetClass();
  8. // pure-java - field references
  9. Tester.check(me.t_result_ref, "me.t_result_ref");
  10. Tester.check(me.t_result_ref_this, "me.t_result_ref_this");
  11. Tester.check(me.t_result_ref_qualified, "me.t_result_ref_qualified");
  12. // pure-java - method references
  13. Tester.check(me.t_result, "me.t_result");
  14. Tester.check(me.t_result_this, "me.t_result_this");
  15. Tester.check(me.t_result_qualified, "me.t_result_qualified");
  16. Tester.check(me.t_result_anon, "me.t_result_anon");
  17. // introduction - field references
  18. // local initializers are run after introduced initializers in 1.1
  19. Tester.check(!me.result_ref, "me.result_ref");
  20. Tester.check(!me.result_ref_this, "me.result_ref_this");
  21. Tester.check(!me.result_ref_qualified, "me.result_ref_qualified");
  22. // introduction - method references
  23. Tester.check(me.result, "me.result");
  24. Tester.check(me.result_this, "me.result_this");
  25. Tester.check(me.result_qualified, "me.result_qualified");
  26. Tester.check(me.result_anon, "me.result_anon");
  27. Tester.checkAllEvents();
  28. }
  29. }
  30. class TargetClass {
  31. boolean targTest() { return (null != this); }
  32. public boolean ok = (this != null);
  33. /** @testcase field reference in field initializer */
  34. public boolean t_result_ref = ok;
  35. /** @testcase this field reference in field initializer */
  36. public boolean t_result_ref_this = this.ok;
  37. /** @testcase qualified this field reference in field initializer */
  38. public boolean t_result_ref_qualified = TargetClass.this.ok;
  39. /** @testcase method reference in field initializer */
  40. public boolean t_result = targTest();
  41. /** @testcase this method in field initializer */
  42. public boolean t_result_this = this.targTest();
  43. /** @testcase qualified this method in field initializer */
  44. public boolean t_result_qualified = TargetClass.this.targTest();
  45. /** @testcase qualified this method in field initializer anon class definition */
  46. boolean t_result_anon
  47. = new Validator() {
  48. public boolean valid() {
  49. boolean one = targTest();
  50. boolean two = TargetClass.this.targTest();
  51. boolean three = ok;
  52. boolean four = TargetClass.this.ok;
  53. Tester.event("internalResult init");
  54. return (one && two && three && four);
  55. }}.valid();
  56. }
  57. interface Validator {
  58. public boolean valid();
  59. }
  60. aspect A {
  61. /** @testcase field reference in field initializer */
  62. public boolean TargetClass.result_ref = ok;
  63. /** @testcase this field reference in field initializer */
  64. public boolean TargetClass.result_ref_this = this.ok;
  65. /** @testcase qualified this field reference in field initializer */
  66. public boolean TargetClass.result_ref_qualified = TargetClass.this.ok;
  67. /** @testcase method reference in introduced field initializer */
  68. public boolean TargetClass.result = targTest();
  69. /** @testcase this method in introduced field initializer */
  70. public boolean TargetClass.result_this = this.targTest();
  71. /** @testcase qualified this method in introduced field initializer */
  72. public boolean TargetClass.result_qualified = TargetClass.this.targTest();
  73. /** @testcase qualified this method in introduced field initializer anon class definition */
  74. public boolean TargetClass.result_anon
  75. = new Validator() {
  76. public boolean valid() {
  77. boolean one = targTest();
  78. boolean two = TargetClass.this.targTest();
  79. boolean three = !ok;
  80. boolean four = !TargetClass.this.ok;
  81. Tester.event("result init");
  82. return (one && two && three && four);
  83. }}.valid();
  84. }