From b1b49e6195ea636514441f1cbaed3e9482bfaccc Mon Sep 17 00:00:00 2001 From: Ahmed Ashour Date: Sun, 14 Apr 2019 13:29:38 +0200 Subject: [PATCH] fix: remove declaration of unused variable (PR #590) --- .../main/java/jadx/core/codegen/InsnGen.java | 15 ++++-- .../annotations/TestAnnotationsMix.java | 4 +- .../inner/TestAnonymousClass13.java | 2 - .../invoke/TestConstructorInvoke.java | 49 ------------------- 4 files changed, 11 insertions(+), 59 deletions(-) delete mode 100644 jadx-core/src/test/java/jadx/tests/integration/invoke/TestConstructorInvoke.java diff --git a/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java b/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java index a6a9e3ec..ba7383ea 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java @@ -1,5 +1,7 @@ package jadx.core.codegen; +import static jadx.core.utils.android.AndroidResourcesUtils.handleAppResField; + import java.util.ArrayList; import java.util.EnumSet; import java.util.Iterator; @@ -41,6 +43,7 @@ import jadx.core.dex.instructions.args.InsnWrapArg; import jadx.core.dex.instructions.args.LiteralArg; import jadx.core.dex.instructions.args.Named; import jadx.core.dex.instructions.args.RegisterArg; +import jadx.core.dex.instructions.args.SSAVar; import jadx.core.dex.instructions.mods.ConstructorInsn; import jadx.core.dex.instructions.mods.TernaryInsn; import jadx.core.dex.nodes.ClassNode; @@ -52,8 +55,6 @@ import jadx.core.utils.RegionUtils; import jadx.core.utils.exceptions.CodegenException; import jadx.core.utils.exceptions.JadxRuntimeException; -import static jadx.core.utils.android.AndroidResourcesUtils.handleAppResField; - public class InsnGen { private static final Logger LOG = LoggerFactory.getLogger(InsnGen.class); @@ -219,9 +220,13 @@ public class InsnGen { if (flag != Flags.INLINE) { code.startLineWithNum(insn.getSourceLine()); } - if (insn.getResult() != null && !insn.contains(AFlag.ARITH_ONEARG)) { - assignVar(code, insn); - code.add(" = "); + if (insn.getResult() != null) { + SSAVar var = insn.getResult().getSVar(); + if ((var == null || var.getUseCount() != 0 || insn.getType() != InsnType.CONSTRUCTOR) + && !insn.contains(AFlag.ARITH_ONEARG)) { + assignVar(code, insn); + code.add(" = "); + } } makeInsnBody(code, insn, state); if (flag != Flags.INLINE) { diff --git a/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsMix.java b/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsMix.java index 92a2b216..e0a1d4b8 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsMix.java +++ b/jadx-core/src/test/java/jadx/tests/integration/annotations/TestAnnotationsMix.java @@ -10,7 +10,6 @@ import java.util.Arrays; import org.junit.jupiter.api.Test; -import jadx.NotYetImplemented; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; @@ -112,8 +111,7 @@ public class TestAnnotationsMix extends IntegrationTest { } @Test - @NotYetImplemented - public void testNYI() { + public void testDeclaration() { ClassNode cls = getClassNode(TestCls.class); String code = cls.getCode().toString(); diff --git a/jadx-core/src/test/java/jadx/tests/integration/inner/TestAnonymousClass13.java b/jadx-core/src/test/java/jadx/tests/integration/inner/TestAnonymousClass13.java index 6cfc8dbb..d87ad4b4 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/inner/TestAnonymousClass13.java +++ b/jadx-core/src/test/java/jadx/tests/integration/inner/TestAnonymousClass13.java @@ -2,7 +2,6 @@ package jadx.tests.integration.inner; import org.junit.jupiter.api.Test; -import jadx.NotYetImplemented; import jadx.tests.api.IntegrationTest; public class TestAnonymousClass13 extends IntegrationTest { @@ -16,7 +15,6 @@ public class TestAnonymousClass13 extends IntegrationTest { } @Test - @NotYetImplemented public void test() { getClassNode(TestCls.class); } diff --git a/jadx-core/src/test/java/jadx/tests/integration/invoke/TestConstructorInvoke.java b/jadx-core/src/test/java/jadx/tests/integration/invoke/TestConstructorInvoke.java deleted file mode 100644 index 0a742b3a..00000000 --- a/jadx-core/src/test/java/jadx/tests/integration/invoke/TestConstructorInvoke.java +++ /dev/null @@ -1,49 +0,0 @@ -package jadx.tests.integration.invoke; - -import org.junit.jupiter.api.Test; - -import jadx.NotYetImplemented; -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 TestConstructorInvoke extends IntegrationTest { - - void test(String root, String name) { - ViewHolder holder = new ViewHolder(root, name); - } - - private final class ViewHolder { - private ViewHolder(String root, String name) { - } - } - - @Test - @NotYetImplemented("Variable lost name from debug info") - public void test() { - ClassNode cls = getClassNode(TestConstructorInvoke.class); - String code = cls.getCode().toString(); - - assertThat(code, containsOne(indent() + "ViewHolder holder = new ViewHolder(root, name);")); - } - - // Remove after fix above @NYI - @Test - public void test2() { - ClassNode cls = getClassNode(TestConstructorInvoke.class); - String code = cls.getCode().toString(); - - assertThat(code, containsOne(indent() + "ViewHolder viewHolder = new ViewHolder(root, name);")); - } - - @Test - public void testNoDebug() { - noDebugInfo(); - ClassNode cls = getClassNode(TestConstructorInvoke.class); - String code = cls.getCode().toString(); - - assertThat(code, containsOne(indent() + "ViewHolder viewHolder = new ViewHolder(")); - } -} -- GitLab