Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [aspectj-users] [Newbie] Pick out a call / execution only in the hierarchy leafs

sorry, use "target" instead of "withincode"! we don't have a method
pattern here...

> -----Original Message-----
> From: aspectj-users-admin@xxxxxxxxxxx 
> [mailto:aspectj-users-admin@xxxxxxxxxxx] On Behalf Of Bruno Feurer
> Sent: Thursday, July 22, 2004 11:09
> To: aspectj-users@xxxxxxxxxxx
> Subject: RE: [aspectj-users] [Newbie] Pick out a call / 
> execution only in the hierarchy leafs
> 
> 
> Hi Petecan,
> 
> try ...
> 
>    public pointcut getOptionsPointcut() :
>        call(public String[] OptionHandler.getOptions())
>        && withincode(Randomizable+)
>      ;
> 
> As stated in the Programming Guide 
> (http://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/aspec
> tj-home/do
> c/progguide/language-joinPoints.html#d0e1288) calls should 
> not capture super calls.
> 
> Bruno
> 
> > -----Original Message-----
> > From: aspectj-users-admin@xxxxxxxxxxx
> > [mailto:aspectj-users-admin@xxxxxxxxxxx] On Behalf Of Petecan
> > Sent: Thursday, July 22, 2004 11:30
> > To: aspectj-users@xxxxxxxxxxx
> > Subject: [aspectj-users] [Newbie] Pick out a call / execution 
> > only in the hierarchy leafs
> > 
> > 
> > Hi all,
> > 
> > I have the following two interfaces:
> > 
> >   /*****************************/
> >   public Interface OptionHandler{
> >      ...
> >      String[] getOptions();
> >   }
> > 
> >   public Interface Randomizable{
> >     ...
> >   }
> >   /*****************************/
> > 
> > And I want to advice all calls to the 
> OptionHandler.getOptions method
> > within Randomizable & OptionHandler implementing classes. I use the 
> > following pointcut and advice:
> > 
> >   /*****************************/
> >   public pointcut getOptionsPointcut() :
> >       execution(public String[] OptionHandler.getOptions())
> >       && within(Randomizable+)
> >     ;
> > 
> >   String[] around() : getOptionsPointcut(){
> >     return Utils.appendOptions(getOption(), proceed());
> >   }
> >   /*****************************/
> > 
> > Now, given the following hierarchy:
> > 
> >    /*****************************/
> >   class A implements  OptionHandler, Randomizable{
> >       String[] getOptions(){
> >          ...
> >       }
> >    }
> > 
> >    class B extends A{
> >       String[] getOptions(){
> >          super.getOptions();
> >          ...
> >       }
> >    }
> >   /*****************************/
> > 
> > The poincut captures both the getOptions() execution in A and
> > B, and I 
> > want it to capture only the execution in the "leaf" class of the 
> > hierarchy (class B, in this case). In other words, the 
> > A.getOptions must 
> > be picked out only if it is directly invoked but not if it 
> is called 
> > from a redefining method via the super reference.  How can I 
> > do that?. 
> > Is there a better or more elegant way of defining the pointcut to 
> > capture these joint points?.
> > 
> > Best Regards
> > 
> > Santi.
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> > http://dev.eclipse.org/mailman/listinfo/aspect> j-users
> > 
> 
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
> 



Back to the top