From 4ec1e588ec7b375714fdc33b6c07be8b081f7372 Mon Sep 17 00:00:00 2001 From: Nathan Harmata Date: Fri, 10 Jun 2016 15:58:30 +0000 Subject: Have SkylarkAttr expose whether a skylark rule class attribute type is configurable or not. -- MOS_MIGRATED_REVID=124565334 --- .../devtools/build/lib/rules/SkylarkAttr.java | 28 ++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'src') 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, String> whyNotConfigurable = + ImmutableMap., 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 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.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.optionMap( env, DEFAULT_ARG, defaultO, MANDATORY_ARG, mandatory), BuildType.LICENSE, - "loading phase license checking logic assumes non-configurable values", ast, env); } -- cgit v1.2.3