diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/TernaryMod.java b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/TernaryMod.java index 37066bb57..c9d88ca7e 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/TernaryMod.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/TernaryMod.java @@ -253,10 +253,6 @@ public class TernaryMod implements IRegionIterativeVisitor { } private static void replaceWithTernary(MethodNode mth, IfRegion ifRegion, BlockNode block, InsnNode insn) { - BlockNode header = ifRegion.getConditionBlocks().get(0); - if (!ifRegion.getParent().replaceSubBlock(ifRegion, header)) { - return; - } RegisterArg resArg = insn.getResult(); if (resArg.getSVar().getUseList().size() != 1) { return; @@ -277,6 +273,10 @@ public class TernaryMod implements IRegionIterativeVisitor { } // all checks passed + BlockNode header = ifRegion.getConditionBlocks().get(0); + if (!ifRegion.getParent().replaceSubBlock(ifRegion, header)) { + return; + } InsnList.remove(block, insn); TernaryInsn ternInsn = new TernaryInsn(ifRegion.getCondition(), phiInsn.getResult(), InsnArg.wrapInsnIntoArg(insn), otherArg); diff --git a/jadx-core/src/main/java/jadx/core/utils/DebugUtils.java b/jadx-core/src/main/java/jadx/core/utils/DebugUtils.java index c94c190b5..c198827e2 100644 --- a/jadx-core/src/main/java/jadx/core/utils/DebugUtils.java +++ b/jadx-core/src/main/java/jadx/core/utils/DebugUtils.java @@ -119,7 +119,8 @@ public class DebugUtils { CodeWriter code = new CodeWriter(); ig.makeInsn(insn, code); String insnStr = code.toString().substring(CodeWriter.NL.length()); - LOG.debug("{}|> {}\t{}", indent, insnStr, insn.getAttributesString()); + String attrStr = insn.isAttrStorageEmpty() ? "" : '\t' + insn.getAttributesString(); + LOG.debug("{}|> {}{}", indent, insnStr, attrStr); } catch (CodegenException e) { LOG.debug("{}|>!! {}", indent, insn); } diff --git a/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryWithEmptyCatch.java b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryWithEmptyCatch.java new file mode 100644 index 000000000..59973cfaa --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryWithEmptyCatch.java @@ -0,0 +1,41 @@ +package jadx.tests.integration.trycatch; + +import java.util.Properties; + +import org.junit.jupiter.api.Test; + +import jadx.core.dex.nodes.ClassNode; +import jadx.tests.api.IntegrationTest; + +import static jadx.tests.api.utils.JadxMatchers.containsOne; +import static org.hamcrest.MatcherAssert.assertThat; + +public class TestTryWithEmptyCatch extends IntegrationTest { + + public static class TestCls extends Exception { + private static final long serialVersionUID = -5723049816464070603L; + private Properties field; + + public TestCls(String str) { + super(str); + Properties properties = null; + try { + if (str.contains("properties")) { + properties = new Properties(); + } + } catch (Exception unused) { + // empty + } + this.field = properties; + } + } + + @Test + public void test() { + ClassNode cls = getClassNode(TestCls.class); + String code = cls.getCode().toString(); + + assertThat(code, containsOne("try {")); + assertThat(code, containsOne("if (")); + } +}