[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
RE: [aspectj-users] Parameters
|
I would be nervous about having the same single join point result in multiple distinct matches for the same pointcut. It breaks a key assumption underlying AspectJ.
However, I think it would be very appropriate to allow args to let you bind certain arguments to an array or collection, e.g., (.., Type, ..) could be bound to Type[] matches for ALL the matching parameters. This would provide the highly desirable property of letting one write advice that works on all parameters of a given type, as Ron desires.
Ron Bodkin
Chief Technology Officer
New Aspects of Security
m: (415) 509-2895
> ------------Original Message-------------
> From: "DiFrango, Ron" <ron.difrango@xxxxxxxxxxxxxx>
> To: "'aspectj-users@xxxxxxxxxxx'" <aspectj-users@xxxxxxxxxxx>
> Date: Wed, Aug-27-2003 6:10 AM
> Subject: RE: [aspectj-users] Parameters
>
> Gregor,
>
> In thinking about this more, if I were the one writing the requirements, I
> would want the situation you pose below to have two (or more if that is how
> the method call is structured) matches. In my case, I am trying to do
> contract enforcement so there is nothing that I would not want to happen on
> all instances of that object. Personally, I think that this is a better
> limitation, if you will, than the current one because I must declare point
> cuts with every combination of parameters that I might encounter now and in
> the future. The other alternative is to enforce some form of arbitrary
> architectural standard that certain parameters must be in certain orders,
> etc. which I think becomes difficult at best. Furthermore, I believe that
> this defeats the purpose of cross-cutting concerns because now my code
> essentially know that it will be cross-cut in some manner.
>
> Maybe aspectj could provide some sort of mechanism to say I want to enforce
> this on all parameters or not.
>
> Thanks,
>
> Ron DiFrango
>
>
> -----Original Message-----
> From: Gregor Kiczales [mailto:gregor@xxxxxxxxx]
> Sent: Wednesday, August 20, 2003 1:22 PM
> To: aspectj-users@xxxxxxxxxxx
> Subject: RE: [aspectj-users] Parameters
>
>
> As I recall, the issue with using .. more than once in an args pointcut is
> as follows:
>
> consider three pointcuts
>
> p1(SpaceShip s): args(s, ..)
> p2(SpaceShip s): args(.., s)
> p3(SpaceShip s): args(.., s, ..)
>
> and a method like:
>
> void collide(SpaceShip s1, SpaceShip s2) { <make a big flash> }
>
> Well p1 and p2 both match calls or executions of this method. But what
> about p3? Should it match? Should it not match? Should it match *twice*?
>
> Its not clear (at least to me). There are some interesting things you could
> do here, but figuring them out could take some time.
>
> Because not allowing more than one .. neatly avoids this problem, that is
> what we did. We weren't saying that was the right decision for all time.
> But I think it was right for 1.0.
>
> Note that this is NOT a comment on whether .., x, .. in the unambiguous case
> is useful. I think it is, and that's why we tried to figure it out. Its just
> a statement that the ambiguous case seems to interfere here.
>
> > -----Original Message-----
> > From: aspectj-users-admin@xxxxxxxxxxx
> > [mailto:aspectj-users-admin@xxxxxxxxxxx] On Behalf Of DiFrango, Ron
> > Sent: Wednesday, August 20, 2003 9:54 AM
> > To: 'aspectj-users@xxxxxxxxxxx'
> > Subject: RE: [aspectj-users] Parameters
> >
> >
> > Wes,
> >
> > In thinking about the problem more fully, I see (in my humble
> > opinion) a
> > limitation (severe if you consider legacy systems) in the way aspectj
> > handles the arguments to methods in defining PCD. If you
> > look at the way it
> > works today, aspectj requires that if you have a need to pull
> > out on certain
> > parameters to a given method, you must define (and must
> > continue to require)
> > the order in which they are defined in order to expose them
> > to the advice.
> >
> > To give you an idea of where I am using this is that I want
> > to pull out all
> > the common argument/parameter validation rules that current
> > have scattered
> > all over the place in our code base with one central
> > validation service via
> > aspectj. If I am required to re-order the
> > arguments/parameters to these
> > methods I may end up touching somewhere around 300 to 400
> > classes. On the
> > flip side if I could pick-out the arguments any where they
> > exist I would
> > only have to affect 62 classes or the ones that have the
> > rules in them.
> >
> > Please let me know if I am wrong of off base with this assessment.
> >
> > Thanks,
> >
> > Ron DiFrango
> >
> >
> > -----Original Message-----
> > From: DiFrango, Ron
> > Sent: Wednesday, August 20, 2003 8:47 AM
> > To: 'aspectj-users@xxxxxxxxxxx'
> > Subject: RE: [aspectj-users] Parameters
> >
> >
> > Wes,
> >
> > Thanks for your answer and it does not work in 1.0 as that is
> > the version I
> > am on currently. Actually it was what I expected. I am
> > surprised that I am
> > one of the first to bring this up.
> >
> > I personally would like to see the ability to use multiple
> > wildcards in a
> > PCD. The main driver for me is that I am retrofitting old
> > code and I would
> > prefer to keep the pre-existing interfaces as much intact as possible.
> >
> > Should I submit a bug report on this?
> >
> > Thanks,
> >
> > Ron DiFrango
> >
> >
> > -----Original Message-----
> > From: Wes Isberg [mailto:wes@xxxxxxxxxxxxxx]
> > Sent: Wednesday, August 20, 2003 12:03 AM
> > To: aspectj-users@xxxxxxxxxxx
> > Subject: Re: [aspectj-users] Parameters
> >
> >
> > args(.., ClassX, ..)
> >
> > should have worked in AspectJ 1.0, but, as Erik noted for 1.1,
> >
> > We did not implement the handling of more than one ..
> > wildcard in args PCDs (rarely encountered in the wild)
> > because we didn't have the time. This might be available
> > in later releases if there is significant outcry
> >
> > http://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/aspect
> > j-home/doc/REA
> > DME-11.html#language
> >
> > I'm not sure if a bug would qualify as a significant outcry,
> > but it would be
> > a place others could chime in.
> >
> > (Also, it's a doc bug that ".." in args(...) is not better
> > documented. I
> > couldn't find it in either quick reference or the programming guide
> > semantics appendix; perhaps my search was bad.)
> >
> > A workaround for now is to test the args directly, perhaps
> > even in an if
> > pointcut:
> >
> > aspect A {
> > private static boolean hasArg(Class c, Object[] args) {
> > for (int i = 0; i < args.length; i++) {
> > if ((null != args[i]) &&
> > c.isAssignableFrom(args[i].getClass())) {
> > return true;
> > }
> > }
> > return false;
> > }
> > before() : ... && if(hasArg(ClassX.class,
> > thisJoinPoint.getArgs()) {
> > ...
> > }
> > }
> >
> > Obviously, that won't pick out a null ClassX arg, and it
> > can be expensive, depending on the rest of your pointcut.
> >
> > Wes
> >
> >
> > DiFrango, Ron wrote:
> >
> > > All,
> > >
> > > I could not find an answer to this in any of the old
> > postings. I have
> > > methods that take a common parameter. The problem is that
> > depending
> > > on the method call this parameter may be listed anywhere in
> > the method
> > > signature. So for example:
> > >
> > > public class ParametersInMethodCalls
> > > {
> > > public void example1(ClassX x, double I, String s)
> > > {
> > > }
> > >
> > > public void example2(int I, ClassX x, double d)
> > > {
> > > }
> > >
> > > public void example2(float I, String s, ClassX x)
> > > {
> > > }
> > > }
> > >
> > > My question is can I define a pointcuts that picks out all the above
> > > combinations without having to "code if you will" the different
> > > permutations possible? I have tried the following
> > > examples/permutations:
> > >
> > > pointcut examples(ClassX x) :
> > > execution(public * ParametersInMethodCalls.*(..))
> > > && args(.., x);
> > >
> > > ==> Afected example2
> > >
> > > pointcut examples(ClassX x) :
> > > execution(public * ParametersInMethodCalls.*(..))
> > > && args(x, ..);
> > >
> > > ==> Afected example1
> > >
> > > pointcut examples(ClassX x) :
> > > execution(public * ParametersInMethodCalls.*(..))
> > > && args(*, x);
> > >
> > > ==> Affect nothing
> > >
> > > The important thing to note is that all the methods I want
> > to pick out
> > > have the common input of ClassX, but there is an
> > indeterminate number
> > > of other parameters to these methods. Furthermore, I would
> > prefer to
> > > avoid having to change the underlying code as it affects a
> > large body
> > > of code.
> > >
> > > Thanks in advance,
> > >
> > > Ron DiFrango
> > >
> > >
> > **********************************************************************
> > > ****
> > > The information transmitted herewith is sensitive
> > information intended
> > only
> > > for use by the individual or entity to which it is addressed. If the
> > reader
> > > of this message is not the intended recipient, you are
> > hereby notified
> > that
> > > any review, retransmission, dissemination, distribution, copying or
> > > other use of, or taking of any action in reliance upon this
> > > information is strictly prohibited. If you have received this
> > > communication in error, please contact the sender and delete the
> > > material from your computer.
> > > _______________________________________________
> > > aspectj-users mailing list
> > > aspectj-users@xxxxxxxxxxx
> > > http://dev.eclipse.org/mailman/listinfo/aspectj-users
> > >
> >
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> > http://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
> > **************************************************************
> > ************
> > The information transmitted herewith is sensitive information
> > intended only
> > for use by the individual or entity to which it is addressed.
> > If the reader
> > of this message is not the intended recipient, you are hereby
> > notified that
> > any review, retransmission, dissemination, distribution,
> > copying or other
> > use of, or taking of any action in reliance upon this information is
> > strictly prohibited. If you have received this communication in error,
> > please contact the sender and delete the material from your computer.
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> > http://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
> > **************************************************************
> > ************
> > The information transmitted herewith is sensitive information
> > intended only
> > for use by the individual or entity to which it is addressed.
> > If the reader
> > of this message is not the intended recipient, you are hereby
> > notified that
> > any review, retransmission, dissemination, distribution,
> > copying or other
> > use of, or taking of any action in reliance upon this information is
> > strictly prohibited. If you have received this communication in error,
> > please contact the sender and delete the material from your computer.
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> > http://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
>
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>
> **************************************************************************
> The information transmitted herewith is sensitive information intended only
> for use by the individual or entity to which it is addressed. If the reader
> of this message is not the intended recipient, you are hereby notified that
> any review, retransmission, dissemination, distribution, copying or other
> use of, or taking of any action in reliance upon this information is
> strictly prohibited. If you have received this communication in error,
> please contact the sender and delete the material from your computer.
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>