From 8f25f3198730393b02a4805e4fc8424a29a07d21 Mon Sep 17 00:00:00 2001 From: Greg Oledzki Date: Fri, 25 Jul 2025 13:43:14 +0200 Subject: [PATCH 1/3] Add parens when converting to OR --- ...SimplifyBooleanExpressionWithDeMorgan.java | 15 +++++++++++-- ...lifyBooleanExpressionWithDeMorganTest.java | 21 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorgan.java b/src/main/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorgan.java index 901fcff3a4..4d979282da 100644 --- a/src/main/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorgan.java +++ b/src/main/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorgan.java @@ -15,6 +15,8 @@ */ package org.openrewrite.staticanalysis; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import org.openrewrite.ExecutionContext; import org.openrewrite.Recipe; import org.openrewrite.Tree; @@ -95,13 +97,22 @@ public J visitUnary(J.Unary unary, ExecutionContext ctx) { comments.addAll(parenthesesBinary.getComments()); comments.addAll(binary.getComments()); prefix = prefix.withComments(comments); - binary = binary.withLeft(left).withRight(right).withOperator(newOperator).withPrefix(prefix); - return new ParenthesizeVisitor<>().visit(binary, ctx); + getCursor().getParent().putMessage("MIGHT_NEED_PARENTHESES", true); + return binary.withLeft(left).withRight(right).withOperator(newOperator).withPrefix(prefix); } } return requireNonNull(super.visitUnary(unary, ctx)); } + @Override + public @Nullable J postVisit(@NonNull J tree, ExecutionContext executionContext) { + J ret = super.postVisit(tree, executionContext); + if (getCursor().pollMessage("MIGHT_NEED_PARENTHESES") != null) { + return new ParenthesizeVisitor<>().visit(ret, executionContext); + }; + return ret; + } + private Expression negate(Expression expression) { if (expression instanceof J.Unary) { J.Unary unaryExpr = (J.Unary) expression; diff --git a/src/test/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorganTest.java b/src/test/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorganTest.java index 4d7dbabc72..cbddb64752 100644 --- a/src/test/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorganTest.java +++ b/src/test/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorganTest.java @@ -311,4 +311,25 @@ class Test { ) ); } + + @Test + void mixedOperators2() { + rewriteRun( + //language=java + java( + """ + class Test { + boolean a, b, c; + boolean x = a && !(b && c); + } + """, + """ + class Test { + boolean a, b, c; + boolean x = a && (!b || !c); + } + """ + ) + ); + } } From a139882d065ac9ea2a702bdbad6929d40311540f Mon Sep 17 00:00:00 2001 From: Greg Oledzki Date: Fri, 25 Jul 2025 13:49:41 +0200 Subject: [PATCH 2/3] ctx Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../SimplifyBooleanExpressionWithDeMorgan.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorgan.java b/src/main/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorgan.java index 4d979282da..bebdc43f19 100644 --- a/src/main/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorgan.java +++ b/src/main/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorgan.java @@ -105,9 +105,9 @@ public J visitUnary(J.Unary unary, ExecutionContext ctx) { } @Override - public @Nullable J postVisit(@NonNull J tree, ExecutionContext executionContext) { - J ret = super.postVisit(tree, executionContext); - if (getCursor().pollMessage("MIGHT_NEED_PARENTHESES") != null) { + public @Nullable J postVisit(@NonNull J tree, ExecutionContext ctx) { + J ret = super.postVisit(tree, ctx); + return new ParenthesizeVisitor<>().visit(ret, ctx); return new ParenthesizeVisitor<>().visit(ret, executionContext); }; return ret; From 7f669a50197c01688e4e171acfb80ce25000619a Mon Sep 17 00:00:00 2001 From: Greg Oledzki Date: Fri, 25 Jul 2025 13:51:12 +0200 Subject: [PATCH 3/3] ctx fixed --- .../staticanalysis/SimplifyBooleanExpressionWithDeMorgan.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorgan.java b/src/main/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorgan.java index bebdc43f19..7698ae8e19 100644 --- a/src/main/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorgan.java +++ b/src/main/java/org/openrewrite/staticanalysis/SimplifyBooleanExpressionWithDeMorgan.java @@ -107,8 +107,8 @@ public J visitUnary(J.Unary unary, ExecutionContext ctx) { @Override public @Nullable J postVisit(@NonNull J tree, ExecutionContext ctx) { J ret = super.postVisit(tree, ctx); + if (getCursor().pollMessage("MIGHT_NEED_PARENTHESES") != null) { return new ParenthesizeVisitor<>().visit(ret, ctx); - return new ParenthesizeVisitor<>().visit(ret, executionContext); }; return ret; }