Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Match all method calls with a specific parameter type at any position

This should work for you.  All 3 method calls below are advised, but
the sysout call is *not* advised.

public aspect ParameterMatcher {
    before() : call(* *(..,String,..)) {
        System.out.println('S');
    }
}

public class HasParameters {
    static void doNothing(int x, int y, String z) { }
    static void doNothing(int x, String y, int z) { }
    static void doNothing(String x, int y, int z) { }
    public static void main(String[] args) {
        doNothing(0, 0, "");
        doNothing(0, "", 0);
        doNothing("", 0, 0);
    }
}

And then you can write an additional clause in the before advice to
capture the args.

On Wed, Jun 10, 2009 at 4:32 AM, Tahir Akhtar<tahir@xxxxxxxxxxxxxxxxxxx> wrote:
> One somewhat limited solution I see is to use an annotation on the methods
> with thisJoinPoint.getArgs().
>
> Tahir Akhtar wrote:
>>
>> Hi,
>> Is there a way to declare a pointcut that matches all method calls whose
>> any parameter is of specific type (say java.sql.Connection).
>>
>> I see that following will match methods whose last (or only) parameter is
>> of type Connection.
>>
>> pointcut havingAConnectionParameter(Connection conn): call(* *(..)) &&
>> args(..,conn );
>>
>> And following will match methods whose first (or only) parameter is of
>> type Connection.
>>
>> pointcut havingAConnectionParameter(Connection conn): call(* *(..)) &&
>> args(conn, .. );
>>
>> But how can I match when I don't know the exact position or even number of
>> parameters in advance?
>>
>>
>> Regards
>> Tahir Akhtar
>>
>>
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>>
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>


Back to the top