From 104b669c55769613116180afc0bfd167771e6275 Mon Sep 17 00:00:00 2001 From: Juan Ceballos Date: Wed, 28 May 2025 15:01:20 -0600 Subject: [PATCH] fix: remove unnecessary continue in empty while loops --- .../staticanalysis/EmptyBlockVisitor.java | 14 ++++++++++---- .../openrewrite/staticanalysis/EmptyBlockTest.java | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/openrewrite/staticanalysis/EmptyBlockVisitor.java b/src/main/java/org/openrewrite/staticanalysis/EmptyBlockVisitor.java index bbe4c687ef..52983f1e1f 100644 --- a/src/main/java/org/openrewrite/staticanalysis/EmptyBlockVisitor.java +++ b/src/main/java/org/openrewrite/staticanalysis/EmptyBlockVisitor.java @@ -48,9 +48,12 @@ public class EmptyBlockVisitor

extends JavaIsoVisitor

{ public J.WhileLoop visitWhileLoop(J.WhileLoop whileLoop, P p) { J.WhileLoop w = super.visitWhileLoop(whileLoop, p); - if (Boolean.TRUE.equals(emptyBlockStyle.getLiteralWhile()) && isEmptyBlock(w.getBody())) { + if (Boolean.TRUE.equals(emptyBlockStyle.getLiteralWhile()) && w.getBody() instanceof J.Block) { J.Block body = (J.Block) w.getBody(); - w = continueStatement.apply(updateCursor(w), body.getCoordinates().lastStatement()); + List statements = body.getStatements(); + if (statements.size() == 1 && statements.get(0) instanceof J.Continue) { + w = w.withBody(body.withStatements(new ArrayList<>())); + } } return w; @@ -60,9 +63,12 @@ public J.WhileLoop visitWhileLoop(J.WhileLoop whileLoop, P p) { public J.DoWhileLoop visitDoWhileLoop(J.DoWhileLoop doWhileLoop, P p) { J.DoWhileLoop w = super.visitDoWhileLoop(doWhileLoop, p); - if (Boolean.TRUE.equals(emptyBlockStyle.getLiteralWhile()) && isEmptyBlock(w.getBody())) { + if (Boolean.TRUE.equals(emptyBlockStyle.getLiteralWhile()) && w.getBody() instanceof J.Block) { J.Block body = (J.Block) w.getBody(); - w = continueStatement.apply(updateCursor(w), body.getCoordinates().lastStatement()); + List statements = body.getStatements(); + if (statements.size() == 1 && statements.get(0) instanceof J.Continue) { + w = w.withBody(body.withStatements(new ArrayList<>())); + } } return w; diff --git a/src/test/java/org/openrewrite/staticanalysis/EmptyBlockTest.java b/src/test/java/org/openrewrite/staticanalysis/EmptyBlockTest.java index b6b13c4685..0a44c353c6 100644 --- a/src/test/java/org/openrewrite/staticanalysis/EmptyBlockTest.java +++ b/src/test/java/org/openrewrite/staticanalysis/EmptyBlockTest.java @@ -223,8 +223,10 @@ void emptyLoops() { public class A { public void foo() { while(true) { + continue; } do { + continue; } while(true); } } @@ -233,10 +235,8 @@ public void foo() { public class A { public void foo() { while(true) { - continue; } do { - continue; } while(true); } }