ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
try {
// chain class visitors
ClassVisitor classVisitor = cw;
ConstantPool cp;
if (COMPACT_CONSTANTS) {
cp = new ConstantPool();
classVisitor = new ClassConstantsCollector(classVisitor, cp);
}
classVisitor = new NameTranslatorClassVisitor(classVisitor, NameTranslator.getGeneralTranslator());
classVisitor = new ClassWeaver(classVisitor,
lazy, stripAttributes, target, listener);
classVisitor = new NameTranslatorClassVisitor(classVisitor, NameTranslator.getHarmonyTranslator());
// StringBuilder translation will be done before general weaving and
// mirror translation: trimToSize() calls will be processed correctly
// and no need to do translations in general weaving process
classVisitor = new NameTranslatorClassVisitor(classVisitor, NameTranslator.getStringBuilderTranslator());
if (stripSignatures) {
classVisitor = new SignatureStripper(classVisitor);
}
cr.accept(classVisitor, CUSTOM_ATTRIBUTES, ClassReader.EXPAND_FRAMES);
if (COMPACT_CONSTANTS) {
Set<Constant> constants = new TreeSet<Constant>(new ConstantComparator());
constants.addAll(cp.values());
cr = new ClassReader(cw.toByteArray());
cw = new ClassWriter(0);
for(Constant c: constants) {
c.write(cw);