Java: depend on lcov merger as host
The lcov merger tool used in coverage by Bazel was being depended on in the target
configuration from the Java test rules instead of the host configuration. This
meant that the Java toolchain used in the target configuration would instrument
the lcov merger tool itself with Jacoco.
This was discovered while fixing #4685 because the instrumented lcov merger was
trying to generate a report in the execroot. Another effect of this bug
unnoticed until now was that we always generated an additional empty lcov file
during local coverage execution.
RELNOTES:none
PiperOrigin-RevId: 333471532
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaTestRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaTestRule.java
index 58ac8e4..f87503e 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaTestRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaTestRule.java
@@ -23,6 +23,7 @@
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
+import com.google.devtools.build.lib.analysis.config.HostTransition;
import com.google.devtools.build.lib.bazel.rules.java.BazelJavaRuleClasses.BaseJavaBinaryRule;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
@@ -55,7 +56,10 @@
.override(attr("use_testrunner", BOOLEAN).value(true))
.override(attr(":java_launcher", LABEL).value(JavaSemantics.JAVA_LAUNCHER))
// Input files for test actions collecting code coverage
- .add(attr(":lcov_merger", LABEL).value(BaseRuleClasses.getCoverageOutputGeneratorLabel()))
+ .add(
+ attr(":lcov_merger", LABEL)
+ .cfg(HostTransition.createFactory())
+ .value(BaseRuleClasses.getCoverageOutputGeneratorLabel()))
.add(
attr("$jacocorunner", LABEL)
.value(env.getToolsLabel("//tools/jdk:JacocoCoverageRunner")))