diff options
Diffstat (limited to 'weaver')
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java b/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java index 815becde0..ee232d082 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java @@ -1297,6 +1297,10 @@ public class BcelWeaver { // resolve it if the caller could not pass in the resolved type resolvedTypeToWeave = world.resolve(typeToWeave); } +// if (resolvedTypeToWeave.isTypeHierarchyComplete()) { +// typesForWeaving.remove(typeToWeave); +// return; +// } ResolvedType superclassType = resolvedTypeToWeave.getSuperclass(); String superclassTypename = (superclassType == null ? null : superclassType.getName()); @@ -1319,7 +1323,11 @@ public class BcelWeaver { } ContextToken tok = CompilationAndWeavingContext.enteringPhase(CompilationAndWeavingContext.PROCESSING_DECLARE_PARENTS, resolvedTypeToWeave.getName()); - weaveParentTypeMungers(resolvedTypeToWeave); + // If A was processed before B (and was declared 'class A implements B') then there is no need to complete B again, it + // will have been done whilst processing A. + if (!resolvedTypeToWeave.isTypeHierarchyComplete()) { + weaveParentTypeMungers(resolvedTypeToWeave); + } CompilationAndWeavingContext.leavingPhase(tok); typesForWeaving.remove(typeToWeave); resolvedTypeToWeave.tagAsTypeHierarchyComplete(); |