summaryrefslogtreecommitdiffstats
path: root/weaver
diff options
context:
space:
mode:
Diffstat (limited to 'weaver')
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java10
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();