Expose aar native libs to skylark.
PiperOrigin-RevId: 185927949
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index 76ccfbf..6a90a1f 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -68,6 +68,7 @@
import com.google.devtools.build.lib.rules.android.ApkInfo;
import com.google.devtools.build.lib.rules.android.DeviceBrokerInfo;
import com.google.devtools.build.lib.rules.android.DexArchiveAspect;
+import com.google.devtools.build.lib.rules.android.NativeLibsZipsInfo;
import com.google.devtools.build.lib.rules.config.ConfigRules;
import com.google.devtools.build.lib.rules.core.CoreRules;
import com.google.devtools.build.lib.rules.cpp.proto.CcProtoAspect;
@@ -221,6 +222,8 @@
DeviceBrokerInfo.PROVIDER.getName(), DeviceBrokerInfo.PROVIDER);
builder.addSkylarkAccessibleTopLevels(
AndroidResourcesInfo.PROVIDER.getName(), AndroidResourcesInfo.PROVIDER);
+ builder.addSkylarkAccessibleTopLevels(
+ NativeLibsZipsInfo.PROVIDER.getName(), NativeLibsZipsInfo.PROVIDER);
try {
builder.addWorkspaceFilePrefix(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
index 05e85d2..c2b987b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
@@ -162,9 +162,8 @@
JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext())
.addProvider(RunfilesProvider.class, RunfilesProvider.EMPTY)
.addNativeDeclaredProvider(resourceApk.toResourceInfo(ruleContext.getLabel()))
- .addProvider(
- NativeLibsZipsProvider.class,
- new NativeLibsZipsProvider(
+ .addNativeDeclaredProvider(
+ new NativeLibsZipsInfo(
AndroidCommon.collectTransitiveNativeLibsZips(ruleContext).add(nativeLibs).build()))
.addProvider(
JavaRuntimeJarProvider.class, new JavaRuntimeJarProvider(ImmutableList.of(mergedJar)))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
index aae265a..d67430c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
@@ -367,10 +367,10 @@
public static NestedSetBuilder<Artifact> collectTransitiveNativeLibsZips(
RuleContext ruleContext) {
NestedSetBuilder<Artifact> transitiveAarNativeLibs = NestedSetBuilder.naiveLinkOrder();
- Iterable<NativeLibsZipsProvider> providers =
- getTransitivePrerequisites(ruleContext, Mode.TARGET, NativeLibsZipsProvider.class);
- for (NativeLibsZipsProvider nativeLibsZipsProvider : providers) {
- transitiveAarNativeLibs.addTransitive(nativeLibsZipsProvider.getAarNativeLibs());
+ Iterable<NativeLibsZipsInfo> infos =
+ getTransitivePrerequisites(ruleContext, Mode.TARGET, NativeLibsZipsInfo.PROVIDER);
+ for (NativeLibsZipsInfo nativeLibsZipsInfo : infos) {
+ transitiveAarNativeLibs.addTransitive(nativeLibsZipsInfo.getAarNativeLibs());
}
return transitiveAarNativeLibs;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
index 207cec8..3617299 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
@@ -257,9 +257,8 @@
}
builder
- .addProvider(
- NativeLibsZipsProvider.class,
- new NativeLibsZipsProvider(
+ .addNativeDeclaredProvider(
+ new NativeLibsZipsInfo(
AndroidCommon.collectTransitiveNativeLibsZips(ruleContext).build()))
.add(
JavaSourceInfoProvider.class,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index 11c95ab..81615d0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -570,6 +570,7 @@
.exec()
.value(env.getToolsLabel(AndroidRuleClasses.MANIFEST_MERGE_TOOL_LABEL)))
.advertiseSkylarkProvider(AndroidResourcesInfo.PROVIDER.id())
+ .advertiseSkylarkProvider(NativeLibsZipsInfo.PROVIDER.id())
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibsZipsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibsZipsInfo.java
new file mode 100644
index 0000000..2b802ad
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibsZipsInfo.java
@@ -0,0 +1,55 @@
+// Copyright 2016 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.android;
+
+import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.packages.NativeInfo;
+import com.google.devtools.build.lib.packages.NativeProvider;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+
+/**
+ * Provider of transitively available ZIPs of native libs that should be directly copied into the
+ * APK.
+ */
+@SkylarkModule(
+ name = "AndroidNativeLibsZipsInfo",
+ doc = "Native Libraries zips provided by a rule",
+ category = SkylarkModuleCategory.PROVIDER
+)
+@Immutable
+public final class NativeLibsZipsInfo extends NativeInfo {
+
+ private static final String SKYLARK_NAME = "AndroidNativeLibsZipsInfo";
+ public static final NativeProvider<NativeLibsZipsInfo> PROVIDER =
+ new NativeProvider<NativeLibsZipsInfo>(NativeLibsZipsInfo.class, SKYLARK_NAME) {};
+ private final NestedSet<Artifact> aarNativeLibs;
+
+ public NativeLibsZipsInfo(NestedSet<Artifact> aarNativeLibs) {
+ super(PROVIDER);
+ this.aarNativeLibs = aarNativeLibs;
+ }
+
+ @SkylarkCallable(
+ name = "native_libs_zips",
+ doc = "Returns the native libraries zip produced by the rule.",
+ structField = true
+ )
+ public NestedSet<Artifact> getAarNativeLibs() {
+ return aarNativeLibs;
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibsZipsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibsZipsProvider.java
deleted file mode 100644
index e2ce1ae..0000000
--- a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibsZipsProvider.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2016 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.android;
-
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
-import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-
-/**
- * Provider of transitively available ZIPs of native libs that should be directly copied into the
- * APK.
- */
-@Immutable
-public final class NativeLibsZipsProvider implements TransitiveInfoProvider {
- private final NestedSet<Artifact> aarNativeLibs;
-
- public NativeLibsZipsProvider(NestedSet<Artifact> aarNativeLibs) {
- this.aarNativeLibs = aarNativeLibs;
- }
-
- public NestedSet<Artifact> getAarNativeLibs() {
- return aarNativeLibs;
- }
-}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
index bb7ee64..29cd1bb 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
@@ -127,7 +127,7 @@
ConfiguredTarget androidLibraryTarget = getConfiguredTarget("//java:lib");
NestedSet<Artifact> nativeLibs =
- androidLibraryTarget.getProvider(NativeLibsZipsProvider.class).getAarNativeLibs();
+ androidLibraryTarget.get(NativeLibsZipsInfo.PROVIDER).getAarNativeLibs();
assertThat(nativeLibs).containsExactly(
ActionsTestUtil.getFirstArtifactEndingWith(nativeLibs, "foo/native_libs.zip"),
ActionsTestUtil.getFirstArtifactEndingWith(nativeLibs, "bar/native_libs.zip"),