]> source.dussan.org Git - aspectj.git/commitdiff
263837: make reweavable field in BcelClassWeaver non-static
authoraclement <aclement>
Fri, 6 Feb 2009 00:15:57 +0000 (00:15 +0000)
committeraclement <aclement>
Fri, 6 Feb 2009 00:15:57 +0000 (00:15 +0000)
weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java
weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java
weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java

index 940cef5e22cdba9bef700eb259346f85c9db7c57..8d1ad6f8ae01e96d07d13e69983f3debd023e2a6 100644 (file)
@@ -94,9 +94,13 @@ class BcelClassWeaver implements IClassWeaver {
 
        /**
         * This is called from {@link BcelWeaver} to perform the per-class weaving process.
+        * 
         */
-       public static boolean weave(BcelWorld world, LazyClassGen clazz, List shadowMungers, List typeMungers, List lateTypeMungers) {
-               boolean b = new BcelClassWeaver(world, clazz, shadowMungers, typeMungers, lateTypeMungers).weave();
+       public static boolean weave(BcelWorld world, LazyClassGen clazz, List shadowMungers, List typeMungers, List lateTypeMungers,
+                       boolean inReweavableMode) {
+               BcelClassWeaver classWeaver = new BcelClassWeaver(world, clazz, shadowMungers, typeMungers, lateTypeMungers);
+               classWeaver.setReweavableMode(inReweavableMode);
+               boolean b = classWeaver.weave();
                // System.out.println(clazz.getClassName() + ", " +
                // clazz.getType().getWeaverState());
                // clazz.print();
@@ -118,8 +122,7 @@ class BcelClassWeaver implements IClassWeaver {
        private final List addedLazyMethodGens = new ArrayList();
        private final Set addedDispatchTargets = new HashSet();
 
-       // Static setting across BcelClassWeavers
-       private static boolean inReweavableMode = false;
+       private boolean inReweavableMode = false;
 
        private List addedSuperInitializersAsList = null; // List<IfaceInitList>
        private final Map addedSuperInitializers = new HashMap(); // Interface ->
@@ -3070,13 +3073,11 @@ class BcelClassWeaver implements IClassWeaver {
                return world;
        }
 
-       // Called by the BcelWeaver to let us know all BcelClassWeavers need to
-       // collect reweavable info
-       public static void setReweavableMode(boolean mode) {
+       public void setReweavableMode(boolean mode) {
                inReweavableMode = mode;
        }
 
-       public static boolean getReweavableMode() {
+       public boolean getReweavableMode() {
                return inReweavableMode;
        }
 
index 3a50e7c763053562563b6f8a75b0132ad9694145..97d462b12def9f8ed0be74b9e2b5d2bb629fe6cb 100644 (file)
@@ -116,7 +116,7 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                }
 
                if (changed && munger.changesPublicSignature()) {
-                       WeaverStateInfo info = weaver.getLazyClassGen().getOrCreateWeaverStateInfo(BcelClassWeaver.getReweavableMode());
+                       WeaverStateInfo info = weaver.getLazyClassGen().getOrCreateWeaverStateInfo(weaver.getReweavableMode());
                        info.addConcreteMunger(this);
                }
 
index 7ba56af665ebc53d0787bccfe23f1d675924eb21..f5298dd11724ce6ca0c2b120439793ed17ac33dc 100644 (file)
@@ -1729,7 +1729,8 @@ public class BcelWeaver {
                                boolean isChanged = false;
 
                                if (mightNeedToWeave)
-                                       isChanged = BcelClassWeaver.weave(world, clazz, shadowMungers, typeMungers, lateTypeMungerList);
+                                       isChanged = BcelClassWeaver.weave(world, clazz, shadowMungers, typeMungers, lateTypeMungerList,
+                                                       inReweavableMode);
 
                                if (mightNeedBridgeMethods)
                                        isChanged = BcelClassWeaver.calculateAnyRequiredBridgeMethods(world, clazz) || isChanged;
@@ -1841,13 +1842,8 @@ public class BcelWeaver {
        }
 
        public void setReweavableMode(boolean xNotReweavable) {
-               if (trace.isTraceEnabled())
-                       trace.enter("setReweavableMode", this, xNotReweavable);
                inReweavableMode = !xNotReweavable;
                WeaverStateInfo.setReweavableModeDefaults(!xNotReweavable, false, true);
-               BcelClassWeaver.setReweavableMode(!xNotReweavable);
-               if (trace.isTraceEnabled())
-                       trace.exit("setReweavableMode");
        }
 
        public boolean isReweavable() {