Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Guidaance on Cflow usage

Donal,

You need to use cflowbelow() pointcut to exclude the join point
itself. 

There is a sample chapter (chapter 3) from my book posted that 
covers control-flow based pointcuts:
http://www.manning.com/laddad/

-Ramnivas

--- Donal Lafferty <laffertd@xxxxxxxxx> wrote:
> Hi!
> 
> I'm having trouble coming to grasps with cflow pointcuts.  In the
> example below, I was surprised to find out that cflow advice is
> included
> in the set of cflow join points, which leads to an infinite
> recursion.
> Although I'm tempted to submit this as a bug, I'm not wholly
> convinced I
> understand what I'm doing.  Moreover, the bug submission system is
> down.
> 
> Any comments on the problem are more than welcome!
> 
> Cheers,
> 
> 
> DL
> 
> 
> WordCounterDemo.java
> 
> class WordCounterDemo 
> {
>   static String[] smallSample= {"This", "demos", "infinite", "loop",
> "in", 
>                                  "cflow", "before", "advice"};
> 
>   public static void main(String[] args) {
>     WordCounter wordCounter = new WordCounter();
>     String word;
>     String[] wordList1 = smallSample;
>     int words = 0;
>     for (int i = 0; i < wordList1.length; i++) {
>       word = smallSample[i];
>       System.out.println("Adding " + word +", as word #" + 
> (++words));
>       wordCounter.Add(word);
>     }
>   }
> }
> 
> WordCounter.java
> 
> public class WordCounter {
>   public void Add(String word) {
>     System.out.println("Add entry, word = "+word.toString());
>   }
> }
> 
> Cflow.aj
> 
> public aspect Cflow {
>   pointcut AddCflow():  cflow( execution( * WordCounter.Add( * )));
> 
>   // In AspectJ 1.0.6 and 1.1 here is an infinite loop here, because
> the
> 
>   // before advice is itself considered a join point in the cflow.
>   before(): AddCflow() { System.out.println("Before advice call" ); }
> }
> 
> CflowWeave.lst
> 
> WordCounterDemo.java
> WordCounter.java
> Cflow.aj
> 
> 
> Which compiles with:
> 
> ajc -argfile CflowWeave.lst
> 
> And runs with:
> 
> java -classpatch "%CLASSPATH;./" WordCounterDemo
> 
> Gives the output
> 
> Adding This, as word#1
> Exception in thread "main" java.langStackOverflowError
> 
> 
> 
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users


__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com


Back to the top