Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import org.aspectj.testing.Tester;
  2. import org.aspectj.lang.*;
  3. import org.aspectj.lang.reflect.*;
  4. import java.util.Arrays;
  5. /** @testcase PR#764 binding args with indeterminate prefix and suffix */
  6. public class IndeterminateArgsCE {
  7. public static void main (String[] args) {
  8. STarget c;
  9. c = new STarget();
  10. c = new STarget("s1");
  11. c = new STarget("s1", "s2");
  12. c = new STarget("s1", "s2", "s3");
  13. c.f();
  14. c.f("s1");
  15. c.f("s1", "s2");
  16. c.f("s1", "s2", "s3");
  17. OTarget o;
  18. o = new OTarget();
  19. o = new OTarget("o1");
  20. o = new OTarget("o1", "o2");
  21. o = new OTarget("o1", "o2", "o3");
  22. o.f();
  23. o.f("o1");
  24. o.f("o1", "o2");
  25. o.f("o1", "o2", "o3");
  26. }
  27. }
  28. class OTarget {
  29. OTarget() { }
  30. OTarget(String s1) { }
  31. OTarget(String s1, Object s2) { } // CE
  32. OTarget(String s1, Object s2, String s3) { } // CE
  33. void f() { }
  34. void f(String s1) { }
  35. void f(String s1, Object s2) { } // CE
  36. void f(String s1, Object s2, String s3) { } // CE
  37. }
  38. class STarget {
  39. STarget() { }
  40. STarget(String s1) { }
  41. STarget(String s1, String s2) { } // CE
  42. STarget(String s1, String s2, String s3) { }
  43. void f() { }
  44. void f(String s1) { }
  45. void f(String s1, String s2) { } // CE
  46. void f(String s1, String s2, String s3) { }
  47. }
  48. aspect A {
  49. void check(String pc, JoinPoint jp) {
  50. Class[] types = ((CodeSignature) jp.getSignature()).getParameterTypes();
  51. //T.e(pc + ": " + Arrays.asList(types));
  52. }
  53. pointcut safeS() : target(STarget) && (call(new(..)) || call(* *(..)));
  54. pointcut safeO() : target(OTarget) && (call(new(..)) || call(* *(..)));
  55. pointcut o1Anywhere() : args(.., Object, ..);
  56. pointcut s1Anywhere() : args(.., String, ..);
  57. pointcut bo1Anywhere(Object o) : args(.., o, ..);
  58. pointcut bs1Anywhere(String s) : args(.., s, ..);
  59. before() : safeO() && o1Anywhere() { check ("o1Anywhere()", thisJoinPoint); }
  60. before(Object o1) : safeO() && bo1Anywhere(o1) { check ("bo1Anywhere(o1)", thisJoinPoint); }
  61. before() : safeS() && s1Anywhere() { check ("s1Anywhere()", thisJoinPoint); }
  62. before(String s1) : safeS() && bs1Anywhere(s1) { check ("bs1Anywhere(s1)", thisJoinPoint); }
  63. }