1. BcelWeaver.prepareForWeave()
-> collect all shadowMungers into shadowMungerList, where shadowMungers
are advices and checkers.
2. BcelWeaver.weave(..)
-> apply fastMatch, delete obvious mismatching mungers
-> if the set of mungers is not empty, call BcelClassWeaver.weave(..)
3. BcelClassWeaver.weave() -> iterate through each shadow, try matching for each munger.
...
Creating ShadowMungers,
===================
[BcelWeaver]
xcutSet.addOrReplaceAspect(type);
[CrosscuttingMembersSet]
aspectType.collectCrosscuttingMembers(inWeavingPhase);
[ResolvedType]
crosscuttingMembers.addShadowMungers(collectShadowMungers());
...
acc.addAll(ty.getDeclaredShadowMungers());
** Here, only advices are added as ShadowMunger **
shadowMungerList = xcutSet.getShadowMungers();
Fast match before full match, deleting unmatched ShadowMungers
===============================================
[BcelWeaver]
fastMatch(shadowMungerList, classType.getResolvedTypeX())
but interestingly: FastMatchInfo info = new FastMatchInfo(type, null);
don't know the effect of applying fastmatch here...
in BcelWeaver.weave(UnwovenClassFile classFile, BcelObjectType classType, boolean dump),
if shadowMungers is empty, that is, there are no advices and checkers, shadows will not even be created.