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