From 78ca6ad69e7a0d0b4985eea151cdc88d0dc32393 Mon Sep 17 00:00:00 2001 From: Sam Snyder Date: Fri, 12 Jul 2024 16:01:39 -0700 Subject: [PATCH] Fix handling of short-ternary operator when it is contained within parentheses. --- .../groovy/GroovyParserVisitor.java | 18 +++++++++--------- .../openrewrite/groovy/tree/TernaryTest.java | 7 +++++++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/rewrite-groovy/src/main/java/org/openrewrite/groovy/GroovyParserVisitor.java b/rewrite-groovy/src/main/java/org/openrewrite/groovy/GroovyParserVisitor.java index ae1c00c7eaf..65dfd4ca942 100644 --- a/rewrite-groovy/src/main/java/org/openrewrite/groovy/GroovyParserVisitor.java +++ b/rewrite-groovy/src/main/java/org/openrewrite/groovy/GroovyParserVisitor.java @@ -1785,15 +1785,15 @@ public void visitReturnStatement(ReturnStatement return_) { @Override public void visitShortTernaryExpression(ElvisOperatorExpression ternary) { - Space fmt = whitespace(); - Expression trueExpr = visit(ternary.getBooleanExpression()); - J.Ternary elvis = new J.Ternary(randomId(), fmt, Markers.EMPTY, - trueExpr, - padLeft(sourceBefore("?"), trueExpr), - padLeft(sourceBefore(":"), visit(ternary.getFalseExpression())), - typeMapping.type(staticType(ternary))); - elvis = elvis.withMarkers(elvis.getMarkers().add(new Elvis(randomId()))); - queue.add(elvis); + queue.add(insideParentheses(ternary, fmt -> { + Expression trueExpr = visit(ternary.getBooleanExpression()); + J.Ternary elvis = new J.Ternary(randomId(), fmt, Markers.EMPTY, + trueExpr, + padLeft(sourceBefore("?"), trueExpr), + padLeft(sourceBefore(":"), visit(ternary.getFalseExpression())), + typeMapping.type(staticType(ternary))); + return elvis.withMarkers(elvis.getMarkers().add(new Elvis(randomId()))); + })); } @Override diff --git a/rewrite-groovy/src/test/java/org/openrewrite/groovy/tree/TernaryTest.java b/rewrite-groovy/src/test/java/org/openrewrite/groovy/tree/TernaryTest.java index 6196cae140f..09ef3f92b64 100644 --- a/rewrite-groovy/src/test/java/org/openrewrite/groovy/tree/TernaryTest.java +++ b/rewrite-groovy/src/test/java/org/openrewrite/groovy/tree/TernaryTest.java @@ -35,6 +35,13 @@ void insideParentheses() { ); } + @Test + void elvisInParens() { + rewriteRun( + groovy(" ( System.getProperty(\"foo\") ?: false ) ") + ); + } + @Test void ternary() { rewriteRun(