diff options
author | 2016-12-01 21:38:25 +0000 | |
---|---|---|
committer | 2016-12-02 07:44:08 +0000 | |
commit | 7f534231c3fcf652f34d45ff2ee59b60220e3433 (patch) | |
tree | 6c82b2ad22dac0db8c4a83c6e8d020b739ebaf22 /src/main/java/com/google/devtools/build/lib/rules/android | |
parent | 9d837844c7651a8de6323f5efab41e86e096fea8 (diff) |
Clean up RuleContext's attribute access API.
All calls now go through RuleContext.attributes(), which
guarantees both native and aspect-supplied attributes are checked.
For aspect attributes, only type queries are supported (e.g. "does
this attribute exist?", "what is its type?"). Not value queries.
This is because the code this is cleaning up accesses aspect
attributes through a String->Attribute map, which doesn't include
values. If ever needed we could further extend with something
more robust.
--
MOS_MIGRATED_REVID=140771242
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android')
4 files changed, 11 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index e77b66a3ca..f43fa830e4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -532,7 +532,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { NestedSet<Artifact> filesToBuild = filesBuilder.build(); Iterable<Artifact> dataDeps = ImmutableList.of(); - if (ruleContext.getAttribute("data") != null + if (ruleContext.attributes().has("data", BuildType.LABEL_LIST) && ruleContext.getAttributeMode("data") == Mode.DATA) { dataDeps = ruleContext.getPrerequisiteArtifacts("data", Mode.DATA).list(); } 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 31ac2bedb1..8dfe771c21 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 @@ -95,8 +95,9 @@ public class AndroidCommon { public static final <T extends TransitiveInfoProvider> Iterable<T> getTransitivePrerequisites( RuleContext ruleContext, Mode mode, final Class<T> classType) { IterablesChain.Builder<T> builder = IterablesChain.builder(); + AttributeMap attributes = ruleContext.attributes(); for (String attr : TRANSITIVE_ATTRIBUTES) { - if (ruleContext.getAttribute(attr) != null) { + if (ruleContext.attributes().has(attr, BuildType.LABEL_LIST)) { builder.add(ruleContext.getPrerequisites(attr, mode, classType)); } } @@ -107,7 +108,7 @@ public class AndroidCommon { RuleContext ruleContext, Mode mode) { ImmutableList.Builder<TransitiveInfoCollection> builder = ImmutableList.builder(); for (String attr : TRANSITIVE_ATTRIBUTES) { - if (ruleContext.getAttribute(attr) != null) { + if (ruleContext.attributes().has(attr, BuildType.LABEL_LIST)) { builder.addAll(ruleContext.getPrerequisites(attr, mode)); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java b/src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java index 7290259437..4d13e039ff 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction; import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Substitution; import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Template; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.rules.java.JavaPluginInfoProvider; import com.google.devtools.build.lib.rules.java.JavaTargetAttributes; import com.google.devtools.build.lib.syntax.Type; @@ -204,7 +205,7 @@ public final class DataBinding { if (DataBinding.isEnabled(ruleContext)) { dataBindingMetadataOutputs.addAll(getMetadataOutputs(ruleContext)); } - if (ruleContext.getAttribute("exports") != null) { + if (ruleContext.attributes().has("exports", BuildType.LABEL_LIST)) { for (UsesDataBindingProvider provider : ruleContext.getPrerequisites("exports", RuleConfiguredTarget.Mode.TARGET, UsesDataBindingProvider.class)) { dataBindingMetadataOutputs.addAll(provider.getMetadataOutputs()); 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 0c4b56fd37..269769a6b1 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 @@ -21,6 +21,7 @@ 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.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.rules.android.AndroidResourcesProvider.ResourceContainer; @@ -98,11 +99,12 @@ public final class ResourceDependencies { transitiveDependencies.build(), directDependencies.build()); } - private static void extractFromAttributes(Iterable<String> attributes, + private static void extractFromAttributes(Iterable<String> attributeNames, RuleContext ruleContext, NestedSetBuilder<ResourceContainer> builderForTransitive, NestedSetBuilder<ResourceContainer> builderForDirect) { - for (String attr : attributes) { - if (ruleContext.getAttribute(attr) == null) { + AttributeMap attributes = ruleContext.attributes(); + for (String attr : attributeNames) { + if (!attributes.has(attr, BuildType.LABEL_LIST) && !attributes.has(attr, BuildType.LABEL)) { continue; } for (AndroidResourcesProvider resources : |