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.

CallReference.java 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import org.aspectj.testing.Tester;
  2. import org.aspectj.lang.JoinPoint;
  3. /** @testcase PR#41888 call PCD fails when given subtype of defining type */
  4. public class CallReference {
  5. public static void main (String[] args) {
  6. // don't move these lines without changing expectEvents below
  7. new Sub().run();
  8. new SubSub().run();
  9. new SubSubSub().run();
  10. ((Super) new Sub()).run();
  11. ((Super) new SubSub()).run();
  12. ((Super) new SubSubSub()).run();
  13. ((Sub) new SubSub()).run();
  14. ((Sub) new SubSubSub()).run();
  15. ((SubSub) new SubSubSub()).run();
  16. }
  17. }
  18. class Super { void run() {} }
  19. class Sub extends Super { void run() {} }
  20. class SubSub extends Sub { }
  21. class SubSubSub extends SubSub { }
  22. aspect A {
  23. static {
  24. // generated from System.out call below
  25. Tester.expectEvent("Super 1 10");
  26. Tester.expectEvent("Sub 2 10");
  27. Tester.expectEvent("Super 3 11");
  28. Tester.expectEvent("Sub 4 11");
  29. Tester.expectEvent("SubSub 5 11");
  30. Tester.expectEvent("Super 6 12");
  31. Tester.expectEvent("Sub 7 12");
  32. Tester.expectEvent("SubSub 8 12");
  33. Tester.expectEvent("SubSubSub 9 12");
  34. Tester.expectEvent("Super 10 13");
  35. Tester.expectEvent("Super 11 14");
  36. Tester.expectEvent("Super 12 15");
  37. Tester.expectEvent("Super 13 16");
  38. Tester.expectEvent("Sub 14 16");
  39. Tester.expectEvent("Super 15 17");
  40. Tester.expectEvent("Sub 16 17");
  41. Tester.expectEvent("Super 17 18");
  42. Tester.expectEvent("Sub 18 18");
  43. Tester.expectEvent("SubSub 19 18");
  44. }
  45. int count;
  46. void advice(String s, JoinPoint.StaticPart jp) {
  47. s = s
  48. + " "
  49. + ++count
  50. + " "
  51. + jp.getSourceLocation().getLine();
  52. Tester.event(s);
  53. // use after moving code lines above
  54. //System.out.println("Tester.expectEvent(\"" + s + "\");");
  55. }
  56. before() : call (void Super.run()) {
  57. advice("Super ", thisJoinPointStaticPart);
  58. }
  59. before() : call (void Sub.run()) {
  60. advice("Sub ", thisJoinPointStaticPart);
  61. }
  62. before() : call (void SubSub.run()) {
  63. advice("SubSub", thisJoinPointStaticPart);
  64. }
  65. before() : call (void SubSubSub.run()) {
  66. advice("SubSubSub", thisJoinPointStaticPart);
  67. }
  68. after() returning : execution(void CallReference.main(String[])) {
  69. Tester.checkAllEvents();
  70. }
  71. }