Skip to content

Commit 32a5cb4

Browse files
Groovy: more fixes to map key expressions with parens (#7507)
1 parent 6daaa19 commit 32a5cb4

2 files changed

Lines changed: 70 additions & 1 deletion

File tree

rewrite-groovy/src/main/java/org/openrewrite/groovy/GroovyParserVisitor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2107,7 +2107,9 @@ public void visitMapEntryExpression(MapEntryExpression expression) {
21072107
Expression key;
21082108
int saveCursor = cursor;
21092109
Space beforeOpenParen = whitespace();
2110-
if (cursor < source.length() && source.charAt(cursor) == '(') {
2110+
Integer keyParenLevel = getInsideParenthesesLevel(expression.getKeyExpression());
2111+
if ((keyParenLevel == null || keyParenLevel == 0) &&
2112+
cursor < source.length() && source.charAt(cursor) == '(') {
21112113
skip("(");
21122114
Expression inner = doVisit(expression.getKeyExpression());
21132115
key = new J.Parentheses<>(randomId(), beforeOpenParen, Markers.EMPTY,

rewrite-groovy/src/test/java/org/openrewrite/groovy/tree/MapEntryTest.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,71 @@ def writeProperties(Map m) {}
8383
)
8484
);
8585
}
86+
87+
@Test
88+
void parenthesizedKeyInMapLiteral() {
89+
rewriteRun(
90+
groovy(
91+
"""
92+
def first(String key) {
93+
def m = [(key): "v"]
94+
}
95+
"""
96+
)
97+
);
98+
}
99+
100+
@Test
101+
void parenthesizedKeyInMapLiteralMultipleEntries() {
102+
rewriteRun(
103+
groovy(
104+
"""
105+
def m(String k1, String k2) {
106+
return [(k1): "v1", (k2): "v2"]
107+
}
108+
"""
109+
)
110+
);
111+
}
112+
113+
@Test
114+
void parenthesizedKeyExpressionInMapLiteral() {
115+
rewriteRun(
116+
groovy(
117+
"""
118+
class Defaults {
119+
static final String KEY = "k"
120+
}
121+
def m = [(Defaults.KEY): "v"]
122+
"""
123+
)
124+
);
125+
}
126+
127+
@Test
128+
void parenthesizedKeyInMapLiteralAsArgument() {
129+
rewriteRun(
130+
groovy(
131+
"""
132+
def writeProperties(Map m) {}
133+
def call(String key) {
134+
writeProperties([(key): "v"])
135+
}
136+
"""
137+
)
138+
);
139+
}
140+
141+
@Test
142+
void parenthesizedKeyInNestedMapLiteral() {
143+
rewriteRun(
144+
groovy(
145+
"""
146+
def first(String key) {
147+
def m = [outer: [(key): "v"]]
148+
}
149+
"""
150+
)
151+
);
152+
}
86153
}

0 commit comments

Comments
 (0)