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.

AdviceThrowsCp.java 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import org.aspectj.testing.Tester;
  2. import java.io.IOException;
  3. public class AdviceThrowsCp {
  4. public static void main(String[] args) {
  5. try {
  6. new C().m1();
  7. Tester.checkFailed("m1");
  8. } catch (CheckedExc ce) {
  9. Tester.checkEqual("b1", ce.getMessage(), "m1");
  10. }
  11. try {
  12. new C().m2();
  13. Tester.checkFailed("m2");
  14. } catch (UncheckedExc ce) {
  15. Tester.checkEqual("b3", ce.getMessage(), "m2");
  16. }
  17. try {
  18. new C().m3();
  19. Tester.checkFailed("m3");
  20. } catch (CheckedExc ce) {
  21. Tester.checkEqual("b1", ce.getMessage(), "m3");
  22. } catch (Exception e) {
  23. Tester.checkFailed("IOException");
  24. System.out.println("m3: " + e);
  25. }
  26. try {
  27. new C().m4();
  28. Tester.checkFailed("m4");
  29. } catch (UncheckedExc ce) {
  30. Tester.checkEqual("b3", ce.getMessage(), "m4");
  31. }
  32. }
  33. }
  34. class CheckedExc extends Exception {
  35. CheckedExc(String m) { super(m); }
  36. }
  37. class UncheckedExc extends RuntimeException {
  38. UncheckedExc(String m) { super(m); }
  39. }
  40. class C {
  41. public void m1() throws CheckedExc {
  42. }
  43. public void m2() throws UncheckedExc {
  44. }
  45. public void m3() throws IOException, CheckedExc {
  46. }
  47. public void m4() {
  48. }
  49. }
  50. aspect A {
  51. pointcut canThrowChecked(): call(* C.m1()) || call(* C.m3());
  52. pointcut canThrowChecked1(): call(* C.m*() throws CheckedExc);
  53. pointcut canThrowUnchecked(): call(* C.m*());
  54. before() throws CheckedExc: canThrowChecked() {
  55. throw new CheckedExc("b1");
  56. }
  57. before() throws CheckedExc: canThrowChecked1() {
  58. throw new CheckedExc("b2");
  59. }
  60. before() throws UncheckedExc: canThrowUnchecked() {
  61. throw new UncheckedExc("b3");
  62. }
  63. before(): canThrowUnchecked() {
  64. throw new UncheckedExc("b4");
  65. }
  66. void around() throws CheckedExc: canThrowChecked() {
  67. throw new CheckedExc("a1");
  68. }
  69. void around() throws CheckedExc: canThrowChecked1() {
  70. throw new CheckedExc("a2");
  71. }
  72. void around() throws UncheckedExc: canThrowUnchecked() {
  73. throw new UncheckedExc("a3");
  74. }
  75. void around(): canThrowUnchecked() {
  76. throw new UncheckedExc("a4");
  77. }
  78. }