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.

PR519.java 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import org.aspectj.testing.Tester;
  2. /** @testcase PR#519 Exception thrown when planning advice */
  3. public class PR519 {
  4. private static final boolean DO_OUTPUT;
  5. private static final String[] EXPECTED;
  6. public static void main(String[] args) {
  7. try {
  8. A.main(args);
  9. Tester.checkAllEvents();
  10. } catch (MyException e) {
  11. // expecting this
  12. log("caught expected exception " + e);
  13. } catch (Exception e) {
  14. e.printStackTrace(System.err);
  15. }
  16. }
  17. public static void log(String s) {
  18. if (DO_OUTPUT) System.err.println(s);
  19. Tester.event(s);
  20. }
  21. static {
  22. DO_OUTPUT = false;
  23. EXPECTED = new String[]
  24. { "*** class A.foo()"
  25. , "*** class B.foo()"
  26. , "*** class A.bar()"
  27. , "after(): call(void A.bar(..)) : call(void A.bar())"
  28. , "*** class A.bar()"
  29. , "after(): call(void A.bar(..)) : call(void A.bar())"
  30. , "*** class B.bar()"
  31. , "*** class A.bar(String s)"
  32. , "after(): call(void A.bar(..)) : call(void A.bar(String))"
  33. , "*** class A.bar(String s1, String s2)"
  34. , "after(): call(void A.bar(..)) : call(void A.bar(String, String))"
  35. , "*** class A.bar(int i)"
  36. , "*** class A.bar()"
  37. , "after(): call(void A.bar(..)) : call(void A.bar())"
  38. , "after(): call(void A.bar(..)) : call(void A.bar(int))"
  39. , "after(): call(void A.bar(..)) && args(problem): call(void A.bar(int))"
  40. , "caught expected exception MyException" };
  41. Tester.expectEvent(EXPECTED);
  42. } // static init
  43. }
  44. class A extends B {
  45. private int a = 0;
  46. private int lala;
  47. public void bar(int i){
  48. PR519.log("*** " + this.getClass() + ".bar(int i)");
  49. bar();
  50. }
  51. public void bar(){
  52. PR519.log("*** " + this.getClass() + ".bar()");
  53. }
  54. public void bar(String s){
  55. PR519.log("*** " + this.getClass() + ".bar(String s)");
  56. }
  57. public void bar(String s1, String s2){
  58. PR519.log("*** " + this.getClass() + ".bar(String s1, String s2)");
  59. }
  60. public static void main(String[] argv) throws Exception {
  61. B b = new B();
  62. A a = new A();
  63. a.foo();
  64. b.foo();
  65. a.bar();
  66. a.bar();
  67. b.bar();
  68. a.bar("lala");
  69. a.bar("lala", "poo");
  70. a.bar(9);
  71. throw new MyException();
  72. }
  73. }
  74. class MyException extends Exception { }
  75. class B {
  76. private int b = 0;
  77. public void foo(){
  78. PR519.log("*** " + this.getClass() + ".foo()");
  79. }
  80. public void bar(){
  81. PR519.log("*** " + this.getClass() + ".bar()");
  82. }
  83. }
  84. aspect InstanceOfProblemAspect {
  85. public static final String PREFIX = "after(): call(void A.bar(..)) ";
  86. after(): !within(PR519) && call(void A.bar(..)){
  87. PR519.log(PREFIX + ": " + thisJoinPoint);
  88. }
  89. after(int problem): !within(PR519) && call(void A.bar(..)) && args(problem){
  90. PR519.log(PREFIX + " && args(problem): " + thisJoinPoint);
  91. }
  92. }