package bytecode; import java.io.Reader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; public class TrimBytecode extends BaseStreamingJarProcessor { public static void main(String[] args) { new TrimBytecode().go(args); } @Override public boolean hasConfig() { return false; } @Override public void loadConfig(Reader file) throws Exception { } @Override public ClassVisitor createClassVisitor(ClassVisitor parent) throws Exception { return new ClassVisitor(Opcodes.ASM5, parent) { ////////// Some mods rely on debug information //@Override //public void visitSource(String source, String debug) { //} @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { return new MethodVisitor(Opcodes.ASM5, super.visitMethod(access, name, desc, signature, exceptions)) { ////////// Some mods rely on debug information //@Override //public void visitLineNumber(int line, Label start) { //} @Override public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) { } @Override public void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack) { // frames are important, but not for diffing } }; } ////////// Some mods rely on outer/inner class information //@Override //public void visitInnerClass(String name, String outerName, String innerName, int access) { //} //@Override //public void visitOuterClass(String owner, String name, String desc) { //} }; } }