My first observation would be to change it so that you aren't advising your advice. Within the advice you access 'e' and that matches "get(* TestClass.e)" at that point this() is the aspect - and so the classcastexceptions occur because the cast to TestClass fails and that makes the output confusing. If I add a bit to the pointcut "&& !within(NullAspect)" and run it (I'm only using the first piece of advice here) I get:
C:\aspectj163>java TestClass O is: ev...@9304b1 It is NOT null O is: null It is null O is: ev...@190d11 It is NOT null Is that the output you want? If it isn't - please say what you are expecting. cheers, Andy. 2009/1/4 100ji <[email protected]> > Hi all, > > In my tracing application, I only want to trace a field when it's value is > non-null. But for some reason when I compare the value of the field in the > advice, it doesn't seem to work. I understand that null is not an object, > but I can't seem to find any documentation that says that null should be > treated specially. Can anyone point out what I am missing? The code below > illustrates what I am doing: > > --------------- > public class TestClass { > > Event e; > > TestClass() { > e = new Event(); > } > > public void setNull() { > e = null; > } > > public void createE() { > e = new Event(); > } > > public static void main(String[] args) { > TestClass t = new TestClass(); > > t.isNull(); > t.setNull(); > t.isNull(); > t.createE(); > t.isNull(); > } > > public void isNull() { > if (e == null) { > System.out.println("It is null"); > } else { > System.out.println("It is NOT null"); > } > } > } > > ---------------------- > > > public class Event { > public Integer number; > } > > > -------------------- > > public privileged aspect NullAspect { > pointcut p1(Object o) : this(o) && get(* TestClass.e); > > before(Object o) : p1(o) { > try { > System.out.println("O is: " + ((TestClass)o).e); > } catch (NullPointerException ne){ > System.out.println(ne); > System.out.println("o is null"); > } catch (Exception e) { > System.out.println(e); > System.out.println("o is not null"); > } > } > > // I have also tried: > > before(Object o) : p1(o) { > if (o != null) { > System.out.println("o is not null"); > } else { > System.out.println("o is null"); > } > } > ---------------------- > > TIA, > -S- > > > _______________________________________________ > aspectj-users mailing list > [email protected] > https://dev.eclipse.org/mailman/listinfo/aspectj-users > >
_______________________________________________ aspectj-users mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/aspectj-users
