def coverage_java_test(name, data = [], jvm_flags = [], visibility = None, test_excluded_packages = {}, **kwargs):
    jacoco_jvm_agent = "//prebuilts/tools/common/jacoco:agent"

    jacoco_jvm_flag = "-javaagent:$(location " + jacoco_jvm_agent + ")=destfile=$$TEST_UNDECLARED_OUTPUTS_DIR/coverage/" + name + "_tests_jacoco.exec"

    # the test needs to be visible to the results workspace it can use the deploy jar
    if visibility == None:
        visibility = ["@results//:__pkg__"]
    elif "//visibility:public" not in visibility:
        visibility += ["@results//:__pkg__"]

    native.java_test(
        name = name,
        data = data + select({
            "//tools/base/bazel:agent_coverage": [jacoco_jvm_agent],
            "//conditions:default": [],
        }),
        jvm_flags = jvm_flags + select({
            "//tools/base/bazel:agent_coverage": [jacoco_jvm_flag],
            "//conditions:default": [],
        }),
        visibility = visibility,
        **kwargs
    )

def coverage_baseline(name, srcs, jar = None, tags = None):
    # some rules produce multiple jars under their base name so this lets us overload if necessary
    if not jar:
        jar = name

    native.alias(
        name = name + "_coverage.baseline.jar",
        actual = jar,
        visibility = ["@baseline//:__pkg__"],
    )

    tags = tags if tags else []
    tags += [] if "no_mac" in tags else ["no_mac"]
    tags += [] if "no_windows" in tags else ["no_windows"]

    cov_sources_tags = tags + ([] if "coverage-sources" in tags else ["coverage-sources"])
    native.genrule(
        name = name + "_coverage.baseline.srcs",
        srcs = srcs,
        outs = [name + ".coverage.baseline.srcs"],
        tags = cov_sources_tags,
        cmd = "printf '$(RULEDIR)/%s\n' {} | sed -e 's%^$(BINDIR)/%%' >$@".format(" ".join(srcs)),
    )

    native.genrule(
        name = name + "_coverage.baseline.srcs.filtered",
        tools = ["@cov//:ignore_files_filter"],
        srcs = [name + "_coverage.baseline.srcs"],
        outs = [name + ".coverage.baseline.srcs.filtered"],
        tags = tags,
        cmd = "python $(location @cov//:ignore_files_filter) <$< >$@",
        visibility = ["@baseline//:__pkg__"],
    )

def coverage_java_library(name, srcs = [], tags = [], **kwargs):
    native.java_library(
        name = name,
        srcs = srcs,
        javacopts = kwargs.pop("javacopts", []) + ["--release", "8"],
        tags = tags,
        **kwargs
    )

    coverage_baseline(
        name = name,
        srcs = srcs,
        tags = tags,
    )
