/**
* 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();
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 ->
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;
}
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;
}
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() {