package openeye.asm; import java.util.Collection; import openeye.Log; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; public class SingleClassTransformer extends ClassVisitor { private final Collection<MethodCodeInjector> methodInjectors; public SingleClassTransformer(ClassVisitor cv, String obfClassName, Collection<MethodCodeInjector> injectors) { super(Opcodes.ASM4, cv); this.methodInjectors = injectors; } @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor parent = super.visitMethod(access, name, desc, signature, exceptions); for (MethodCodeInjector injector : methodInjectors) if (injector.matcher.match(name, desc)) { Log.debug("Applying method transformer %s for method %s(%s)", injector.name, name, desc); return injector.createVisitor(parent); } return parent; } }