Thanks Andy, Not quite certain what I was doing wrong, but I played around with it and it works now. I will have to go back in version history to compare before I can say for certain what was wrong. Do not have the patience for that right now.
-Bhaskar On Fri, May 21, 2010 at 3:19 PM, Andy Clement <[email protected]> wrote: > Same program in annotation style, it works too... > > import java.lang.annotation.Retention; > import java.lang.annotation.RetentionPolicy; > import java.util.Collections; > import java.util.List; > > import org.aspectj.lang.annotation.Aspect; > import org.aspectj.lang.annotation.Before; > import org.aspectj.lang.annotation.Pointcut; > > @Retention(RetentionPolicy.RUNTIME) > @interface RuleSet { > } > > @Retention(RetentionPolicy.RUNTIME) > @interface Category { > } > > @Aspect > class Watcher { > �...@pointcut("execution(public java.util.List<Health> > getHealth(AggregateInfo))") > public void computationOfHealth() { > } > > �...@before("computationOfHealth()") > public void before1() { > System.out.println("advice on getHealth"); > } > > �...@pointcut("execution(@Category * *(..)) && > cflowbelow(computationOfHealth()) && @annotation(category)") > public void category(Category category) { > } > > �...@before("category(category)") > public void before2(Category category) { > System.out.println("advice on @Category tagged method running > in > cflow of getHealth"); > System.out.println("category=" + category); > } > > �...@pointcut("execution(@RuleSet * *(..)) && cflowbelow(category(c)) && > @annotation(rs)") > public void ruleset(RuleSet rs, Category c) { > } > > �...@before("ruleset(rs,c)") > public void before3(RuleSet rs, Category c) { > System.out > .println("advice on @RuleSet tagged method > running in cflow of > something tagged @Category which is in the cflow of getHealth"); > System.out.println("ruleset=" + rs + " category=" + c); > } > > } > > public class AA { > > �...@category > public void computationMethod() { > System.out.println("@Category tagged method running"); > doSomething(); > } > > �...@ruleset > public void doSomething() { > System.out.println("@RuleSet tagged method running"); > } > > public List<Health> getHealth(AggregateInfo ai) { > System.out.println(">getHealth"); > doSomething(); // not advised, not in the cflow of an > @Category tagged thing > computationMethod(); // called in the cflow of getHealth() > doSomething(); // not advised, not in the cflow of an > @Category tagged thing > System.out.println(">getHealth"); > return Collections.emptyList(); > } > > public static void main(String[] args) { > AA aa = new AA(); > aa.computationMethod(); > Object o = aa.getHealth(null); > } > } > > class AggregateInfo { > } > > class Health { > } > > Andy > > On 21 May 2010 15:14, Andy Clement <[email protected]> wrote: >> This complete program works for me. Can you perhaps try code style >> instead of annotation style? >> The pointcut is as I wrote in my previous email. >> >> --- >> import java.lang.annotation.Retention; >> import java.lang.annotation.RetentionPolicy; >> import java.util.Collections; >> import java.util.List; >> >> @Retention(RetentionPolicy.RUNTIME) >> @interface RuleSet {} >> >> @Retention(RetentionPolicy.RUNTIME) >> @interface Category {} >> >> aspect Watcher { >> pointcut computationOfHealth(): execution(public List<Health> >> getHealth(AggregateInfo)); >> >> before(): computationOfHealth() {System.out.println("advice on >> getHealth");} >> >> pointcut category(Category category): execution(@Category * *(..)) && >> cflowbelow(computationOfHealth()) && @annotation(category); >> >> before(Category category): category(category) { >> System.out.println("advice on @Category tagged method running >> in >> cflow of getHealth"); >> System.out.println("category="+category); >> } >> >> pointcut ruleset(RuleSet rs, Category c): execution(@RuleSet * *(..)) >> && cflowbelow(category(c)) && @annotation(rs); >> >> before(RuleSet rs, Category c): ruleset(rs,c) { >> System.out.println("advice on @RuleSet tagged method running >> in >> cflow of something tagged @Category which is in the cflow of >> getHealth"); >> System.out.println("ruleset="+rs+" category="+c); >> } >> >> } >> >> public class AA { >> >> �...@category >> public void computationMethod() { >> System.out.println("@Category tagged method running"); >> doSomething(); >> } >> >> �...@ruleset >> public void doSomething() { >> System.out.println("@RuleSet tagged method running"); >> } >> >> public List<Health> getHealth(AggregateInfo ai) { >> System.out.println(">getHealth"); >> doSomething(); // not advised, not in the cflow of an >> @Category tagged thing >> computationMethod(); // called in the cflow of getHealth() >> doSomething(); // not advised, not in the cflow of an >> @Category tagged thing >> System.out.println(">getHealth"); >> return Collections.emptyList(); >> } >> >> public static void main(String[] args) { >> AA aa = new AA(); >> aa.computationMethod(); >> Object o = aa.getHealth(null); >> } >> } >> >> class AggregateInfo {} >> class Health {} >> --- >> >> Andy >> >> On 21 May 2010 14:20, Bhaskar Maddala <[email protected]> wrote: >>> I thought I did try that, however I did again just to be certain >>> >>> [iajc] error at AuditorPointcutCaptures.java::0 incompatible >>> number of arguments to pointcut, expected 2 found 0 >>> >>> It is interesting that I get a similar error >>> >>> [iajc] [error 0]: error at audit/AuditorPointcutCaptures.java::0 >>> incompatible number of arguments to pointcut, expected 1 found 0 >>> >>> when I try >>> @Pointcut("execution(@RuleSet * *(..)) && @annotation(rs)") >>> public void ruleset(RuleSet rs) { >>> } >>> >>> But I cannot track that down either and this >>> >>> @Pointcut("execution(@Category * *(..)) && >>> cflowbelow(computationOfHealth()) && @annotation(category)") >>> public void category(Category category) { >>> } >>> >>> works fine, so I am flummoxed. >>> >>> -Bhaskar >>> >>> >>> On Fri, May 21, 2010 at 2:10 PM, Andy Clement <[email protected]> >>> wrote: >>>> I haven't tried out this code in a real testcase, but perhaps >>>> something like this: >>>> >>>> @Pointcut("execution(@RuleSet * *(..)) && cflowbelow(category(c)) && >>>> @annotation(rs)") >>>> public void ruleset(RuleSet rs, Category c) { >>>> >>>> Andy >>>> >>>> On 21 May 2010 13:56, Bhaskar Maddala <[email protected]> wrote: >>>>> Hello, >>>>> >>>>> I am trying to write a few point cuts and capture context and am >>>>> having trouble capturing the necessary context >>>>> >>>>> Capture the execution pointcut for the Calculation.getHealth JP >>>>> method invocation >>>>> �...@pointcut("execution(public java.util.List<metrics.Health> >>>>> metrics.Calculation.getHealth(metrics.AggregateInfo))") >>>>> public void computationOfHealth() { >>>>> } >>>>> >>>>> execution of any methods with the @Category annotation in the >>>>> cflowbelow computationOfHealth capture the annotation >>>>> �...@pointcut("execution(@Category * *(..)) && >>>>> cflowbelow(computationOfHealth()) && @annotation(category)") >>>>> public void category(Category category) { >>>>> } >>>>> >>>>> Require help here- >>>>> execution of any methods with the @RuleSet annotation in the >>>>> cflowbelow category >>>>> I would like to capture the ruleset (and if possible) the Category >>>>> annotation >>>>> @Pointcut("execution(@RuleSet * *(..)) && >>>>> cflowbelow(category(Category)) && @annotation(rs)") >>>>> public void ruleset(RuleSet rs) { >>>>> } >>>>> >>>>> I have tried a couple of different options >>>>> >>>>> Not what I want but worth a shot >>>>> @Pointcut("execution(@RuleSet * *(..)) && @annotation(rs)") >>>>> and >>>>> @Pointcut("execution(@RuleSet * *(..)) && >>>>> cflowbelow(category(Category)) && @annotation(rs)") >>>>> with the error message >>>>> [iajc] MessageHolder: (6 weaveinfo) (530 info) (1 error) >>>>> [iajc] [error 0]: error at >>>>> audit/AuditorPointcutCaptures.java::0 incompatible number of arguments >>>>> to pointcut, expected 1 found 0 >>>>> >>>>> Assistance much appreciated. >>>>> >>>>> Thanks >>>>> Bhaskar >>>>> _______________________________________________ >>>>> aspectj-users mailing list >>>>> [email protected] >>>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users >>>>> >>>> _______________________________________________ >>>> aspectj-users mailing list >>>> [email protected] >>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users >>>> >>> _______________________________________________ >>> aspectj-users mailing list >>> [email protected] >>> https://dev.eclipse.org/mailman/listinfo/aspectj-users >>> >> > _______________________________________________ > aspectj-users mailing list > [email protected] > https://dev.eclipse.org/mailman/listinfo/aspectj-users > _______________________________________________ aspectj-users mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/aspectj-users
