diff options
author | Pedro Liberal Fernandez <plf@google.com> | 2016-08-18 14:13:01 +0000 |
---|---|---|
committer | Philipp Wollermann <philwo@google.com> | 2016-08-18 17:25:29 +0000 |
commit | 837dbc1739258d72a5e7c4adb37ffe6aff847672 (patch) | |
tree | 416e3c0c0a81aa97fe0a6033c8e0da8b74130cc9 /src | |
parent | f3d431def1459e46afa91f565339cdc8ccbbe902 (diff) |
Fixes order of keyword arguments in the error message printed when a Java
method cannot be found when called from Skylark.
PAIR=laurentlb
--
MOS_MIGRATED_REVID=130636387
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java | 3 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java | 6 |
2 files changed, 8 insertions, 1 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 6ce3e780b8..1e49c91330 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 @@ -46,6 +46,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -754,7 +755,7 @@ public final class FuncallExpression extends Expression { posargs.add(objValue); // We copy this into an ImmutableMap in the end, but we can't use an ImmutableMap.Builder, or // we'd still have to have a HashMap on the side for the sake of properly handling duplicates. - Map<String, Object> kwargs = new HashMap<>(); + Map<String, Object> kwargs = new LinkedHashMap<>(); evalArguments(posargs, kwargs, env); return invokeObjectMethod( func.getName(), posargs.build(), ImmutableMap.<String, Object>copyOf(kwargs), this, env); diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java index 235968f7f2..7061bf6311 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java @@ -671,6 +671,12 @@ public class SkylarkEvaluationTest extends EvaluationTest { .update("mock", new Mock()) .setUp("b = mock.with_params(1, True, named=True, posOrNamed=True, optionalNamed=True)") .testLookup("b", "with_params(1, true, true, true, true)"); + new SkylarkTest() + .update("mock", new Mock()) + .setUp("") + .testIfExactError( + "Type Mock has no function with_params(int, bool, bool named, bool posOrNamed, int n)", + "mock.with_params(1, True, named=True, posOrNamed=True, n=2)"); } @Test |