Expose --experimental_use_toolchain_resolution_for_java_rules to skylark
for use in find_cpp_toolchain (see unknown commit).
PiperOrigin-RevId: 231865415
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
index 50e78cf..d03b125 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
@@ -17,6 +17,7 @@
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.analysis.PlatformOptions;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.skylark.SkylarkActionFactory;
import com.google.devtools.build.lib.analysis.skylark.SkylarkRuleContext;
@@ -265,4 +266,14 @@
+ "Please migrate to the JavaInfo constructor.");
}
}
+
+ @Override
+ public boolean isJavaToolchainResolutionEnabled(SkylarkRuleContext ruleContext)
+ throws EvalException {
+ return ruleContext
+ .getConfiguration()
+ .getOptions()
+ .get(PlatformOptions.class)
+ .useToolchainResolutionForJavaRules;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java
index b59e44e..e58531d 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java
@@ -177,12 +177,12 @@
throws EvalException;
@SkylarkCallable(
- name = "provider",
- structField = true,
- doc = "Returns the Java declared provider. <br>"
- + "The same value is accessible as <code>JavaInfo</code>. <br>"
- + "Prefer using <code>JavaInfo</code> in new code."
- )
+ name = "provider",
+ structField = true,
+ doc =
+ "Returns the Java declared provider. <br>"
+ + "The same value is accessible as <code>JavaInfo</code>. <br>"
+ + "Prefer using <code>JavaInfo</code> in new code.")
public ProviderApi getJavaProvider();
@SkylarkCallable(
@@ -543,36 +543,32 @@
throws EvalException;
@SkylarkCallable(
- name = "merge",
- doc = "Merges the given providers into a single JavaInfo.",
- parameters = {
- @Param(
- name = "providers",
- positional = true,
- named = false,
- type = SkylarkList.class,
- generic1 = JavaInfoApi.class,
- doc = "The list of providers to merge."
- ),
- }
- )
+ name = "merge",
+ doc = "Merges the given providers into a single JavaInfo.",
+ parameters = {
+ @Param(
+ name = "providers",
+ positional = true,
+ named = false,
+ type = SkylarkList.class,
+ generic1 = JavaInfoApi.class,
+ doc = "The list of providers to merge."),
+ })
public JavaInfoT mergeJavaProviders(SkylarkList<JavaInfoT> providers);
@SkylarkCallable(
- name = "make_non_strict",
- doc =
- "Returns a new Java provider whose direct-jars part is the union of both the direct and"
- + " indirect jars of the given Java provider.",
- parameters = {
- @Param(
- name = "java_info",
- positional = true,
- named = false,
- type = JavaInfoApi.class,
- doc = "The java info."
- ),
- }
- )
+ name = "make_non_strict",
+ doc =
+ "Returns a new Java provider whose direct-jars part is the union of both the direct and"
+ + " indirect jars of the given Java provider.",
+ parameters = {
+ @Param(
+ name = "java_info",
+ positional = true,
+ named = false,
+ type = JavaInfoApi.class,
+ doc = "The java info."),
+ })
public JavaInfoT makeNonStrict(JavaInfoT javaInfo);
@SkylarkCallable(
@@ -584,11 +580,24 @@
public ProviderApi getJavaToolchainProvider();
@SkylarkCallable(
- name = "JavaRuntimeInfo",
- doc =
- "The key used to retrieve the provider that contains information about the Java "
- + "runtime being used.",
- structField = true
- )
+ name = "JavaRuntimeInfo",
+ doc =
+ "The key used to retrieve the provider that contains information about the Java "
+ + "runtime being used.",
+ structField = true)
public ProviderApi getJavaRuntimeProvider();
+
+ @SkylarkCallable(
+ name = "is_java_toolchain_resolution_enabled_do_not_use",
+ documented = false,
+ parameters = {
+ @Param(
+ name = "ctx",
+ positional = false,
+ named = true,
+ type = SkylarkRuleContextApi.class,
+ doc = "The rule context."),
+ },
+ doc = "Returns true if --experimental_use_toolchain_resolution_for_java_rules is enabled.")
+ boolean isJavaToolchainResolutionEnabled(SkylarkRuleContextT ruleContext) throws EvalException;
}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
index 7a66a67..b9e3e80 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
@@ -138,4 +138,9 @@
public ProviderApi getJavaRuntimeProvider() {
return new FakeProviderApi();
}
+
+ @Override
+ public boolean isJavaToolchainResolutionEnabled(SkylarkRuleContextApi ruleContext) {
+ return false;
+ }
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
index bc2c2cf..539ec97 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
@@ -2317,4 +2317,42 @@
getConfiguredTarget("//a:r");
assertContainsEvent("java_common.JavaToolchainInfo");
}
+
+ private boolean toolchainResolutionEnabled() throws Exception {
+ scratch.file(
+ "a/rule.bzl",
+ "def _impl(ctx):",
+ " toolchain_resolution_enabled ="
+ + " java_common.is_java_toolchain_resolution_enabled_do_not_use(",
+ " ctx = ctx)",
+ " return struct(",
+ " toolchain_resolution_enabled = toolchain_resolution_enabled)",
+ "toolchain_resolution_enabled = rule(",
+ " _impl,",
+ ");");
+
+ scratch.file(
+ "a/BUILD",
+ "load(':rule.bzl', 'toolchain_resolution_enabled')",
+ "toolchain_resolution_enabled(name='r')");
+
+ ConfiguredTarget r = getConfiguredTarget("//a:r");
+ @SuppressWarnings("unchecked") // Use an extra variable in order to suppress the warning.
+ boolean toolchainResolutionEnabled = (boolean) r.get("toolchain_resolution_enabled");
+ return toolchainResolutionEnabled;
+ }
+
+ @Test
+ public void testIsToolchainResolutionEnabled_disabled() throws Exception {
+ useConfiguration("--experimental_use_toolchain_resolution_for_java_rules=false");
+
+ assertThat(toolchainResolutionEnabled()).isFalse();
+ }
+
+ @Test
+ public void testIsToolchainResolutionEnabled_enabled() throws Exception {
+ useConfiguration("--experimental_use_toolchain_resolution_for_java_rules");
+
+ assertThat(toolchainResolutionEnabled()).isTrue();
+ }
}