This is an automated email from the ASF dual-hosted git repository. kenhuuu pushed a commit to branch stringify-params in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 4c246f6cf5e3399b3e7b853a1432ca3589b129a1 Author: Ken Hu <[email protected]> AuthorDate: Tue Apr 14 16:14:43 2026 -0700 Fix null map key parsing in GenericLiteralVisitor The visitor treated all keyword map keys as their text representation, so a null key in [null:"value"] was parsed as the String "null" instead of Java null. This broke round-tripping maps with null keys through GremlinLang serialization and ANTLR parsing. --- .../tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java | 3 ++- .../tinkerpop/gremlin/language/grammar/GeneralLiteralVisitorTest.java | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java index 6a7f621c10..d133fb6bb1 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java @@ -349,7 +349,8 @@ public class GenericLiteralVisitor extends DefaultGremlinBaseVisitor<Object> { } else if (kctx instanceof GremlinParser.GenericMapLiteralContext) { key = visitGenericMapLiteral((GremlinParser.GenericMapLiteralContext) kctx); } else if (kctx instanceof GremlinParser.KeywordContext) { - key = ((GremlinParser.KeywordContext) kctx).getText(); + final String keywordText = ((GremlinParser.KeywordContext) kctx).getText(); + key = keywordText.equals("null") ? null : keywordText; } else if (kctx instanceof GremlinParser.NakedKeyContext) { key = ((GremlinParser.NakedKeyContext) kctx).getText(); } else if (kctx instanceof TerminalNode) { diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/GeneralLiteralVisitorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/GeneralLiteralVisitorTest.java index ed519b6b31..71f4acce19 100644 --- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/GeneralLiteralVisitorTest.java +++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/GeneralLiteralVisitorTest.java @@ -642,6 +642,10 @@ public class GeneralLiteralVisitorTest { {"[{'x'}: 'x']", createMap(new Object[]{new HashSet<>(Arrays.asList("x")), "x"})}, {"[['x']: ['x',{'y'}]]", createMap(new Object[]{Arrays.asList("x"), Arrays.asList("x", new HashSet<>(Arrays.asList("y")))})}, {"[['x']: ['x',['y']]]", createMap(new Object[]{Arrays.asList("x"), Arrays.asList("x", Arrays.asList("y"))})}, + {"[null:'x']", createMap(new Object[]{null, "x"})}, + {"[null:null]", createMap(new Object[]{null, null})}, + {"[null:'x','y':'z']", createMap(new Object[]{null, "x", "y", "z"})}, + {"['null':'x']", createMap(new Object[]{"null", "x"})}, }); }
