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.

CallsReceptionsCallsto.java 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // lifted directly from Mark's email
  2. import org.aspectj.testing.Tester;
  3. public class CallsReceptionsCallsto {
  4. static final String desiredString =
  5. "(calls) (callsto) (receptions) G.foo(A) G.foo(D) (calls) (callsto) (receptions) G.foo(A) G.foo(D) ";
  6. static StringBuffer buffer;
  7. public static void main(String[] args) {
  8. buffer = new StringBuffer();
  9. new C().go();
  10. String foundString = buffer.toString();
  11. Tester.checkEqual(foundString, desiredString);
  12. }
  13. }
  14. class C {
  15. A a = new A();
  16. D d = new D();
  17. G g = new G();
  18. void go(){
  19. g.foo(a);
  20. g.foo(d);
  21. bar(g);
  22. bash(g);
  23. }
  24. void bar(I i){
  25. i.foo(a);
  26. }
  27. void bash(J j){
  28. j.foo(d);
  29. }
  30. }
  31. aspect Q {
  32. pointcut pc2(): /*calls*/ within(C) && call(void I.foo(*));
  33. pointcut pc1(): /*receptions*/ call(void I.foo(*));
  34. pointcut pc3(): /*callsto*/ call(* I.foo(*));
  35. before (): pc2() {
  36. CallsReceptionsCallsto.buffer.append("(calls) ");
  37. }
  38. before(): pc3(){
  39. CallsReceptionsCallsto.buffer.append("(callsto) ");
  40. }
  41. before(): pc1() {
  42. CallsReceptionsCallsto.buffer.append("(receptions) ");
  43. }
  44. }
  45. class A {}
  46. class D {}
  47. interface I {
  48. void foo(A a);
  49. }
  50. interface J {
  51. void foo(D d);
  52. }
  53. class G implements I, J {
  54. public void foo(A a){
  55. CallsReceptionsCallsto.buffer.append("G.foo(A) ");
  56. }
  57. public void foo(D d){
  58. CallsReceptionsCallsto.buffer.append("G.foo(D) ");
  59. }
  60. }