]> source.dussan.org Git - aspectj.git/commitdiff
134471 - incremental structure model repair code overhaul - the key new behaviour...
authoraclement <aclement>
Thu, 11 May 2006 07:32:20 +0000 (07:32 +0000)
committeraclement <aclement>
Thu, 11 May 2006 07:32:20 +0000 (07:32 +0000)
weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java

index 381c72b651a555841429ea73dcb4ac74cbc10b18..aa043700bd8eabf9d6b448b1a4950b4dc9f3a39c 100644 (file)
@@ -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, "");