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.

AddObjectMethodProblem.java 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import org.aspectj.testing.Tester;
  2. public class AddObjectMethodProblem {
  3. // Uncommenting this and changing addObject -> doAddObject in the advice
  4. // works around the bug 0.5beta1
  5. //public void doAddObject(Class1 o) {
  6. // addObject(o);
  7. //}
  8. public static void main(String[] args) { test(); }
  9. crosscut ccut(Class1 c1): c1 && void process();
  10. advice(Class1 c1): ccut(c1) {
  11. before {
  12. if (c1.getElement() != null) addObject(c1.getElement());
  13. c1.setProcessedAndAdvised(true);
  14. }
  15. }
  16. public static void test() {
  17. AddObjectMethodProblem a = new AddObjectMethodProblem();
  18. Class1 c1 = new Class1();
  19. Class1 c2 = new Class1();
  20. c1.element = c2;
  21. a.addObject(c1);
  22. c1.process();
  23. Tester.check(c1.processedAndAdvised, "advice on top");
  24. Tester.check(c2.processedAndAdvised, "advice on element");
  25. }
  26. }
  27. class Class1 {
  28. public Class1 element;
  29. public boolean processedAndAdvised = false;
  30. public Class1 getElement() { return element; }
  31. public void setProcessedAndAdvised( boolean val ) {
  32. processedAndAdvised = val;
  33. }
  34. public void process() {
  35. if (element != null) element.process();
  36. }
  37. }