Make JavaRuntimeInfo extend ToolchainInfo, and delete JavaRuntimeToolchainInfo

PiperOrigin-RevId: 231880172
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 b4b6d2b..55b715c 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
@@ -57,6 +57,7 @@
         "//src/main/java/com/google/devtools/build/lib:skylarkinterface",
         "//src/main/java/com/google/devtools/build/lib:util",
         "//src/main/java/com/google/devtools/build/lib/actions",
+        "//src/main/java/com/google/devtools/build/lib/analysis/platform",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/rules/cpp",
@@ -106,7 +107,6 @@
         "JavaRuleOutputJarsProvider.java",
         "JavaRunfilesProvider.java",
         "JavaRuntimeInfo.java",
-        "JavaRuntimeToolchainInfo.java",
         "JavaSemantics.java",
         "JavaSkylarkApiProvider.java",
         "JavaSkylarkCommon.java",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHostRuntimeAliasRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHostRuntimeAliasRule.java
index df29214..033ea61 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHostRuntimeAliasRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHostRuntimeAliasRule.java
@@ -16,6 +16,7 @@
 
 import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
 import com.google.devtools.build.lib.analysis.config.HostTransition;
+import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.Attribute;
 import com.google.devtools.build.lib.rules.LateBoundAlias.CommonAliasRule;
@@ -29,6 +30,6 @@
   @Override
   protected Attribute.Builder<Label> makeAttribute(RuleDefinitionEnvironment environment) {
     Attribute.Builder<Label> builder = super.makeAttribute(environment);
-    return builder.cfg(HostTransition.INSTANCE).mandatoryProviders(JavaRuntimeInfo.PROVIDER.id());
+    return builder.cfg(HostTransition.INSTANCE).mandatoryProviders(ToolchainInfo.PROVIDER.id());
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleClasses.java
index 7df1788..4735cb0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleClasses.java
@@ -97,13 +97,13 @@
           .add(
               attr(":jvm", LABEL)
                   .value(JavaSemantics.jvmAttribute(env))
-                  .mandatoryProviders(JavaRuntimeInfo.PROVIDER.id())
+                  .mandatoryProviders(ToolchainInfo.PROVIDER.id())
                   .useOutputLicenses())
           .add(
               attr(":host_jdk", LABEL)
                   .cfg(HostTransition.INSTANCE)
                   .value(JavaSemantics.hostJdkAttribute(env))
-                  .mandatoryProviders(JavaRuntimeInfo.PROVIDER.id()))
+                  .mandatoryProviders(ToolchainInfo.PROVIDER.id()))
           .add(
               attr(JAVA_RUNTIME_TOOLCHAIN_TYPE_ATTRIBUTE_NAME, NODEP_LABEL)
                   .value(JavaRuleClasses.javaRuntimeTypeAttribute(env)))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java
index ac67f0a..e996dbd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java
@@ -114,7 +114,6 @@
         .addProvider(RunfilesProvider.class, RunfilesProvider.simple(runfiles))
         .setFilesToBuild(filesToBuild)
         .addNativeDeclaredProvider(javaRuntime)
-        .addNativeDeclaredProvider(new JavaRuntimeToolchainInfo(javaRuntime))
         .addNativeDeclaredProvider(templateVariableInfo)
         .build();
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAliasRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAliasRule.java
index 4ffc25d..d80ec9a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAliasRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAliasRule.java
@@ -15,6 +15,7 @@
 package com.google.devtools.build.lib.rules.java;
 
 import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
+import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.Attribute;
 import com.google.devtools.build.lib.rules.LateBoundAlias.CommonAliasRule;
