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.

CyclicPointcuts.java 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import org.aspectj.testing.Tester;
  2. /** PR#568 cyclic pointcut definitions */
  3. public class CyclicPointcuts {
  4. static aspect A {
  5. /* @testcase pointcut depends on itself */
  6. pointcut p(): p(); // CE 11 recursion not permitted
  7. /* @testcase two pointcuts depends on each other */
  8. pointcut p1(): p2(); // CE 14 recursion not permitted
  9. pointcut p2(): p1(); // line 15
  10. /* @testcase three pointcuts depends on each other */
  11. pointcut pa(): pb(); // CE 18 recursion not permitted
  12. pointcut pb(): pc(); // line 19
  13. pointcut pc(): pa(); // line 20
  14. }
  15. }
  16. /** @testcase three pointcuts in different classes in a cycle */
  17. aspect One {
  18. pointcut p() : Two.p(); // line 26
  19. }
  20. aspect Two {
  21. pointcut p() : Three.p(); // line 29
  22. }
  23. aspect Three {
  24. pointcut p() : One.p(); // CE 32 recursion not permitted
  25. }
  26. /** @testcase three pointcuts in different classes (sub, super, other) in a cycle */
  27. abstract aspect Base {
  28. pointcut base() : A.p(); // line 37
  29. }
  30. aspect A {
  31. pointcut p() : Derived.p(); // line 40
  32. }
  33. aspect Derived extends Base {
  34. pointcut p() : base(); // CE 43 recursion not permitted
  35. }
  36. aspect Driver {
  37. // error test, but...
  38. static {
  39. Tester.expectEvent("Derived.p()");
  40. Tester.expectEvent("Three.p()");
  41. Tester.expectEvent("CyclicPointcuts.A.p()");
  42. Tester.expectEvent("CyclicPointcuts.A.p1()");
  43. Tester.expectEvent("CyclicPointcuts.A.()");
  44. }
  45. before() : Derived.p() {
  46. Tester.event("Derived.p()");
  47. }
  48. before() : Three.p() {
  49. Tester.event("Three.p()");
  50. }
  51. before() : CyclicPointcuts.A.p() {
  52. Tester.event("CyclicPointcuts.A.p()");
  53. }
  54. before() : CyclicPointcuts.A.p1() {
  55. Tester.event("CyclicPointcuts.A.p1()");
  56. }
  57. before() : CyclicPointcuts.A.pa() {
  58. Tester.event("CyclicPointcuts.A.pa()");
  59. }
  60. }