Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

PR335.java 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import org.aspectj.testing.*;
  2. public class PR335 {
  3. public static void main(String[] args) {
  4. Ship s = new Ship();
  5. Tester.clearEvents();
  6. s.handleCollision();
  7. Tester.checkAndClearEvents("before3(d=0) inflictDamage(0) handleCollision()");
  8. s.handleCollision("dummy");
  9. Tester.checkAndClearEvents("before1(so=dummy,d=1) inflictDamage(1) handleCollision(Object)");
  10. s.handleCollision(1);
  11. Tester.checkAndClearEvents("before2(so=1,d=2) inflictDamage(2) handleCollision(int)");
  12. s.inflictDamage(3);
  13. Tester.checkAndClearEvents("inflictDamage(3)");
  14. }
  15. }
  16. aspect Bug1 {
  17. pointcut collisionDamage(Ship s, Object so, int d) :
  18. this(s)
  19. && cflow(call(void handleCollision(Object)) && args(so))
  20. && call(void Ship.inflictDamage(int)) && args(d);
  21. before(Ship s, Object so, int d) : collisionDamage(s, so, d) {
  22. Tester.event("before1(so="+so.toString()+",d="+d+")");
  23. }
  24. pointcut collisionDamage2(Ship s, int so, int d) :
  25. this(s)
  26. && cflow(call(void handleCollision(int)) && args(so))
  27. && call(void Ship.inflictDamage(int)) && args(d);
  28. before(Ship s, Object so, int d) : collisionDamage2(s, so, d) {
  29. Tester.event("before2(so="+so+",d="+d+")");
  30. }
  31. pointcut collisionDamage3(Ship s, int d) :
  32. this(s)
  33. && withincode(void handleCollision())
  34. && call(void Ship.inflictDamage(int)) && args(d);
  35. before(Ship s, int d) : collisionDamage3(s, d) {
  36. Tester.event("before3(d="+d+")");
  37. }
  38. }
  39. class Ship {
  40. void handleCollision() { inflictDamage(0); Tester.event("handleCollision()"); }
  41. void handleCollision(Object so) { inflictDamage(1); Tester.event("handleCollision(Object)"); }
  42. void handleCollision(int so) { inflictDamage(2); Tester.event("handleCollision(int)"); }
  43. void inflictDamage(int i) { Tester.event("inflictDamage(" + i + ")"); }
  44. }