aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar jcater <jcater@google.com>2017-11-10 01:31:20 +0100
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-11-10 23:27:52 +0100
commit3fa2e46f73802412772b0182e1e38e9dbbcda638 (patch)
treed5fd8d171c059e918a2d8fe18e680d781b91d9c7
parent2b1531802f90de3d46aea9b5d331899c1d459765 (diff)
Add getAttributeLocation to AttributeMap and related classes.
PiperOrigin-RevId: 175230893
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapper.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/DelegatingAttributeMapper.java6
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);
+ }
}