aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2006-05-11 07:32:20 +0000
committeraclement <aclement>2006-05-11 07:32:20 +0000
commit60033cf18f34c7eab52eaa0638876fbb1ee55911 (patch)
tree95715a9a7b42df3b88167a250ee3d57ac43fa2ad
parentcf19fbaa4da5a09e7325e612eb038b8220d34368 (diff)
downloadaspectj-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.java14
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, "");