aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java37
1 files changed, 34 insertions, 3 deletions
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 6117d5814d..f90d2ad160 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
@@ -211,6 +211,31 @@ public class AndroidCommon {
return jackCompilationHelper.compileAsDex(mode, mainDexList, proguardSpecs);
}
+ public static NestedSet<ResourceContainer> getTransitiveResourceContainers(
+ RuleContext ruleContext, boolean withDeps) {
+ // Traverse through all android_library targets looking for resources
+ NestedSetBuilder<ResourceContainer> resourcesBuilder = NestedSetBuilder.naiveLinkOrder();
+ List<String> attributes = new ArrayList<>();
+ attributes.add("resources");
+ if (withDeps) {
+ attributes.add("deps");
+ }
+
+ for (String attribute : attributes) {
+ if (!ruleContext.attributes().has(attribute, Type.LABEL)
+ && !ruleContext.attributes().has(attribute, Type.LABEL_LIST)) {
+ continue;
+ }
+
+ for (AndroidResourcesProvider resources :
+ ruleContext.getPrerequisites(attribute, Mode.TARGET, AndroidResourcesProvider.class)) {
+ resourcesBuilder.addTransitive(resources.getTransitiveAndroidResources());
+ }
+ }
+
+ return resourcesBuilder.build();
+ }
+
private void compileResources(
JavaSemantics javaSemantics,
JavaCompilationArtifacts.Builder artifactsBuilder,
@@ -631,10 +656,16 @@ public class AndroidCommon {
}
public static AndroidResourcesProvider getAndroidResources(RuleContext ruleContext) {
+ if (!ruleContext.attributes().has("resources", Type.LABEL)) {
+ return null;
+ }
+
TransitiveInfoCollection prerequisite = ruleContext.getPrerequisite("resources", Mode.TARGET);
- return prerequisite != null
- ? prerequisite.getProvider(AndroidResourcesProvider.class)
- : null;
+ if (prerequisite == null) {
+ return null;
+ }
+
+ return prerequisite.getProvider(AndroidResourcesProvider.class);
}
public static NestedSet<Artifact> getApplicationApks(RuleContext ruleContext) {