[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Detecting null values of a field

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: Event@9304b1
It is NOT null
O is: null
It is null
O is: Event@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 <itz100ji@xxxxxxxxx>
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
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users