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); + } }