diff --git a/jadx-core/src/main/java/jadx/core/dex/instructions/IfNode.java b/jadx-core/src/main/java/jadx/core/dex/instructions/IfNode.java index 68f97e32c3ed03ba36a163f5ae83a3b92a7697dc..e7a4ed337ce803e083a55c29daa8939d44cd76e9 100644 --- a/jadx-core/src/main/java/jadx/core/dex/instructions/IfNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/instructions/IfNode.java @@ -68,15 +68,16 @@ public class IfNode extends GotoNode { @Override public boolean replaceTargetBlock(BlockNode origin, BlockNode replace) { + boolean replaced = false; if (thenBlock == origin) { thenBlock = replace; - return true; + replaced = true; } if (elseBlock == origin) { elseBlock = replace; - return true; + replaced = true; } - return false; + return replaced; } public BlockNode getThenBlock() { diff --git a/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitchReturnFromCase2.java b/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitchReturnFromCase2.java new file mode 100644 index 0000000000000000000000000000000000000000..63df67722341a1626301b668bb387dab3d42a127 --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/switches/TestSwitchReturnFromCase2.java @@ -0,0 +1,44 @@ +package jadx.tests.integration.switches; + +import jadx.core.dex.nodes.ClassNode; +import jadx.tests.api.IntegrationTest; +import org.junit.Test; + +import static jadx.tests.api.utils.JadxMatchers.containsOne; +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +public class TestSwitchReturnFromCase2 extends IntegrationTest { + + public static class TestCls { + public boolean test(int a) { + switch (a % 4) { + case 2: + case 3: + if (a == 2) { + return true; + } + return true; + } + return false; + } + + public void check() { + assertTrue(test(2)); + assertTrue(test(3)); + assertTrue(test(15)); + assertFalse(test(1)); + } + } + + @Test + public void test() { + ClassNode cls = getClassNode(TestCls.class); + String code = cls.getCode().toString(); + + assertThat(code, containsString("switch (a % 4) {")); + } +}