[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-users] Infinite advice call problem

Hi,

I have the problem of infinite advice calls as described in FAQ item 	
11.1; running the program below crashes the VM with a memory fault 
(hence the class name).

According to the FAQ answer I could use after returning instead of 
plain after to handle exceptions different from normal method 
execution, or I could use !within(theAspect). Neither works for me, 
i.e. neither changes the program behaviour.

I understand that the after returning does not have any impact on the 
sample code as nothing is thrown. 
But why doesnt !within work? Is this a problem due to indirect 
recursion?

What am I missing? 

Thanks in advance,

Robert


class MemoryFault {
    public static void main(String args[]) {
        MemoryFault mf = new MemoryFault();
    }

    public Object clone() {
        return new MemoryFault();
    }
}

aspect Constructor {
    after(MemoryFault mf):
        target(mf) &&
        execution(MemoryFault.new(..)) &&
        !within(Constructor) {
        // System.out.println("In after() advice");
        MemoryFault other = (MemoryFault) mf.clone();
    }
}