Create internal/migration-only Starlark API for JavaNativeLibraryProvider (and rename to ..Info)
PiperOrigin-RevId: 314949544
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 4f9a49d..cb1c28c 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
@@ -142,7 +142,7 @@
"JavaInfo.java",
"JavaInfoBuildHelper.java",
"JavaLibraryHelper.java",
- "JavaNativeLibraryProvider.java",
+ "JavaNativeLibraryInfo.java",
"JavaOptions.java",
"JavaPackageConfigurationProvider.java",
"JavaPluginInfoProvider.java",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
index 3fb222a..148079d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
@@ -379,7 +379,7 @@
/**
* Returns transitive Java native libraries.
*
- * @see JavaNativeLibraryProvider
+ * @see JavaNativeLibraryInfo
*/
protected NestedSet<LibraryToLink> collectTransitiveJavaNativeLibraries() {
NativeLibraryNestedSetBuilder builder = new NativeLibraryNestedSetBuilder();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
index d427a8a..c6f6e2d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
@@ -157,9 +157,7 @@
JavaStarlarkApiProvider.NAME, JavaStarlarkApiProvider.fromRuleContext())
.addNativeDeclaredProvider(javaInfo)
.add(RunfilesProvider.class, RunfilesProvider.simple(runfiles))
- .add(
- JavaNativeLibraryProvider.class,
- new JavaNativeLibraryProvider(transitiveJavaNativeLibraries))
+ .addNativeDeclaredProvider(new JavaNativeLibraryInfo(transitiveJavaNativeLibraries))
.addNativeDeclaredProvider(new ProguardSpecProvider(proguardSpecs))
.addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveJavaSourceJars)
.addOutputGroup(OutputGroupInfo.HIDDEN_TOP_LEVEL, proguardSpecs)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java
index 5b99dcc..756fc0a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java
@@ -201,7 +201,7 @@
RunfilesProvider.simple(
JavaCommon.getRunfiles(ruleContext, semantics, javaArtifacts, neverLink)))
.setFilesToBuild(filesToBuild)
- .addProvider(new JavaNativeLibraryProvider(transitiveJavaNativeLibraries))
+ .addNativeDeclaredProvider(new JavaNativeLibraryInfo(transitiveJavaNativeLibraries))
.addProvider(JavaSourceInfoProvider.fromJavaTargetAttributes(attributes, semantics))
.addNativeDeclaredProvider(new ProguardSpecProvider(proguardSpecs))
.addNativeDeclaredProvider(javaInfo)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java
new file mode 100644
index 0000000..7ed44aa
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java
@@ -0,0 +1,91 @@
+// Copyright 2014 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 com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.collect.nestedset.Depset;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.packages.BuiltinProvider;
+import com.google.devtools.build.lib.packages.NativeInfo;
+import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skylarkbuildapi.java.JavaNativeLibraryInfoApi;
+import com.google.devtools.build.lib.syntax.EvalException;
+
+/**
+ * A target that provides native libraries in the transitive closure of its deps that are needed for
+ * executing Java code.
+ */
+@Immutable
+@AutoCodec
+public final class JavaNativeLibraryInfo
+ extends NativeInfo implements JavaNativeLibraryInfoApi<Artifact, LibraryToLink> {
+
+ public static final Provider PROVIDER = new Provider();
+
+ private final NestedSet<LibraryToLink> transitiveJavaNativeLibraries;
+
+ public JavaNativeLibraryInfo(NestedSet<LibraryToLink> transitiveJavaNativeLibraries) {
+ super(PROVIDER);
+ this.transitiveJavaNativeLibraries = transitiveJavaNativeLibraries;
+ }
+
+ /**
+ * Collects native libraries in the transitive closure of its deps that are needed for executing
+ * Java code.
+ */
+ NestedSet<LibraryToLink> getTransitiveJavaNativeLibraries() {
+ return transitiveJavaNativeLibraries;
+ }
+
+ @Override
+ public Depset /*<LibraryToLink>*/ getTransitiveJavaNativeLibrariesForStarlark() {
+ return Depset.of(LibraryToLink.TYPE, transitiveJavaNativeLibraries);
+ }
+
+ public static JavaNativeLibraryInfo merge(Iterable<JavaNativeLibraryInfo> deps) {
+ NestedSetBuilder<LibraryToLink> transitiveSourceJars = NestedSetBuilder.stableOrder();
+
+ for (JavaNativeLibraryInfo wrapper : deps) {
+ transitiveSourceJars.addTransitive(wrapper.getTransitiveJavaNativeLibraries());
+ }
+ return new JavaNativeLibraryInfo(transitiveSourceJars.build());
+ }
+
+ /** Provider class for {@link JavaNativeLibraryInfo} objects. */
+ public static class Provider extends BuiltinProvider<JavaNativeLibraryInfo>
+ implements JavaNativeLibraryInfoApi.Provider<Artifact, LibraryToLink> {
+
+ private Provider() {
+ super(NAME, JavaNativeLibraryInfo.class);
+ }
+
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public JavaNativeLibraryInfo create(Depset transitiveLibraries)
+ throws EvalException {
+ return new JavaNativeLibraryInfo(
+ NestedSetBuilder.<LibraryToLink>stableOrder()
+ .addTransitive(
+ Depset.cast(transitiveLibraries, LibraryToLink.class, "transitive_libraries"))
+ .build());
+ }
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryProvider.java
deleted file mode 100644
index c22b68e..0000000
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryProvider.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2014 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 com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
-import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-
-/**
- * A target that provides native libraries in the transitive closure of its deps that are needed for
- * executing Java code.
- */
-@Immutable
-@AutoCodec
-public final class JavaNativeLibraryProvider implements TransitiveInfoProvider {
-
- private final NestedSet<LibraryToLink> transitiveJavaNativeLibraries;
-
- public JavaNativeLibraryProvider(NestedSet<LibraryToLink> transitiveJavaNativeLibraries) {
- this.transitiveJavaNativeLibraries = transitiveJavaNativeLibraries;
- }
-
- /**
- * Collects native libraries in the transitive closure of its deps that are needed for executing
- * Java code.
- */
- public NestedSet<LibraryToLink> getTransitiveJavaNativeLibraries() {
- return transitiveJavaNativeLibraries;
- }
-
- public static JavaNativeLibraryProvider merge(Iterable<JavaNativeLibraryProvider> deps) {
- NestedSetBuilder<LibraryToLink> transitiveSourceJars = NestedSetBuilder.stableOrder();
-
- for (JavaNativeLibraryProvider wrapper : deps) {
- transitiveSourceJars.addTransitive(wrapper.getTransitiveJavaNativeLibraries());
- }
- return new JavaNativeLibraryProvider(transitiveSourceJars.build());
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/NativeLibraryNestedSetBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/NativeLibraryNestedSetBuilder.java
index 2ee5cd8..f994e13 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/NativeLibraryNestedSetBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/NativeLibraryNestedSetBuilder.java
@@ -52,7 +52,7 @@
/** Include native Java libraries of a specified target into the nested set. */
public NativeLibraryNestedSetBuilder addJavaTarget(TransitiveInfoCollection dep) {
- JavaNativeLibraryProvider javaProvider = dep.getProvider(JavaNativeLibraryProvider.class);
+ JavaNativeLibraryInfo javaProvider = dep.get(JavaNativeLibraryInfo.PROVIDER);
if (javaProvider != null) {
builder.addTransitive(javaProvider.getTransitiveJavaNativeLibraries());
return this;
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaNativeLibraryInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaNativeLibraryInfoApi.java
new file mode 100644
index 0000000..0d919ed
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaNativeLibraryInfoApi.java
@@ -0,0 +1,83 @@
+// Copyright 2020 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.skylarkbuildapi.java;
+
+import com.google.devtools.build.lib.collect.nestedset.Depset;
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkbuildapi.core.ProviderApi;
+import com.google.devtools.build.lib.skylarkbuildapi.core.StructApi;
+import com.google.devtools.build.lib.skylarkbuildapi.cpp.LibraryToLinkApi;
+import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
+import net.starlark.java.annot.Param;
+import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.annot.StarlarkConstructor;
+import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.annot.StarlarkMethod;
+
+/** A target that provides C++ {@link LibraryToLinkApi}s to be linked into Java targets. */
+@StarlarkBuiltin(
+ name = "JavaNativeLibraryInfo",
+ doc =
+ "Do not use this module. It is intended for migration purposes only. If you depend on it, "
+ + "you will be broken when it is removed."
+ + "Information about the C++ libraries to be linked into Java targets.",
+ documented = true,
+ category = StarlarkDocumentationCategory.PROVIDER)
+public interface JavaNativeLibraryInfoApi<
+ FileT extends FileApi, LibraryToLinkT extends LibraryToLinkApi<FileT>>
+ extends StructApi {
+ /** Name of this info object. */
+ String NAME = "JavaNativeLibraryInfo";
+
+ /** Returns the cc linking info */
+ @StarlarkMethod(
+ name = "transitive_libraries",
+ structField = true,
+ doc = "Returns the set of transitive LibraryToLink objects.",
+ documented = true,
+ enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_ENABLE_ANDROID_MIGRATION_APIS)
+ Depset /*<LibraryToLinkT>*/ getTransitiveJavaNativeLibrariesForStarlark();
+
+ /** The provider implementing this can construct the JavaNativeLibraryInfo provider. */
+ @StarlarkBuiltin(
+ name = "Provider",
+ doc =
+ "Do not use this module. It is intended for migration purposes only. If you depend on "
+ + "it, you will be broken when it is removed.",
+ documented = false)
+ interface Provider<FileT extends FileApi, LibraryToLinkT extends LibraryToLinkApi<FileT>>
+ extends ProviderApi {
+
+ @StarlarkMethod(
+ name = NAME,
+ doc = "The <code>JavaNativeLibraryInfo</code> constructor.",
+ documented = true,
+ enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_ENABLE_ANDROID_MIGRATION_APIS,
+ parameters = {
+ @Param(
+ name = "transitive_libraries",
+ doc = "The transitive set of LibraryToLink providers.",
+ positional = true,
+ named = false,
+ type = Depset.class,
+ generic1 = LibraryToLinkApi.class),
+ },
+ selfCall = true)
+ @StarlarkConstructor(objectType = JavaNativeLibraryInfoApi.class, receiverNameForDoc = NAME)
+ JavaNativeLibraryInfoApi<FileT, LibraryToLinkT> create(Depset transitiveLibraries)
+ throws EvalException;
+ }
+}