diff options
author | aclement <aclement> | 2006-05-11 07:32:20 +0000 |
---|---|---|
committer | aclement <aclement> | 2006-05-11 07:32:20 +0000 |
commit | 60033cf18f34c7eab52eaa0638876fbb1ee55911 (patch) | |
tree | 95715a9a7b42df3b88167a250ee3d57ac43fa2ad | |
parent | cf19fbaa4da5a09e7325e612eb038b8220d34368 (diff) | |
download | aspectj-60033cf18f34c7eab52eaa0638876fbb1ee55911.tar.gz aspectj-60033cf18f34c7eab52eaa0638876fbb1ee55911.zip |
134471 - incremental structure model repair code overhaul - the key new behaviour. At the start of weaving we remove relationships.
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java b/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java index 381c72b65..aa043700b 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java @@ -45,6 +45,7 @@ import java.util.zip.ZipOutputStream; import org.aspectj.apache.bcel.classfile.ClassParser; import org.aspectj.apache.bcel.classfile.JavaClass; +import org.aspectj.asm.AsmManager; import org.aspectj.bridge.IMessage; import org.aspectj.bridge.IProgressListener; import org.aspectj.bridge.ISourceLocation; @@ -124,6 +125,7 @@ public class BcelWeaver implements IWeaver { private Manifest manifest = null; private boolean needToReweaveWorld = false; + private boolean isBatchWeave = true; private List shadowMungerList = null; // setup by prepareForWeave private List typeMungerList = null; // setup by prepareForWeave private List lateTypeMungerList = null; // setup by prepareForWeave @@ -429,6 +431,10 @@ public class BcelWeaver implements IWeaver { // ---- weave preparation + public void setIsBatchWeave(boolean b) { + isBatchWeave=b; + } + public void prepareForWeave() { needToReweaveWorld = xcutSet.hasChangedSinceLastReset(); @@ -989,6 +995,14 @@ public class BcelWeaver implements IWeaver { Collection wovenClassNames = new ArrayList(); IWeaveRequestor requestor = input.getRequestor(); + for (Iterator i = input.getClassFileIterator(); i.hasNext(); ) { + UnwovenClassFile classFile = (UnwovenClassFile)i.next(); + if (AsmManager.isCreatingModel() && !isBatchWeave) { + // remove all relationships where this file being woven is the target of the relationship + AsmManager.getDefault().removeRelationshipsTargettingThisType(classFile.getClassName()); + } + } + // special case for AtAspectJMungerOnly - see #113587 if (input.isApplyAtAspectJMungersOnly()) { ContextToken atAspectJMungersOnly = CompilationAndWeavingContext.enteringPhase(CompilationAndWeavingContext.PROCESSING_ATASPECTJTYPE_MUNGERS_ONLY, ""); |