in modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java [392:419]
private void rewrite(final Pair<String, String> key, final Set<ClassWrapper> toMerge) throws IOException {
final String target = copy(key, toMerge.iterator().next());
env.info("Merging %s identical %s implementations with constructor %s to type %s", toMerge.size(),
key.getLeft(), key.getRight(), target);
final Map<String, Map<String, ClassWrapper>> byEnclosingClass = byEnclosingClass(toMerge);
for (final Map.Entry<String, Map<String, ClassWrapper>> entry : byEnclosingClass.entrySet()) {
final String outer = entry.getKey();
env.debug("Normalizing %s inner classes of %s", entry.getValue().size(), outer);
final Map<String, String> classMap = new HashMap<>();
for (final String merged : entry.getValue().keySet()) {
classMap.put(merged, target);
}
final Remapper remapper = new SimpleRemapper(classMap);
try (InputStream enclosingBytecode = env.getClassfile(outer).getInputStream()) {
final ClassReader reader = new ClassReader(enclosingBytecode);
reader.accept(new Remap(new WriteClass(reader), remapper, classMap, entry.getValue()), 0);
}
for (final String merged : entry.getValue().keySet()) {
if (env.deleteClassfile(merged)) {
env.debug("Deleted class %s", merged);
} else {
env.warn("Unable to delete class %s", merged);
}
}
}
}