diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockProcessor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockProcessor.java index ab587e26d..da40d6792 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockProcessor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockProcessor.java @@ -454,7 +454,8 @@ public class BlockProcessor extends AbstractVisitor { } BlockNode exitBlock = mth.getExitBlocks().get(0); if (exitBlock.getInstructions().size() != 1 - || exitBlock.contains(AFlag.SYNTHETIC)) { + || exitBlock.contains(AFlag.SYNTHETIC) + || exitBlock.contains(AType.SPLITTER_BLOCK)) { return false; } List preds = exitBlock.getPredecessors(); diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchNoMove.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchNoMove.java new file mode 100644 index 000000000..83c4759b7 --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchNoMove.java @@ -0,0 +1,31 @@ +package jadx.tests.integration.trycatch; + +import org.junit.Test; + +import jadx.core.dex.nodes.ClassNode; +import jadx.tests.api.SmaliTest; + +import static jadx.tests.api.utils.JadxMatchers.containsOne; +import static org.junit.Assert.assertThat; + +public class TestTryCatchNoMove extends SmaliTest { + +// private static void test(AutoCloseable closeable) { +// if (closeable != null) { +// try { +// closeable.close(); +// } catch (Exception ignored) { +// } +// } +// } + + @Test + public void test() { + ClassNode cls = getClassNodeFromSmaliWithPath("trycatch", "TestTryCatchNoMove"); + String code = cls.getCode().toString(); + + assertThat(code, containsOne("if (autoCloseable != null) {")); + assertThat(code, containsOne("try {")); + assertThat(code, containsOne("autoCloseable.close();")); + } +} diff --git a/jadx-core/src/test/smali/trycatch/TestTryCatchNoMove.smali b/jadx-core/src/test/smali/trycatch/TestTryCatchNoMove.smali new file mode 100644 index 000000000..dd27a3bbd --- /dev/null +++ b/jadx-core/src/test/smali/trycatch/TestTryCatchNoMove.smali @@ -0,0 +1,18 @@ +.class public LTestTryCatchNoMove; +.super Ljava/lang/Object; + +.method private static test(Ljava/lang/AutoCloseable;)V + .locals 0 + + if-eqz p0, :cond_0 + + .line 187 + :try_start_0 + invoke-interface {p0}, Ljava/lang/AutoCloseable;->close()V + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + :catch_0 + :cond_0 + return-void +.end method