From 877e9feb697de3833bee9f716dd58b06f86fea7d Mon Sep 17 00:00:00 2001 From: Hasnae R Date: Mon, 5 Feb 2024 03:12:36 +0100 Subject: [PATCH] welcome map with string key value pairs support (cherry picked from commit 7b0c8b766029f010656f3f3ca44fe8870b710024) --- .../com/sun/tools/javac/parser/JavacParser.java | 17 +++++++++++++++-- .../util/Map/ViqueenSyntaxSugarMapTest.java | 13 ++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java index 863fcee56c52d..0dd6c0651bfd3 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java @@ -2717,7 +2717,7 @@ public JCExpression variableInitializer() { public JCExpression variableInitializer(JCExpression type) { if (token.kind == LBRACE) { - if (type instanceof JCIdent && ((JCIdent) type).name.equals(names.fromString("Map"))) { + if (isMapType(type)) { return mapInitializer(token.pos); } else { return arrayInitializer(token.pos, null); @@ -2726,6 +2726,16 @@ public JCExpression variableInitializer(JCExpression type) { return parseExpression(); } + private boolean isMapType(JCExpression type) { + final Object localType; + if (type instanceof JCTypeApply) { + localType = ((JCTypeApply) type).getType(); + } else { + localType = type; + } + return (localType instanceof JCIdent && ((JCIdent) localType).name.equals(names.fromString("Map"))); + } + private JCExpression mapInitializer(int pos) { List entries = mapEntries(pos); return F.at(pos).NewMap(entries); @@ -2734,8 +2744,11 @@ private JCExpression mapInitializer(int pos) { private List mapEntries(int pos) { accept(LBRACE); ListBuffer entries = new ListBuffer<>(); - if (token.kind != RBRACE) { + while (token.kind != RBRACE) { entries.append(mapEntry(pos)); + if (token.kind != RBRACE) { + accept(COMMA); + } } accept(RBRACE); return entries.toList(); diff --git a/test/jdk/java/util/Map/ViqueenSyntaxSugarMapTest.java b/test/jdk/java/util/Map/ViqueenSyntaxSugarMapTest.java index 5f2885cb3b095..9d0867e98a002 100644 --- a/test/jdk/java/util/Map/ViqueenSyntaxSugarMapTest.java +++ b/test/jdk/java/util/Map/ViqueenSyntaxSugarMapTest.java @@ -20,7 +20,18 @@ public void testEmptyMap() { public void testSingletonMap() { Map singleton = { "sweden": "stockholm" - }; + }; assertEquals(singleton.size(), 1); } + + @Test + public void testFullMapWithStringKeyValuePairs() { + Map capitals = { + "norway": "oslo", + "australia": "canberra", + "morocco": "rabat", + "sweden": "stockholm" + }; + assertEquals(capitals.size(), 4); + } }