Skip to content

Commit 08aec2e

Browse files
Groovy: fix parsing of property expressions in parens (#7506)
1 parent 32a5cb4 commit 08aec2e

2 files changed

Lines changed: 17 additions & 0 deletions

File tree

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3326,6 +3326,12 @@ private String readConstantSegmentBeforeNextInterpolation(Delimiter delimiter) {
33263326
// Only for groovy 3+, because lower versions do always return `-1` for objectExpression.lineNumber / objectExpression.columnNumber
33273327
MethodCallExpression expr = (MethodCallExpression) node;
33283328
return determineParenthesisLevel(expr, expr.getObjectExpression().getLineNumber(), expr.getLineNumber(), expr.getObjectExpression().getColumnNumber(), expr.getColumnNumber());
3329+
} else if (node instanceof PropertyExpression && source.charAt(indexOfNextNonWhitespace(cursor, source)) == '(') {
3330+
// Groovy doesn't set _INSIDE_PARENTHESES_LEVEL on parenthesized PropertyExpressions like `(a.b)` but does
3331+
// extend the column range to cover the wrapping parens. Only apply when the cursor is positioned at `(` to
3332+
// avoid double-counting in cases where a caller already consumed the wrapping parens (e.g. map entry keys).
3333+
PropertyExpression expr = (PropertyExpression) node;
3334+
return determineParenthesisLevel(expr, expr.getObjectExpression().getLineNumber(), expr.getLineNumber(), expr.getObjectExpression().getColumnNumber(), expr.getColumnNumber());
33293335
}
33303336
}
33313337

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,17 @@ void starAccess() {
3333
);
3434
}
3535

36+
@Test
37+
void starAccessInsideParenthesesFollowedByMethodCall() {
38+
rewriteRun(
39+
groovy(
40+
"""
41+
def updates = (push*.remoteUpdates).flatten()
42+
"""
43+
)
44+
);
45+
}
46+
3647
@Test
3748
void fieldAccess() {
3849
rewriteRun(

0 commit comments

Comments
 (0)