Skip to main content

[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
> 




Back to the top