com.undefinedlabs.scope.coverage.instrumentation.CoverageMethodVisitor Maven / Gradle / Ivy
package com.undefinedlabs.scope.coverage.instrumentation;
import static net.bytebuddy.jar.asm.Opcodes.INVOKEINTERFACE;
import static net.bytebuddy.jar.asm.Opcodes.INVOKESTATIC;
import com.undefinedlabs.scope.logger.ScopeLogger;
import com.undefinedlabs.scope.logger.ScopeLoggerResolver;
import net.bytebuddy.jar.asm.Label;
import net.bytebuddy.jar.asm.MethodVisitor;
public class CoverageMethodVisitor extends MethodVisitor {
private static final ScopeLogger LOGGER = ScopeLoggerResolver.INSTANCE.get();
private final String className;
public CoverageMethodVisitor(String className, MethodVisitor methodVisitor) {
super(CoverageInstrumenterUtils.ASM_API_VERSION, methodVisitor);
this.className = className;
}
@Override
public void visitLineNumber(int line, Label start) {
final String payload = this.className + ";" + line;
mv.visitMethodInsn(
INVOKESTATIC,
"com/undefinedlabs/scope/coverage/GlobalCoverageReporter",
"get",
"()Lcom/undefinedlabs/scope/coverage/CoverageReporter;",
false);
mv.visitLdcInsn(payload);
mv.visitMethodInsn(
INVOKEINTERFACE,
"com/undefinedlabs/scope/coverage/CoverageReporter",
"report",
"(Ljava/lang/String;)V",
true);
mv.visitLineNumber(line, start);
LOGGER.trace(">> Class: " + this.className + ", Line: " + line);
}
}