diff options
author | 2017-11-10 01:31:20 +0100 | |
---|---|---|
committer | 2017-11-10 23:27:52 +0100 | |
commit | 3fa2e46f73802412772b0182e1e38e9dbbcda638 (patch) | |
tree | d5fd8d171c059e918a2d8fe18e680d781b91d9c7 | |
parent | 2b1531802f90de3d46aea9b5d331899c1d459765 (diff) |
Add getAttributeLocation to AttributeMap and related classes.
PiperOrigin-RevId: 175230893
5 files changed, 42 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapper.java index db7d6f0f3c..c866cbd84b 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapper.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapper.java @@ -17,23 +17,24 @@ package com.google.devtools.build.lib.analysis; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.syntax.Type; /** - * An {@link AttributeMap} that supports attribute type queries on both a rule - * and its aspects and attribute value queries on the rule. + * An {@link AttributeMap} that supports attribute type queries on both a rule and its aspects and + * attribute value queries on the rule. * - * <p>An attribute type query is anything accessible from {@link Attribute} (i.e. - * anything about how the attribute is integrated into the {@link RuleClass}). An - * attribute value query is anything related to the actual value an attribute takes. + * <p>An attribute type query is anything accessible from {@link Attribute} (i.e. anything about how + * the attribute is integrated into the {@link RuleClass}). An attribute value query is anything + * related to the actual value an attribute takes. * - * <p>For example, given {@code deps = [":adep"]}, checking that {@code deps} exists - * or that it's type is {@link BuildType.LABEL_LIST} are type queries. Checking that - * its value is explicitly set in the BUILD File or that its value - * {@code [":adep"]} are value queries.. + * <p>For example, given {@code deps = [":adep"]}, checking that {@code deps} exists or that it's + * type is {@link com.google.devtools.build.lib.packages.BuildType#LABEL_LIST} are type queries. + * Checking that its value is explicitly set in the BUILD File or that its value {@code [":adep"]} + * are value queries.. * * <p>Value queries on aspect attributes trigger {@link UnsupportedOperationException}. */ @@ -167,4 +168,13 @@ class AspectAwareAttributeMapper implements AttributeMap { && aspectAttributes.get(attrName).getType() == type; } } + + @Override + public Location getAttributeLocation(String attrName) { + if (ruleAttributes.has(attrName)) { + return ruleAttributes.getAttributeLocation(attrName); + } else { + return Location.BUILTIN; + } + } }
\ No newline at end of file diff --git a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java index ec03962931..c2725a3922 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java +++ b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java @@ -16,6 +16,7 @@ package com.google.devtools.build.lib.packages; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.BuildType.SelectorList; import com.google.devtools.build.lib.syntax.Type; import javax.annotation.Nullable; @@ -277,4 +278,9 @@ public abstract class AbstractAttributeMapper implements AttributeMap { public <T> boolean has(String attrName, Type<T> type) { return getAttributeType(attrName) == type; } + + @Override + public Location getAttributeLocation(String attrName) { + return attributes.getAttributeLocation(attrName); + } } diff --git a/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java index cc3b5ee018..a43fd86bbe 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java +++ b/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java @@ -21,6 +21,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.CollectionUtils; +import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.Attribute.ComputationLimiter; import com.google.devtools.build.lib.packages.BuildType.Selector; import com.google.devtools.build.lib.packages.BuildType.SelectorList; @@ -545,6 +546,11 @@ public class AggregatingAttributeMapper extends AbstractAttributeMapper { public <T> boolean has(String attrName, Type<T> type) { return owner.has(attrName, type); } + + @Override + public Location getAttributeLocation(String attrName) { + return owner.getAttributeLocation(attrName); + } }; } diff --git a/src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java b/src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java index a573bf038a..d00c6db754 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java +++ b/src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.packages; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.syntax.Type; import javax.annotation.Nullable; @@ -95,9 +96,10 @@ public interface AttributeMap { */ boolean isAttributeValueExplicitlySpecified(String attributeName); - /** - * An interface which accepts {@link Attribute}s, used by {@link #visitLabels}. - */ + /** Returns the {@link Location} at which the attribute was defined. */ + Location getAttributeLocation(String attrName); + + /** An interface which accepts {@link Attribute}s, used by {@link #visitLabels}. */ interface AcceptsLabelAttribute { /** * Accept a (Label, Attribute) pair describing a dependency edge. diff --git a/src/main/java/com/google/devtools/build/lib/packages/DelegatingAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/DelegatingAttributeMapper.java index 5e56c99e1d..37163fb115 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/DelegatingAttributeMapper.java +++ b/src/main/java/com/google/devtools/build/lib/packages/DelegatingAttributeMapper.java @@ -16,6 +16,7 @@ package com.google.devtools.build.lib.packages; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.syntax.Type; import javax.annotation.Nullable; @@ -106,4 +107,9 @@ public class DelegatingAttributeMapper implements AttributeMap { public <T> boolean has(String attrName, Type<T> type) { return delegate.has(attrName, type); } + + @Override + public Location getAttributeLocation(String attrName) { + return delegate.getAttributeLocation(attrName); + } } |