diff options
author | Googler <noreply@google.com> | 2015-12-06 18:31:53 +0000 |
---|---|---|
committer | David Chen <dzc@google.com> | 2015-12-07 21:15:45 +0000 |
commit | 03083858837c804f7992e6f5d27f39acdb66d61a (patch) | |
tree | 611b3815243c92c8d90499b96b681627410bdda3 /src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java | |
parent | 2ec1b0ae403345b9a9add4d84fe65d6f92bc375b (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.java | 31 |
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()); + } } } |