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