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",