All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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);
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy