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 a6a9e3ec3487ff49bfc084a43348e6e4e52c81b0..ba7383ea6d77c60e649ad4a3829f4ca5eb1bacc6 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 92a2b216b7d7f80631aabda85314fa7eaad9db2a..e0a1d4b8fdffa71dec929e94dd8a8ea5386bd4a1 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 6cfc8dbb22d950dc7789cade55f51f4adb885478..d87ad4b4fdbd92f3dd22591fdcbb60d5576e7b55 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 0a742b3a90e5ba19323f53eccefc966a1f0b1f33..0000000000000000000000000000000000000000 --- 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(")); - } -}