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 <[email protected]>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 ?
>
> Thanks,
> Dinkar
>
> --
> 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
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users