Make JavaToolchainProvider implement JavaToolchainSkylarkApiProviderApi directly

Instead of indirecting through a separate JavaToolchainSkylarkApiProvider class.

This is a no-op from the perspective of the starlark API.

RELNOTES: N/A
PiperOrigin-RevId: 232775348
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
index 55b715c..fd5e271 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
@@ -115,7 +115,6 @@
         "JavaStrictCompilationArgsProvider.java",
         "JavaTargetAttributes.java",
         "JavaToolchainProvider.java",
-        "JavaToolchainSkylarkApiProvider.java",
         "JavaUtil.java",
         "MessageBundleInfo.java",
         "NativeLibraryNestedSetBuilder.java",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java
index f0cc1d7..8490524 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java
@@ -122,8 +122,7 @@
             semantics);
     RuleConfiguredTargetBuilder builder =
         new RuleConfiguredTargetBuilder(ruleContext)
-            .addSkylarkTransitiveInfo(
-                JavaToolchainSkylarkApiProvider.NAME, new JavaToolchainSkylarkApiProvider())
+            .addSkylarkTransitiveInfo(JavaToolchainProvider.LEGACY_NAME, provider)
             .addNativeDeclaredProvider(provider)
             .addProvider(RunfilesProvider.class, RunfilesProvider.simple(Runfiles.EMPTY))
             .setFilesToBuild(new NestedSetBuilder<Artifact>(Order.STABLE_ORDER).build());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
index 2c4255c4..11cae3e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
@@ -13,6 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.rules.java;
 
+import static com.google.common.base.StandardSystemProperty.JAVA_SPECIFICATION_VERSION;
 import static com.google.devtools.build.lib.packages.BuildType.NODEP_LABEL;
 import static com.google.devtools.build.lib.rules.java.JavaRuleClasses.JAVA_TOOLCHAIN_TYPE_ATTRIBUTE_NAME;
 
@@ -34,13 +35,19 @@
 import com.google.devtools.build.lib.packages.RuleErrorConsumer;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkbuildapi.java.JavaToolchainSkylarkApiProviderApi;
+import com.google.devtools.build.lib.syntax.SkylarkList;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import java.util.Iterator;
 import java.util.List;
 import javax.annotation.Nullable;
 
 /** Information about the JDK used by the <code>java_*</code> rules. */
 @Immutable
 @AutoCodec
