Browse Source

intelligent use of match info determined earlier

tags/V1_6_7
aclement 14 years ago
parent
commit
fd52f6369e
1 changed files with 36 additions and 23 deletions
  1. 36
    23
      weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java

+ 36
- 23
weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java View File

@@ -3072,39 +3072,52 @@ class BcelClassWeaver implements IClassWeaver {
ContextToken shadowMatchToken = CompilationAndWeavingContext.enteringPhase(
CompilationAndWeavingContext.MATCHING_SHADOW, shadow);
boolean isMatched = false;
for (ShadowMunger munger : shadowMungers) {
ContextToken mungerMatchToken = CompilationAndWeavingContext.enteringPhase(
CompilationAndWeavingContext.MATCHING_POINTCUT, munger.getPointcut());
if (munger.match(shadow, world)) {
shadow.addMunger(munger);
isMatched = true;
if (shadow.getKind() == Shadow.StaticInitialization) {
clazz.warnOnAddedStaticInitializer(shadow, munger.getSourceLocation());

Shadow.Kind shadowKind = shadow.getKind();
List<ShadowMunger> candidateMungers = perKindShadowMungers[shadowKind.getKey()];

// System.out.println("Candidates " + candidateMungers);
if (candidateMungers != null) {
for (ShadowMunger munger : candidateMungers) {

ContextToken mungerMatchToken = CompilationAndWeavingContext.enteringPhase(
CompilationAndWeavingContext.MATCHING_POINTCUT, munger.getPointcut());
if (munger.match(shadow, world)) {
shadow.addMunger(munger);
isMatched = true;
if (shadow.getKind() == Shadow.StaticInitialization) {
clazz.warnOnAddedStaticInitializer(shadow, munger.getSourceLocation());
}
}
CompilationAndWeavingContext.leavingPhase(mungerMatchToken);
}
CompilationAndWeavingContext.leavingPhase(mungerMatchToken);
}

if (isMatched) {
shadowAccumulator.add(shadow);
if (isMatched) {
shadowAccumulator.add(shadow);
}
}
CompilationAndWeavingContext.leavingPhase(shadowMatchToken);
return isMatched;
} else {
boolean isMatched = false;
int max = shadowMungers.size();
for (int i = 0; i < max; i++) {
ShadowMunger munger = shadowMungers.get(i);
if (munger.match(shadow, world)) {
shadow.addMunger(munger);
isMatched = true;
if (shadow.getKind() == Shadow.StaticInitialization) {
clazz.warnOnAddedStaticInitializer(shadow, munger.getSourceLocation());

Shadow.Kind shadowKind = shadow.getKind();
List<ShadowMunger> candidateMungers = perKindShadowMungers[shadowKind.getKey()];

// System.out.println("Candidates at " + shadowKind + " are " + candidateMungers);
if (candidateMungers != null) {
for (ShadowMunger munger : candidateMungers) {
if (munger.match(shadow, world)) {
shadow.addMunger(munger);
isMatched = true;
if (shadow.getKind() == Shadow.StaticInitialization) {
clazz.warnOnAddedStaticInitializer(shadow, munger.getSourceLocation());
}
}
}
}
if (isMatched) {
shadowAccumulator.add(shadow);
if (isMatched) {
shadowAccumulator.add(shadow);
}
}
return isMatched;
}

Loading…
Cancel
Save