aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2016-02-24 22:20:34 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2016-02-25 14:13:28 +0000
commit029dcc7929493f9a2c72daa8720c9ff06e003483 (patch)
treea0f48b90c0c1c1b3c9839bc83d742b802bc0e16d /src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
parentd188735707db1d1ec969ca84d959fb8c6e716b06 (diff)
Expose Android resources in Skylark API.
Also expose functionality to calculate resource source directory from Android resource artifact. -- MOS_MIGRATED_REVID=115492705
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
index 2580a05b85..707e8ed794 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
@@ -13,9 +13,16 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.android;
+import com.google.common.base.Function;
import com.google.common.collect.ImmutableCollection;
+import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.rules.SkylarkApiProvider;
+import com.google.devtools.build.lib.rules.android.AndroidResourcesProvider.ResourceContainer;
+import com.google.devtools.build.lib.rules.android.AndroidResourcesProvider.ResourceType;
import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
@@ -100,6 +107,35 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider {
return idlInfo;
}
+ @SkylarkCallable(
+ name = "resources",
+ structField = true,
+ doc = "Returns resources defined by this target."
+ )
+ public NestedSet<Artifact> getResources() {
+ return collectDirectArtifacts(ResourceType.RESOURCES);
+ }
+
+ private NestedSet<Artifact> collectDirectArtifacts(final ResourceType resources) {
+ AndroidResourcesProvider provider = getInfo().getProvider(AndroidResourcesProvider.class);
+ if (provider == null) {
+ return NestedSetBuilder.emptySet(Order.STABLE_ORDER);
+ }
+ // This will iterate over all (direct) resources. If this turns out to be a performance
+ // problem, {@link ResourceContainer#getArtifacts} can be changed to return NestedSets.
+ return NestedSetBuilder.wrap(
+ Order.STABLE_ORDER,
+ Iterables.concat(
+ Iterables.transform(
+ provider.getDirectAndroidResources(),
+ new Function<ResourceContainer, Iterable<Artifact>>() {
+ @Override
+ public Iterable<Artifact> apply(ResourceContainer resourceContainer) {
+ return resourceContainer.getArtifacts(resources);
+ }
+ })));
+ }
+
/**
* Helper class to provide information about IDLs related to this rule.
*/