diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java index 0622d212479f093650708cb6e5007d0041f6abb3..1e6eae74082e36261e421accc92efb5a54480359 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java @@ -8,6 +8,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -224,7 +225,13 @@ public class RegionMaker { } stack.addExit(out); BlockNode loopBody = condInfo.getThenBlock(); - Region body = makeRegion(loopBody, stack); + Region body; + if (Objects.equals(loopBody, loopStart)) { + // empty loop body + body = new Region(loopRegion); + } else { + body = makeRegion(loopBody, stack); + } // add blocks from loop start to first condition block BlockNode conditionBlock = condInfo.getIfBlock(); if (loopStart != conditionBlock) { diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestDoWhileBreak3.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestDoWhileBreak3.java index 786d0e9bf91f6e8b70b0dead9e92ef073f3b4f7f..097a5d18121e996144bacf56ffb35725313c3191 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/loops/TestDoWhileBreak3.java +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestDoWhileBreak3.java @@ -4,7 +4,6 @@ import java.util.Iterator; import org.junit.jupiter.api.Test; -import jadx.NotYetImplemented; import jadx.tests.api.IntegrationTest; import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat; @@ -23,11 +22,11 @@ public class TestDoWhileBreak3 extends IntegrationTest { } } - @NotYetImplemented @Test public void test() { assertThat(getClassNode(TestCls.class)) .code() - .containsOnlyOnce("while"); + .containsOne("while") + .containsLines(2, "while (this.it.hasNext() && this.it.next() != null) {", "}"); } }