aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java40
1 files changed, 25 insertions, 15 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java b/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
index 4795c7b1ac..930279b6a4 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
@@ -249,7 +249,7 @@ public class RuleFactory {
* A wrapper around an map of named attribute values that specifies whether the map's values
* are of "build-language" or of "native" types.
*/
- public interface AttributeValuesMap {
+ public interface AttributeValues<T> {
/**
* Returns {@code true} if all the map's values are "build-language typed", i.e., resulting
* from the evaluation of an expression in the build language. Returns {@code false} if all
@@ -258,16 +258,16 @@ public class RuleFactory {
*/
boolean valuesAreBuildLanguageTyped();
- Iterable<String> getAttributeNames();
+ Iterable<T> getAttributeAccessors();
- Object getAttributeValue(String attributeName);
-
- boolean isAttributeExplicitlySpecified(String attributeName);
+ String getName(T attributeAccessor);
+ Object getValue(T attributeAccessor);
+ boolean isExplicitlySpecified(T attributeAccessor);
}
- /** A {@link AttributeValuesMap} of explicit "build-language" values. */
- public static final class BuildLangTypedAttributeValuesMap implements AttributeValuesMap {
-
+ /** A {@link AttributeValues} of explicit "build-language" values. */
+ public static final class BuildLangTypedAttributeValuesMap
+ implements AttributeValues<Map.Entry<String, Object>> {
private final Map<String, Object> attributeValues;
public BuildLangTypedAttributeValuesMap(Map<String, Object> attributeValues) {
@@ -278,23 +278,32 @@ public class RuleFactory {
return attributeValues.containsKey(attributeName);
}
+ private Object getAttributeValue(String attributeName) {
+ return attributeValues.get(attributeName);
+ }
+
@Override
public boolean valuesAreBuildLanguageTyped() {
return true;
}
@Override
- public Iterable<String> getAttributeNames() {
- return attributeValues.keySet();
+ public Iterable<Map.Entry<String, Object>> getAttributeAccessors() {
+ return attributeValues.entrySet();
}
@Override
- public Object getAttributeValue(String attributeName) {
- return attributeValues.get(attributeName);
+ public String getName(Map.Entry<String, Object> attributeAccessor) {
+ return attributeAccessor.getKey();
+ }
+
+ @Override
+ public Object getValue(Map.Entry<String, Object> attributeAccessor) {
+ return attributeAccessor.getValue();
}
@Override
- public boolean isAttributeExplicitlySpecified(String attributeName) {
+ public boolean isExplicitlySpecified(Map.Entry<String, Object> attributeAccessor) {
return true;
}
}
@@ -331,8 +340,9 @@ public class RuleFactory {
String name = generator.getNameArg();
ImmutableMap.Builder<String, Object> builder = ImmutableMap.builder();
- for (String attributeName : args.getAttributeNames()) {
- builder.put(attributeName, args.getAttributeValue(attributeName));
+ for (Map.Entry<String, Object> attributeAccessor : args.getAttributeAccessors()) {
+ String attributeName = args.getName(attributeAccessor);
+ builder.put(attributeName, args.getValue(attributeAccessor));
}
builder.put("generator_name", (name == null) ? args.getAttributeValue("name") : name);
builder.put("generator_function", function.getName());