-public class JavaToolchainProvider extends ToolchainInfo {
+public class JavaToolchainProvider extends ToolchainInfo
+    implements JavaToolchainSkylarkApiProviderApi {
 
   /** Returns the Java Toolchain associated with the rule being analyzed or {@code null}. */
   public static JavaToolchainProvider from(RuleContext ruleContext) {
@@ -341,4 +348,50 @@
   public JavaSemantics getJavaSemantics() {
     return javaSemantics;
   }
+
+  /** Returns the input Java language level */
+  // TODO(cushon): remove this API; it bakes a deprecated detail of the javac API into Bazel
+  @Override
+  public String getSourceVersion() {
+    Iterator<String> it = getJavacOptions().iterator();
+    while (it.hasNext()) {
+      if (it.next().equals("-source") && it.hasNext()) {
+        return it.next();
+      }
+    }
+    return JAVA_SPECIFICATION_VERSION.value();
+  }
+
+  /** Returns the target Java language level */
+  // TODO(cushon): remove this API; it bakes a deprecated detail of the javac API into Bazel
+  @Override
+  public String getTargetVersion() {
+    Iterator<String> it = getJavacOptions().iterator();
+    while (it.hasNext()) {
+      if (it.next().equals("-target") && it.hasNext()) {
+        return it.next();
+      }
+    }
+    return JAVA_SPECIFICATION_VERSION.value();
+  }
+
+  @Override
+  public FileApi getJavacJar() {
+    return getJavac();
+  }
+
+  @Override
+  public SkylarkNestedSet getSkylarkBootclasspath() {
+    return SkylarkNestedSet.of(Artifact.class, getBootclasspath());
+  }
+
+  @Override
+  public SkylarkList<String> getSkylarkJvmOptions() {
+    return SkylarkList.createImmutable(getJvmOptions());
+  }
+
+  @Override
+  public SkylarkNestedSet getSkylarkTools() {
+    return SkylarkNestedSet.of(Artifact.class, getTools());
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainSkylarkApiProvider.java
deleted file mode 100644
index 1373e9c..0000000
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainSkylarkApiProvider.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2015 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.rules.java;
-
-import static com.google.common.base.StandardSystemProperty.JAVA_SPECIFICATION_VERSION;
-
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.skylark.SkylarkApiProvider;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.skylarkbuildapi.java.JavaToolchainSkylarkApiProviderApi;
-import com.google.devtools.build.lib.syntax.SkylarkList;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
-import java.util.Iterator;
-
-/**
- * A class that exposes the java_toolchain providers to Skylark. It is intended to provide a simple
- * and stable interface for Skylark users.
- */
-@AutoCodec
-public final class JavaToolchainSkylarkApiProvider extends SkylarkApiProvider
-    implements JavaToolchainSkylarkApiProviderApi {
-  /** The name of the field in Skylark used to access this class. */
-  public static final String NAME = "java_toolchain";
-
-  /** Returns the input Java language level */
-  // TODO(cushon): remove this API; it bakes a deprecated detail of the javac API into Bazel
-  @Override
-  public String getSourceVersion() {
-    JavaToolchainProvider javaToolchainProvider = JavaToolchainProvider.from(getInfo());
-    Iterator<String> it = javaToolchainProvider.getJavacOptions().iterator();
-    while (it.hasNext()) {
-      if (it.next().equals("-source") && it.hasNext()) {
-        return it.next();
-      }
-    }
-    return JAVA_SPECIFICATION_VERSION.value();
-  }
-
-  /** Returns the target Java language level */
-  // TODO(cushon): remove this API; it bakes a deprecated detail of the javac API into Bazel
-  @Override
-  public String getTargetVersion() {
-    JavaToolchainProvider javaToolchainProvider = JavaToolchainProvider.from(getInfo());
-    Iterator<String> it = javaToolchainProvider.getJavacOptions().iterator();
-    while (it.hasNext()) {
-      if (it.next().equals("-target") && it.hasNext()) {
-        return it.next();
-      }
-    }
-    return JAVA_SPECIFICATION_VERSION.value();
-  }
-
-  /** Returns the {@link Artifact} of the javac jar */
-  @Override
-  public Artifact getJavacJar() {
-    JavaToolchainProvider javaToolchainProvider = JavaToolchainProvider.from(getInfo());
-    return javaToolchainProvider.getJavac();
-  }
-
-  /** Returns the {@link Artifact} of the SingleJar deploy jar */
-  @Override
-  public Artifact getSingleJar() {
-    return JavaToolchainProvider.from(getInfo()).getSingleJar();
-  }
-
-  /** Returns the bootclass path entries */
-  @Override
-  public SkylarkNestedSet getBootclasspath() {
-    return SkylarkNestedSet.of(
-        Artifact.class, JavaToolchainProvider.from(getInfo()).getBootclasspath());
-  }
-
-  /** Returns the JVM options */
-  @Override
-  public SkylarkList<String> getJvmOptions() {
-    return SkylarkList.createImmutable(JavaToolchainProvider.from(getInfo()).getJvmOptions());
-  }
-
-  /** Returns the compilation tools */
-  @Override
-  public SkylarkNestedSet getTools() {
-    return SkylarkNestedSet.of(Artifact.class, JavaToolchainProvider.from(getInfo()).getTools());
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaToolchainSkylarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaToolchainSkylarkApiProviderApi.java
index e45a23f..d35d1ed 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaToolchainSkylarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaToolchainSkylarkApiProviderApi.java
@@ -15,22 +15,24 @@
 package com.google.devtools.build.lib.skylarkbuildapi.java;
 
 import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkbuildapi.platform.ToolchainInfoApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.syntax.SkylarkList;
 import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /**
- * Provides access to information about the Java toolchain rule.
- * Accessible as a 'java_toolchain' field on a Target struct.
+ * Provides access to information about the Java toolchain rule. Accessible as a 'java_toolchain'
+ * field on a Target struct.
  */
 @SkylarkModule(
     name = "JavaToolchainSkylarkApiProvider",
     doc =
         "Provides access to information about the Java toolchain rule. "
-            + "Accessible as a 'java_toolchain' field on a Target struct."
-)
-public interface JavaToolchainSkylarkApiProviderApi {
+            + "Accessible as a 'java_toolchain' field on a Target struct.")
+public interface JavaToolchainSkylarkApiProviderApi extends ToolchainInfoApi {
+
+  String LEGACY_NAME = "java_toolchain";
 
   @SkylarkCallable(name = "source_version", doc = "The java source version.", structField = true)
   public String getSourceVersion();
@@ -52,14 +54,14 @@
       name = "bootclasspath",
       doc = "The Java target bootclasspath entries. Corresponds to javac's -bootclasspath flag.",
       structField = true)
-  public SkylarkNestedSet getBootclasspath();
+  public SkylarkNestedSet getSkylarkBootclasspath();
 
   @SkylarkCallable(
       name = "jvm_opt",
       doc = "The default options for the JVM running the java compiler and associated tools.",
       structField = true)
-  public SkylarkList<String> getJvmOptions();
+  public SkylarkList<String> getSkylarkJvmOptions();
 
   @SkylarkCallable(name = "tools", doc = "The compilation tools.", structField = true)
-  public SkylarkNestedSet getTools();
+  public SkylarkNestedSet getSkylarkTools();
 }