package bytecode;
import java.io.Reader;
import java.util.Properties;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.Opcodes;
public class AddOBFID extends BaseStreamingJarProcessor {
public static void main(String[] args) {
new AddOBFID().go(args);
}
Properties props = new Properties();
@Override
public void loadConfig(Reader file) throws Exception {
props.load(file);
}
@Override
public ClassVisitor createClassVisitor(ClassVisitor parent) throws Exception {
return new ClassVisitor(Opcodes.ASM5, parent) {
String className;
String obfid;
boolean isInterface;
@Override
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
className = name;
super.visit(version, access, name, signature, superName, interfaces);
obfid = props.getProperty(className);
isInterface = (access & Opcodes.ACC_INTERFACE) != 0;
}
@Override
public void visitEnd() {
if(obfid != null)
super.visitField((isInterface ? Opcodes.ACC_PUBLIC : Opcodes.ACC_PRIVATE) | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL, "__OBFID", "Ljava/lang/String;", null, obfid);
super.visitEnd();
}
};
}
}