[
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
|
The workaround is to have multiple small pieces of advice that all call whatever code you then want to run
pointcut havingAConnectionParameter1(Connection conn): call(* *(..)) && args(conn,..);
pointcut havingAConnectionParameter2(Connection conn): call(* *(..))
&& args(*,conn,.. );
etc...
before(Connection c): havingAConnectionParameter1(c) {run(c);}
before(Connection c): havingAConnectionParameter2(c) {run(c);}
etc...
Andy.
2009/6/21 Tahir Akhtar
<tahir@xxxxxxxxxxxxxxxxxxx>
I tried combining such pointcuts with || .
But now I am getting an "ambiguous binding of parameter(s) conn across
'||' in pointcut" error when I try to advice the composed pointcut with
an around advice.
Is there any work around to this error?
Regards
Tahir Akhtar
Andy Clement wrote:
If you want to use args directly for binding, the normal (not all that
pretty) solution right now is:
pointcut havingAConnectionParameter1(Connection conn): call(* *(..))
&& args(conn,..);
pointcut havingAConnectionParameter2(Connection conn): call(* *(..))
&& args(*,conn,.. );
pointcut havingAConnectionParameter3(Connection conn): call(* *(..))
&& args(*,*,conn,.. );
pointcut havingAConnectionParameter4(Connection conn): call(* *(..))
&& args(*,*,*,conn,.. );
pointcut havingAConnectionParameter5(Connection conn): call(* *(..))
&& args(*,*,*,conn,.. );
pointcut havingAConnectionParameter6(Connection conn): call(* *(..))
&& args(*,*,*,*,conn,.. );
obviously you need as many variants as the max number of arguments,
but more than 6/7 arguments then I think the code you are advising has
other problems ;)
there are open enhancement requests relating to this.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=160509
https://bugs.eclipse.org/bugs/show_bug.cgi?id=233718
The second one is interesting as it discusses a lot of possible syntaxes.
cheers,
Andy.
2009/6/10 Tahir Akhtar <tahir@xxxxxxxxxxxxxxxxxxx>:
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
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users