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.

MethodSignatures.java 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. import org.aspectj.testing.Tester;
  2. import java.util.Set;
  3. import java.util.*;
  4. interface I {
  5. public void m2();
  6. }
  7. class C {
  8. public void m0() {}
  9. public void m1() {}
  10. public void m2() {}
  11. }
  12. class D0 extends C {
  13. public void m1() { super.m1(); }
  14. }
  15. class D1 extends C implements I {
  16. public void m0() { super.m0(); }
  17. public void m2() { super.m2(); }
  18. }
  19. class E {
  20. Set set = new HashSet();
  21. String makePrettyString(String val) {
  22. return decode(val) + " advice for " + method(val);
  23. }
  24. public void check(String msg, String vals) {
  25. StringTokenizer tok = new StringTokenizer(vals);
  26. while (tok.hasMoreTokens()) {
  27. String val = tok.nextToken();
  28. Tester.check(set.contains(val),
  29. msg + " does not contain " +
  30. makePrettyString(val));
  31. if (set.contains(val)) set.remove(val);
  32. }
  33. // check that nothing that shouldn't be set is set
  34. for (Iterator i = set.iterator(); i.hasNext(); ) {
  35. Tester.check(false,
  36. msg + " shouldn't contain " +
  37. makePrettyString((String)i.next()));
  38. }
  39. clear();
  40. }
  41. public String method(String val) {
  42. int idollar = val.indexOf("$");
  43. if (idollar == -1) {
  44. return val;
  45. }
  46. return val.substring(idollar+1);
  47. }
  48. public String decode(String val) {
  49. int idollar = val.indexOf("$");
  50. if (idollar == -1) {
  51. return val;
  52. }
  53. String code = val.substring(0, idollar);
  54. String result = val;
  55. if (code.equals("bc")) {
  56. result = "before calls";
  57. } else if (code.equals("br")) {
  58. result = "before receptions";
  59. } else if (code.equals("be")) {
  60. result = "before execution";
  61. }
  62. return result;
  63. }
  64. public void put(String val) {
  65. set.add(val);
  66. }
  67. public void clear() {
  68. set = new HashSet();
  69. }
  70. }
  71. interface F {
  72. E e = new E();
  73. }
  74. public class MethodSignatures implements F {
  75. static int i = 1;
  76. static int j = 0;
  77. static int k = 0;
  78. public static void main(String[] args) {
  79. I id1 = new D1();
  80. C c = new C();
  81. C cd0 = new D0();
  82. C cd1 = new D1();
  83. D0 d0 = new D0();
  84. D1 d1 = new D1();
  85. // id1.m2(); e.check("id1.m2", "bc$i.m2 br$i.m2 be$i.m2 be$c.m2 be$d1.m2 br$c.m2 br$d1.m2");
  86. // c.m0(); e.check("c.m0", "bc$c.m0 br$c.m0 be$c.m0");
  87. // c.m1(); e.check("c.m1", "bc$c.m1 br$c.m1 be$c.m1");
  88. // c.m2(); e.check("c.m2", "bc$c.m2 br$c.m2 be$c.m2");
  89. // cd0.m0(); e.check("cd0.m0", "bc$c.m0 br$d0.m0 be$c.m0 br$c.m0");
  90. // cd0.m1(); e.check("cd0.m1", "bc$c.m1 br$d0.m1 be$d0.m1 be$c.m1 br$c.m1");
  91. // cd0.m2(); e.check("cd0.m2", "bc$c.m2 br$d0.m2 be$c.m2 br$c.m2");
  92. // cd1.m0(); e.check("cd1.m0", "bc$c.m0 br$d1.m0 be$d1.m0 br$c.m0 be$c.m0");
  93. // cd1.m1(); e.check("cd1.m1", "bc$c.m1 br$d1.m1 br$c.m1 be$c.m1");
  94. // cd1.m2(); e.check("cd1.m2", "bc$c.m2 br$d1.m2 be$d1.m2 br$c.m2 be$c.m2 br$i.m2 be$i.m2");
  95. // d0.m0(); e.check("d0.m0", "bc$d0.m0 br$d0.m0 bc$c.m0 br$c.m0 be$c.m0"); //??? bc$d0.m0
  96. // d0.m1(); e.check("d0.m1", "bc$d0.m1 br$d0.m1 be$d0.m1 bc$c.m1 br$c.m1 be$c.m1");
  97. // d0.m2(); e.check("d0.m2", "bc$d0.m2 br$d0.m2 bc$c.m2 br$c.m2 be$c.m2"); //??? bc$d0.m2
  98. // d1.m0(); e.check("d1.m0", "bc$d1.m0 br$d1.m0 be$d1.m0 bc$c.m0 br$c.m0 be$c.m0");
  99. // d1.m1(); e.check("d1.m1", "bc$d1.m1 br$d1.m1 bc$c.m1 br$c.m1 be$c.m1"); //??? bc$d1.m1
  100. // d1.m2(); e.check("d1.m2", "bc$d1.m2 br$d1.m2 be$d1.m2 bc$c.m2 br$c.m2 be$c.m2 bc$i.m2 br$i.m2 be$i.m2");
  101. id1.m2(); e.check("id1.m2", "bc$i.m2 be$i.m2 be$c.m2 be$d1.m2 ");
  102. c.m0(); e.check("c.m0", "bc$c.m0 be$c.m0");
  103. c.m1(); e.check("c.m1", "bc$c.m1 be$c.m1");
  104. c.m2(); e.check("c.m2", "bc$c.m2 be$c.m2");
  105. cd0.m0(); e.check("cd0.m0", "bc$c.m0 be$c.m0");
  106. cd0.m1(); e.check("cd0.m1", "bc$c.m1 be$d0.m1 be$c.m1");
  107. cd0.m2(); e.check("cd0.m2", "bc$c.m2 be$c.m2 ");
  108. cd1.m0(); e.check("cd1.m0", "bc$c.m0 be$d1.m0 be$c.m0");
  109. cd1.m1(); e.check("cd1.m1", "bc$c.m1 be$c.m1");
  110. cd1.m2(); e.check("cd1.m2", "bc$c.m2 be$d1.m2 be$c.m2 be$i.m2");
  111. d0.m0(); e.check("d0.m0", "bc$d0.m0 bc$c.m0 be$c.m0"); //??? bc$d0.m0
  112. d0.m1(); e.check("d0.m1", "bc$d0.m1 be$d0.m1 bc$c.m1 be$c.m1");
  113. d0.m2(); e.check("d0.m2", "bc$d0.m2 bc$c.m2 be$c.m2"); //??? bc$d0.m2
  114. d1.m0(); e.check("d1.m0", "bc$d1.m0 be$d1.m0 bc$c.m0 be$c.m0");
  115. d1.m1(); e.check("d1.m1", "bc$d1.m1 bc$c.m1 be$c.m1"); //??? bc$d1.m1
  116. d1.m2(); e.check("d1.m2", "bc$d1.m2 be$d1.m2 bc$c.m2 be$c.m2 bc$i.m2 be$i.m2");
  117. }
  118. }
  119. aspect A implements F {
  120. before(): call(void C.m0()) { e.put("bc$c.m0"); }
  121. before(): call(void C.m1()) { e.put("bc$c.m1"); }
  122. before(): call(void C.m2()) { e.put("bc$c.m2"); }
  123. before(): call(void D0.m0()) { e.put("bc$d0.m0"); }
  124. before(): call(void D0.m1()) { e.put("bc$d0.m1"); }
  125. before(): call(void D0.m2()) { e.put("bc$d0.m2"); }
  126. before(): call(void D1.m0()) { e.put("bc$d1.m0"); }
  127. before(): call(void D1.m1()) { e.put("bc$d1.m1"); }
  128. before(): call(void D1.m2()) { e.put("bc$d1.m2"); }
  129. before(): call(void I.m2()) { e.put("bc$i.m2"); }
  130. // /*static*/ before(): call(void C.m0()) { e.put("br$c.m0"); }
  131. // /*static*/ before(): call(void C.m1()) { e.put("br$c.m1"); }
  132. // /*static*/ before(): call(void C.m2()) { e.put("br$c.m2"); }
  133. // /*static*/ before(): call(void D0.m0()) { e.put("br$d0.m0"); }
  134. // /*static*/ before(): call(void D0.m1()) { e.put("br$d0.m1"); }
  135. // /*static*/ before(): call(void D0.m2()) { e.put("br$d0.m2"); }
  136. // /*static*/ before(): call(void D1.m0()) { e.put("br$d1.m0"); }
  137. // /*static*/ before(): call(void D1.m1()) { e.put("br$d1.m1"); }
  138. // /*static*/ before(): call(void D1.m2()) { e.put("br$d1.m2"); }
  139. // /*static*/ before(): call(void I.m2()) { e.put("br$i.m2"); }
  140. /*static*/ before(): execution(void C.m0()) { e.put("be$c.m0"); }
  141. /*static*/ before(): execution(void C.m1()) { e.put("be$c.m1"); }
  142. /*static*/ before(): execution(void C.m2()) { e.put("be$c.m2"); }
  143. /*static*/ before(): execution(void D0.m0()) { e.put("be$d0.m0"); } // no targets
  144. /*static*/ before(): execution(void D0.m1()) { e.put("be$d0.m1"); }
  145. /*static*/ before(): execution(void D0.m2()) { e.put("be$d0.m2"); } // no targets
  146. /*static*/ before(): execution(void D1.m0()) { e.put("be$d1.m0"); }
  147. /*static*/ before(): execution(void D1.m1()) { e.put("be$d1.m1"); } // no targets
  148. /*static*/ before(): execution(void D1.m2()) { e.put("be$d1.m2"); }
  149. /*static*/ before(): execution(void I.m2()) { e.put("be$i.m2"); }
  150. }