diff options
author | 2016-09-06 14:54:22 +0000 | |
---|---|---|
committer | 2016-09-06 15:39:59 +0000 | |
commit | cb3d799cc89276c9b1d9185e5556df870abec1c9 (patch) | |
tree | 84766f86959474ca9844b0c9c208c285d578200f /src/main/java/com/google | |
parent | 304f5cbfac3c8cc272a0c43d3077a4cff0e1cc5a (diff) |
Skylark no longer crashes when the default value of an attribute is a label string that points to a remote repository.
Fixes #1442.
--
MOS_MIGRATED_REVID=132320130
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/packages/Attribute.java | 14 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java | 2 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java index fed7bd4c67..80bba9bde3 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java @@ -620,14 +620,24 @@ public final class Attribute implements Comparable<Attribute> { /** * See value(TYPE) above. This method is only meant for Skylark usage. + * + * <p>The parameter {@code context} is relevant iff the default value is a Label string. + * In this case, {@code context} must point to the parent Label in order to be able to convert + * the default value string to a proper Label. */ - public Builder<TYPE> defaultValue(Object defaultValue) throws ConversionException { + public Builder<TYPE> defaultValue(Object defaultValue, Object context) + throws ConversionException { Preconditions.checkState(!valueSet, "the default value is already set"); - value = type.convert(defaultValue, "attribute " + name); + value = type.convert(defaultValue, "attribute " + name, context); valueSet = true; return this; } + /** See value(TYPE) above. This method is only meant for Skylark usage. */ + public Builder<TYPE> defaultValue(Object defaultValue) throws ConversionException { + return defaultValue(defaultValue, null); + } + public boolean isValueSet() { return valueSet; } 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 ea52e113a4..2e4bbb6ea7 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 @@ -172,7 +172,7 @@ public final class SkylarkAttr { new SkylarkComputedDefaultTemplate( type, callback.getParameterNames(), callback, ast.getLocation())); } else { - builder.defaultValue(defaultValue); + builder.defaultValue(defaultValue, env.getGlobals().label()); } } |