123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- import org.aspectj.testing.Tester;
-
- public class AddObjectMethodProblem {
-
- // Uncommenting this and changing addObject -> doAddObject in the advice
- // works around the bug 0.5beta1
- //public void doAddObject(Class1 o) {
- // addObject(o);
- //}
-
- public static void main(String[] args) { test(); }
-
- crosscut ccut(Class1 c1): c1 && void process();
-
- advice(Class1 c1): ccut(c1) {
- before {
- if (c1.getElement() != null) addObject(c1.getElement());
- c1.setProcessedAndAdvised(true);
- }
- }
-
- public static void test() {
- AddObjectMethodProblem a = new AddObjectMethodProblem();
- Class1 c1 = new Class1();
- Class1 c2 = new Class1();
- c1.element = c2;
- a.addObject(c1);
- c1.process();
- Tester.check(c1.processedAndAdvised, "advice on top");
- Tester.check(c2.processedAndAdvised, "advice on element");
- }
- }
-
- class Class1 {
- public Class1 element;
- public boolean processedAndAdvised = false;
-
- public Class1 getElement() { return element; }
-
- public void setProcessedAndAdvised( boolean val ) {
- processedAndAdvised = val;
- }
-
- public void process() {
- if (element != null) element.process();
- }
- }
|