aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Nathan Harmata <nharmata@google.com>2016-06-10 15:58:30 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-06-10 17:15:56 +0000
commit4ec1e588ec7b375714fdc33b6c07be8b081f7372 (patch)
treec615b0dad00fd91823cb1bcf998c0f22c2cb6d96 /src
parent8fbf1e7d097a2e06c738759f08787bad227c3349 (diff)
Have SkylarkAttr expose whether a skylark rule class attribute type is configurable or not.
-- MOS_MIGRATED_REVID=124565334
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java
index bdc9cb9b6f..feb73e7043 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.rules;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute;
@@ -42,9 +43,13 @@ import com.google.devtools.build.lib.syntax.Type.ConversionException;
import com.google.devtools.build.lib.syntax.UserDefinedFunction;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.FileTypeSet;
+import com.google.devtools.build.lib.util.Preconditions;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Nullable;
/**
* A helper class to provide Attr module in Skylark.
@@ -249,15 +254,32 @@ public final class SkylarkAttr {
}
}
+ private static final Map<Type<?>, String> whyNotConfigurable =
+ ImmutableMap.<Type<?>, String>builder()
+ .put(BuildType.LICENSE,
+ "loading phase license checking logic assumes non-configurable values")
+ .put(BuildType.OUTPUT, "output paths are part of the static graph structure")
+ .build();
+
+ /**
+ * If the given attribute type is non-configurable, returns the reason why. Otherwise, returns
+ * {@code null}.
+ */
+ @Nullable
+ public static String maybeGetNonConfigurableReason(Type<?> type) {
+ return whyNotConfigurable.get(type);
+ }
+
private static Descriptor createNonconfigurableAttrDescriptor(
SkylarkDict<String, Object> kwargs,
Type<?> type,
- String whyNotConfigurable,
FuncallExpression ast,
Environment env) throws EvalException {
+ String whyNotConfigurableReason =
+ Preconditions.checkNotNull(maybeGetNonConfigurableReason(type), type);
try {
return new Descriptor(
- createAttribute(type, kwargs, ast, env).nonconfigurable(whyNotConfigurable));
+ createAttribute(type, kwargs, ast, env).nonconfigurable(whyNotConfigurableReason));
} catch (ConversionException e) {
throw new EvalException(ast.getLocation(), e.getMessage());
}
@@ -725,7 +747,6 @@ public final class SkylarkAttr {
EvalUtils.<String, Object>optionMap(
env, DEFAULT_ARG, defaultO, MANDATORY_ARG, mandatory),
BuildType.OUTPUT,
- "output paths are part of the static graph structure",
ast,
env);
}
@@ -875,7 +896,6 @@ public final class SkylarkAttr {
EvalUtils.<String, Object>optionMap(
env, DEFAULT_ARG, defaultO, MANDATORY_ARG, mandatory),
BuildType.LICENSE,
- "loading phase license checking logic assumes non-configurable values",
ast,
env);
}