[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
RE: [aspectj-users] Parameters
|
Mumble, I should have checked that before sending mail.
But it seems odd for this to generate a compiler warning. When pointcuts
don't match, they usually just don't match. They don't issue a warning
that says they might match, if only things were a little different.
This probably requires re-examination at some point.
> -----Original Message-----
> From: aspectj-users-admin@xxxxxxxxxxx
> [mailto:aspectj-users-admin@xxxxxxxxxxx] On Behalf Of Wes Isberg
> Sent: Wednesday, August 20, 2003 11:50 AM
> To: aspectj-users@xxxxxxxxxxx
> Subject: Re: [aspectj-users] Parameters
>
>
> Works for me in AspectJ 1.0; see below.
>
> For Gregor's case "foo(Type, Type)", the compiler issues
> an error message about incompatible bindings.
>
> Wes
>
> ----- output
> src $ aspectj-1.0 -d classes -classpath $ajrt Args.java
> src $ j4 -classpath "classes;$ajrt" Args
> call(void Args.one(String)): Hello, World!
> execution(void Args.one(String)): Hello, World!
> call(void Args.first(String, int, long)): Hello, World!
> execution(void Args.first(String, int, long)): Hello, World!
> call(void Args.middle(int, String, long)): Hello, World!
> execution(void Args.middle(int, String, long)): Hello, World!
> call(void Args.last(int, long, String)): Hello, World!
> execution(void Args.last(int, long, String)): Hello, World!
> call(void java.io.PrintStream.println(String)): Hello, World!
> Hello, World!
>
> ----- Args.java
>
> public class Args {
> public static void main(String[] a) {
> one("Hello, World!");
> }
> static void none() {
> throw new Error("here");
> }
> static void one(String s) {
> first(s, 0, 0l);
> }
> static void first(String s, int i, long j) {
> middle(i, s, j);
> }
> static void middle(int i, String s, long j) {
> last(i, j, s);
> }
> static void last(int i, long j, String s) {
> System.out.println(s);
> }
> // would get compiler error here
> // static void last(String s, String t) {
> // System.out.println(s);
> // }
> }
> aspect A {
> before(String s) : !within(A) && args(..,s,..) {
> System.out.println(thisJoinPointStaticPart + ": " + s);
> }
> }
>
> DiFrango, Ron wrote:
> > 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
> >
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>