[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-dev] Question about aspectj weaver

Thank you for your answer Jim.

I was all the time in misbelief that aspectj weaver is using ASM and
StructureModelUtil (used by GUIs for Outline Views) for weaving the class

I hope I've interpreted your answer correctly:
The aspectj weaver is working with pointcuts declared as .class attributes
and advices declared as common java method following special naming


On Fri, Aug 08, 2003 at 02:30:36PM -0700, Jim Hugunin wrote:
> Ivica Aracic wrote:
> >I have a question about the aspectj weaver:
> >What does the weaver take as input?
> >How does it know where to insert the advices?
> This question deserves a paper to answer it.  For now, you'll have to 
> settle for the following short answer.
> Each piece of advice in an aspect is associated with a pointcut.  This 
> pointcut is stored in an attribute on the methods corresponding to each 
> piece of advice.  Before weaving, all of these pieces of advice are 
> gathered into one large list.
> Each .class file is woven independently.  A .class file is woven by the 
> following steps:
> 1. Collect all of the joinpoint shadows in the .class file.  For every 
> dynamic joinpoint in the AspectJ language model, there is a 
> corresponding static shadow of that joinpoint in the bytecode.  For 
> example, every method call joinpoint has an INVOKE bytecode as its 
> static shadow.  Some joinpoints (such as initialization) have much more 
> complicated static shadows.
> 2. Each piece of advice is matched to each static shadow.  There are 
> three results possible from this match.
> a. Never matches -- in which case nothing is done to the shadow
> b. Always matches -- in which case the advice is woven into this 
> joinpoint shadow
> c. Sometimes matches -- in which case the advice is woven into the 
> shadow along with the minimal dynamic tests to determine if any 
> particular joinpoint in the actual running program matches the advice. 
> The simplest example of sometimes matches is when the pointcut uses 
> if(test()).
> 3. If any advice matched any static shadows in the .class file, then the 
> transformed .class file is written out, otherwise it is left unchanged.
> See org.aspectj.weaver.bcel.BcelClassWeaver and BcelShadow for the two 
> primary classes involved in this process.
> Note: This explanation ignores the implementations of inter-type 
> declarations completely.  It also ignores performance optimizations such 
> as fast-match that speed up the weaving process.
> -Jim
> _______________________________________________
> aspectj-dev mailing list
> aspectj-dev@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-dev

Ivica Aracic
ICQ 58372826 (macross)