[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Capturing multiple return values from recursive calls

The simplest way would be to attach state to your aspect so that it can keep track of the last n values.  You also may want to attach a percflow instantiation clause to the aspect to make sure that each initial call to fact() has its own aspect instance.

So, something like this:

aspect A percflow(topLevelFactCall()) {

  pointcut topLevelFactCall() : factCall() && !cflowbelow(factCall());


  Stack<Integer> returnValues;


And just push a new value onto the stack until you get as many return values as you require.

On Wed, Sep 2, 2009 at 1:20 AM, Dinkar Rao <dinkar.d91411118@xxxxxxxxx> wrote:

Hi Folks,

Need some help with AspectJ. How can I capture return values from recursive
calls ? I want not only the returned value from the top level method call in
the stack, but also link the values from the intermediate method calls. For
example, given this simple method:

   public int fact(int val) {
       if (val > 0) {
           return val * fact(val - 1);
       else {
           return 1;

I can write an aspect that gets me the returned values from each call.

   public pointcut FactCall() :
       call(public int fact(int));

   after() returning(int f) :
       FactCall() {
           System.out.println("returned = " + f);

 So for fact(4), I get the returned values from the top-level call as 1, 1,
2, 6, 24.

But what I really want to do is to capture the return values from the top 2
(or top n) recursive method calls, i.e. something that links

1 => 1
1 => 2
2 => 6
6 => 24

Any suggestions on how to do this ?


View this message in context: http://www.nabble.com/Capturing-multiple-return-values-from-recursive-calls-tp25253444p25253444.html
Sent from the AspectJ - users mailing list archive at Nabble.com.

aspectj-users mailing list