aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-12-06 18:31:53 +0000
committerGravatar David Chen <dzc@google.com>2015-12-07 21:15:45 +0000
commit03083858837c804f7992e6f5d27f39acdb66d61a (patch)
tree611b3815243c92c8d90499b96b681627410bdda3 /src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java
parent2ec1b0ae403345b9a9add4d84fe65d6f92bc375b (diff)
Fix android_library resources handling
RELNOTES: Fix resource handling for exported android_library rules -- MOS_MIGRATED_REVID=109532253
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java31
1 files changed, 21 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java
index 808490cc52..dfd4df3f79 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java
@@ -13,6 +13,7 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.android;
+import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.cmdline.Label;
@@ -56,7 +57,8 @@ public class ResourceDependencies {
NestedSetBuilder<ResourceContainer> transitiveDependencies = NestedSetBuilder.naiveLinkOrder();
NestedSetBuilder<ResourceContainer> directDependencies = NestedSetBuilder.naiveLinkOrder();
- extractFromAttribute("resources", ruleContext, transitiveDependencies, directDependencies);
+ extractFromAttributes(
+ ImmutableList.of("resources"), ruleContext, transitiveDependencies, directDependencies);
return new ResourceDependencies(neverlink,
transitiveDependencies.build(), directDependencies.build());
}
@@ -64,7 +66,8 @@ public class ResourceDependencies {
public static ResourceDependencies fromRuleDeps(RuleContext ruleContext, boolean neverlink) {
NestedSetBuilder<ResourceContainer> transitiveDependencies = NestedSetBuilder.naiveLinkOrder();
NestedSetBuilder<ResourceContainer> directDependencies = NestedSetBuilder.naiveLinkOrder();
- extractFromAttribute("deps", ruleContext, transitiveDependencies, directDependencies);
+ extractFromAttributes(AndroidCommon.TRANSITIVE_ATTRIBUTES, ruleContext, transitiveDependencies,
+ directDependencies);
return new ResourceDependencies(neverlink,
transitiveDependencies.build(), directDependencies.build());
}
@@ -74,29 +77,37 @@ public class ResourceDependencies {
NestedSetBuilder<ResourceContainer> transitiveDependencies = NestedSetBuilder.naiveLinkOrder();
NestedSetBuilder<ResourceContainer> directDependencies = NestedSetBuilder.naiveLinkOrder();
if (hasResourceAttribute(ruleContext)) {
- extractFromAttribute("resources",ruleContext, transitiveDependencies, directDependencies);
+ extractFromAttributes(
+ ImmutableList.of("resources"), ruleContext, transitiveDependencies, directDependencies);
}
if (directDependencies.isEmpty()) {
// There are no resources, so this library will forward the direct and transitive dependencies
// without changes.
- extractFromAttribute("deps", ruleContext, transitiveDependencies, directDependencies);
+ extractFromAttributes(AndroidCommon.TRANSITIVE_ATTRIBUTES, ruleContext,
+ transitiveDependencies, directDependencies);
} else {
// There are resources, so the direct dependencies and the transitive will be merged into
// the transitive dependencies. This maintains the relationship of the resources being
// directly on the rule.
- extractFromAttribute("deps", ruleContext, transitiveDependencies, transitiveDependencies);
+ extractFromAttributes(AndroidCommon.TRANSITIVE_ATTRIBUTES, ruleContext,
+ transitiveDependencies, transitiveDependencies);
}
return new ResourceDependencies(neverlink,
transitiveDependencies.build(), directDependencies.build());
}
- private static void extractFromAttribute(String attribute,
+ private static void extractFromAttributes(Iterable<String> attributes,
RuleContext ruleContext, NestedSetBuilder<ResourceContainer> builderForTransitive,
NestedSetBuilder<ResourceContainer> builderForDirect) {
- for (AndroidResourcesProvider resources :
- ruleContext.getPrerequisites(attribute, Mode.TARGET, AndroidResourcesProvider.class)) {
- builderForTransitive.addTransitive(resources.getTransitiveAndroidResources());
- builderForDirect.addTransitive(resources.getDirectAndroidResources());
+ for (String attr : attributes) {
+ if (ruleContext.getAttribute(attr) == null) {
+ continue;
+ }
+ for (AndroidResourcesProvider resources :
+ ruleContext.getPrerequisites(attr, Mode.TARGET, AndroidResourcesProvider.class)) {
+ builderForTransitive.addTransitive(resources.getTransitiveAndroidResources());
+ builderForDirect.addTransitive(resources.getDirectAndroidResources());
+ }
}
}