Skip to content

Commit

Permalink
Fix parsing of Groovy sources containing extra parentheses on Java 8
Browse files Browse the repository at this point in the history
  • Loading branch information
sambsnyd committed Feb 2, 2024
1 parent 516c70b commit c9daa70
Showing 1 changed file with 11 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -599,14 +599,22 @@ private <T> List<JRightPadded<T>> visitRightPadded(ASTNode[] nodes, @Nullable St
}

private Expression insideParentheses(ASTNode node, Function<Space, Expression> parenthesizedTree) {
AtomicInteger insideParenthesesLevel = node.getNodeMetaData("_INSIDE_PARENTHESES_LEVEL");
Integer insideParenthesesLevel;
Object rawIpl = node.getNodeMetaData("_INSIDE_PARENTHESES_LEVEL");
if(rawIpl instanceof AtomicInteger) {
// On Java 11 and newer _INSIDE_PARENTHESES_LEVEL is an AtomicInteger
insideParenthesesLevel = ((AtomicInteger) rawIpl).get();
} else {
// On Java 8 _INSIDE_PARENTHESES_LEVEL is a regular Integer
insideParenthesesLevel = (Integer) rawIpl;
}
if (insideParenthesesLevel != null) {
Stack<Space> openingParens = new Stack<>();
for (int i = 0; i < insideParenthesesLevel.get(); i++) {
for (int i = 0; i < insideParenthesesLevel; i++) {
openingParens.push(sourceBefore("("));
}
Expression parenthesized = parenthesizedTree.apply(whitespace());
for (int i = 0; i < insideParenthesesLevel.get(); i++) {
for (int i = 0; i < insideParenthesesLevel; i++) {
parenthesized = new J.Parentheses<>(randomId(), openingParens.pop(), Markers.EMPTY,
padRight(parenthesized, sourceBefore(")")));
}
Expand Down

0 comments on commit c9daa70

Please sign in to comment.