@@ -28,6 +29,6 @@
   @Override
   protected Attribute.Builder<Label> makeAttribute(RuleDefinitionEnvironment environment) {
     Attribute.Builder<Label> builder = super.makeAttribute(environment);
-    return builder.mandatoryProviders(JavaRuntimeInfo.PROVIDER.id());
+    return builder.mandatoryProviders(ToolchainInfo.PROVIDER.id());
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java
index d66c977..a2c8068 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java
@@ -17,6 +17,7 @@
 import static com.google.devtools.build.lib.packages.BuildType.NODEP_LABEL;
 import static com.google.devtools.build.lib.rules.java.JavaRuleClasses.JAVA_RUNTIME_TOOLCHAIN_TYPE_ATTRIBUTE_NAME;
 
+import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.PlatformOptions;
 import com.google.devtools.build.lib.analysis.RuleContext;
@@ -27,9 +28,8 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.packages.BuildType;
-import com.google.devtools.build.lib.packages.NativeInfo;
-import com.google.devtools.build.lib.packages.NativeProvider;
 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;
@@ -40,11 +40,7 @@
 /** Information about the Java runtime used by the <code>java_*</code> rules. */
 @Immutable
 @AutoCodec
-public class JavaRuntimeInfo extends NativeInfo implements JavaRuntimeInfoApi {
-  public static final String SKYLARK_NAME = "JavaRuntimeInfo";
-
-  public static final NativeProvider<JavaRuntimeInfo> PROVIDER =
-      new NativeProvider<JavaRuntimeInfo>(JavaRuntimeInfo.class, SKYLARK_NAME) {};
+public class JavaRuntimeInfo extends ToolchainInfo implements JavaRuntimeInfoApi {
 
   public static JavaRuntimeInfo create(
       NestedSet<Artifact> javaBaseInputs,
@@ -95,8 +91,8 @@
     if (toolchainType != null && useToolchainResolutionForJavaRules) {
       ToolchainInfo toolchainInfo =
           ruleContext.getToolchainContext().forToolchainType(toolchainType);
-      if (toolchainInfo instanceof JavaRuntimeToolchainInfo) {
-        return ((JavaRuntimeToolchainInfo) toolchainInfo).javaRuntime();
+      if (toolchainInfo instanceof JavaRuntimeInfo) {
+        return (JavaRuntimeInfo) toolchainInfo;
       }
     }
 
@@ -116,7 +112,7 @@
   @Nullable
   protected static JavaRuntimeInfo from(
       TransitiveInfoCollection collection, RuleErrorConsumer errorConsumer) {
-    return collection.get(JavaRuntimeInfo.PROVIDER);
+    return (JavaRuntimeInfo) collection.get(ToolchainInfo.PROVIDER);
   }
 
   private final NestedSet<Artifact> javaBaseInputs;
@@ -135,7 +131,7 @@
       PathFragment javaBinaryExecPath,
       PathFragment javaHomeRunfilesPath,
       PathFragment javaBinaryRunfilesPath) {
-    super(PROVIDER);
+    super(ImmutableMap.of(), Location.BUILTIN);
     this.javaBaseInputs = javaBaseInputs;
     this.javaBaseInputsMiddleman = javaBaseInputsMiddleman;
     this.javaHome = javaHome;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeToolchainInfo.java
deleted file mode 100644
index 77a7fd8..0000000
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeToolchainInfo.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2018 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 java.util.Objects.requireNonNull;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
-import com.google.devtools.build.lib.concurrent.ThreadSafety;
-import com.google.devtools.build.lib.events.Location;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-
-/**
- * A wrapper class for {@link JavaRuntimeInfo} that can be used to expose it to the toolchain
- * resolution system.
- */
-@ThreadSafety.Immutable
-@AutoCodec
-public final class JavaRuntimeToolchainInfo extends ToolchainInfo {
-  private final JavaRuntimeInfo javaRuntime;
-
-  @AutoCodec.Instantiator
-  public JavaRuntimeToolchainInfo(JavaRuntimeInfo javaRuntime) {
-    super(ImmutableMap.of(), Location.BUILTIN);
-    this.javaRuntime = requireNonNull(javaRuntime);
-  }
-
-  public JavaRuntimeInfo javaRuntime() {
-    return javaRuntime;
-  }
-}
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 d03b125..24b835e 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
@@ -19,6 +19,7 @@
 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.platform.ToolchainInfo;
 import com.google.devtools.build.lib.analysis.skylark.SkylarkActionFactory;
 import com.google.devtools.build.lib.analysis.skylark.SkylarkRuleContext;
 import com.google.devtools.build.lib.cmdline.Label;
@@ -230,12 +231,12 @@
 
   @Override
   public Provider getJavaToolchainProvider() {
-    return JavaToolchainProvider.PROVIDER;
+    return ToolchainInfo.PROVIDER;
   }
 
   @Override
   public Provider getJavaRuntimeProvider() {
-    return JavaRuntimeInfo.PROVIDER;
+    return ToolchainInfo.PROVIDER;
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
index 2625c6c..83dacae 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
@@ -32,6 +32,7 @@
 import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
 import com.google.devtools.build.lib.analysis.config.HostTransition;
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
+import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
@@ -45,7 +46,6 @@
 import com.google.devtools.build.lib.rules.java.JavaConfiguration;
 import com.google.devtools.build.lib.rules.java.JavaRuleClasses;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
-import com.google.devtools.build.lib.rules.java.JavaRuntimeInfo;
 import com.google.devtools.build.lib.rules.java.JavaSemantics;
 import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider;
 import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
@@ -132,7 +132,7 @@
                 attr(":host_jdk", LABEL)
                     .cfg(HostTransition.INSTANCE)
                     .value(hostJdkAttribute)
-                    .mandatoryProviders(JavaRuntimeInfo.PROVIDER.id()))
+                    .mandatoryProviders(ToolchainInfo.PROVIDER.id()))
             .add(
                 attr(JavaRuleClasses.JAVA_TOOLCHAIN_ATTRIBUTE_NAME, LABEL)
                     .useOutputLicenses()
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeInfoApi.java
index 8db3fb1..e9aa1c6 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeInfoApi.java
@@ -14,16 +14,14 @@
 
 package com.google.devtools.build.lib.skylarkbuildapi.java;
 
-import com.google.devtools.build.lib.skylarkbuildapi.StructApi;
+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.vfs.PathFragment;
 
-/**
- * Information about the Java runtime being used.
- */
+/** Information about the Java runtime being used. */
 @SkylarkModule(name = "JavaRuntimeInfo", doc = "Information about the Java runtime being used.")
-public interface JavaRuntimeInfoApi extends StructApi {
+public interface JavaRuntimeInfoApi extends ToolchainInfoApi {
 
   @SkylarkCallable(
       name = "java_home",