diff options
author | cparsons <cparsons@google.com> | 2018-04-11 11:09:17 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-04-11 11:11:22 -0700 |
commit | 4baafaca73cee2d3237999048acfc0d5f5f59a5b (patch) | |
tree | f67e4fa76f74c9458c579f4bec0e09d892cbb7da /src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java | |
parent | 51ae67a626aae45163175a1eee518b9e96e33fbc (diff) |
Introduce Param.legacyNamed() to handle migration from @SkylarkSignature to @SkylarkCallable.
@SkylarkSignature.parameters() treat named()=true for parameters regardless of whether named() was actually set to true, and thus for ease of migration we mark migrated parameters as legacyNamed() = true, which is currently semantically equivalent to named() = true.
We make a distinction so that it's easier to bulk fix these later.
RELNOTES: None.
PiperOrigin-RevId: 192477405
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java index c9f3aee01d..e19113c93f 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java @@ -484,6 +484,10 @@ public final class FuncallExpression extends Expression { return result; } + private static boolean isParamNamed(Param param) { + return param.named() || param.legacyNamed(); + } + /** * Constructs the parameters list to actually pass to the method, filling with default values if * any. If there is a type or argument mismatch, returns a result containing an error message. @@ -557,13 +561,14 @@ public final class FuncallExpression extends Expression { "expected value of type '%s' for parameter '%s'", type.toString(), param.name())); } - if (param.named() && keys.contains(param.name())) { + if (isParamNamed(param) && keys.contains(param.name())) { return ArgumentListConversionResult.fromError( String.format("got multiple values for keyword argument '%s'", param.name())); } argIndex++; } else { // No more positional arguments, or no more positional parameters. - if (param.named() && keys.remove(param.name())) { // Param specified by keyword argument. + if (isParamNamed(param) && keys.remove(param.name())) { + // Param specified by keyword argument. value = kwargs.get(param.name()); if (!type.contains(value)) { return ArgumentListConversionResult.fromError( |