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