Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Capture args with withincode and call]


Spot on, thanks.
I was just trying to do it using cflow but had mis-placed the args pcd.


Adrian Colyer-2 wrote:
> 
> The args pcd matches against the argument at the join point. For a
> call join point, that's always the call being made.
> 
> You can use cflow to solve this problem though:
> 
> pointcut executionOfBaseMethod(ArgClass a, ArgClass b) :
>   execution(private static Z X.m1(ArgClass, ArgClass)) &&
>   args(a,b);
> 
> pointcut callsToYFromPrivateBaseMethod(ArgClass a, ArgClass b) :
>   call(* Y.*(..)) &&
>   cflow(executionOfBaseMethod(a,b);
> 
> If you want only calls directly withincode of the base method you can
> further restrict with by adding:
> 
>   && withincode(private static Z X.m1(..)) 
> 
> to the callsToYFromPrivateBaseMethod pointcut defined above.
> 
> If you want the arguments as passed in to the base method execution,
> *and* the arguments passed on the call to Y you can write:
> 
> pointcut callsToYFromPrivateBaseMethod(
>   ArgClass m1a, ArgClass m2b, ArgClass ya, ArgClass yb) :  
>   call(* Y.*(..)) &&                                  
>   args(ya,yb) &&  
>   cflow(executionOfBaseMethod(a,b);                   
> 
> etc.
> 
> Regards, Adrian.
> 
> 
> On Tue, Feb 13, 2007 at 04:35:28AM -0800, bora.erbas wrote:
>> 
>> I felt like I should add some more details.
>> This is the problem I need to solve:
>> In a specific (private static) method call of a class (e.g. X.m1) I need
>> to
>> list all the calls which has a target class of some type (e.g. Y).
>> But at the same time I need to capture the arguments to X.m1(arg1, arg2)
>> as
>> well. But when capturing the arguments for the X.m1 the captured calls to
>> class Y are also confined to the calls with the same type/order of the
>> arguments of X.m1. So I want to list all calls to the methods of class Y
>> with any arguments. Is this possible using AspectJ constructs?
>> 
>> pointcut withinPrivateBaseMethod(ArgClass a, ArgClass b) :
>>    withincode(private static Z X.m1(ArgClass, ArgClass)) &&
>>    args(a, b);
>> 
>> pointcut allCallsToYFromPrivateBaseMethod(ArgClass a, ArgClass b) :
>>    withinPrivateBaseMethod(a, b) &&
>>    call(* Y.*(..));
>> 
>> 
>> So this has the problem I mentioned above.
>> Any ideas?
>> Cheers.
> 
> -- 
> Adrian Colyer
> CTO
> Interface21 Limited
> http://www.interface21.com
> 
> Registered in England and Wales: No. 5187766 Registered Office: Summit
> House, 2-2A Highfield Road, Dartford, Kent, DA1 2JY, UK
> 
> E-mails should be checked by the recipient to ensure that there are no
> viruses and Interface21 does not accept any responsibility if this is
> not done. Any views or opinions presented are solely those of the
> author and do not necessarily represent those of Interface21.
> 
> 
> 
>  
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
> 
> 

-- 
View this message in context: http://www.nabble.com/Re%3A-Capture-args-with-withincode-and-call--tf3220855.html#a8945281
Sent from the AspectJ - users mailing list archive at Nabble.com.



Back to the top