From ecaa87e7ae49bb564698834490bc6ca842f560c3 Mon Sep 17 00:00:00 2001 From: Ahmed Ashour Date: Mon, 8 Apr 2019 12:07:34 +0200 Subject: [PATCH] fix: remove redundant array type when initialized with declaration (PR #566) --- .../main/java/jadx/core/codegen/InsnGen.java | 6 ++-- .../integration/arrays/TestArrayInit.java | 34 +++++++++++++++++++ .../tests/integration/inline/TestInline2.java | 2 +- 3 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayInit.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 46fee61d2..7d8672a0a 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java @@ -532,8 +532,10 @@ public class InsnGen { } private void filledNewArray(FilledNewArrayNode insn, CodeWriter code) throws CodegenException { - code.add("new "); - useType(code, insn.getArrayType()); + if (!insn.contains(AFlag.DECLARE_VAR)) { + code.add("new "); + useType(code, insn.getArrayType()); + } code.add('{'); int c = insn.getArgsCount(); for (int i = 0; i < c; i++) { diff --git a/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayInit.java b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayInit.java new file mode 100644 index 000000000..5cd7c59a0 --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/arrays/TestArrayInit.java @@ -0,0 +1,34 @@ +package jadx.tests.integration.arrays; + +import jadx.core.dex.nodes.ClassNode; +import jadx.tests.api.IntegrationTest; +import org.junit.jupiter.api.Test; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.MatcherAssert.assertThat; + +public class TestArrayInit extends IntegrationTest { + + public static class TestCls { + + byte[] bytes; + + @SuppressWarnings("unused") + public void test() { + byte[] arr = new byte[]{10, 20, 30}; + } + + public void test2() { + bytes = new byte[]{10, 20, 30}; + } + } + + @Test + public void test() { + ClassNode cls = getClassNode(TestCls.class); + String code = cls.getCode().toString(); + + assertThat(code, containsString("= {10, 20, 30};")); + assertThat(code, containsString("this.bytes = new byte[]{10, 20, 30};")); + } +} diff --git a/jadx-core/src/test/java/jadx/tests/integration/inline/TestInline2.java b/jadx-core/src/test/java/jadx/tests/integration/inline/TestInline2.java index 57c4797a5..d1ab9c2db 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/inline/TestInline2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/inline/TestInline2.java @@ -29,7 +29,7 @@ public class TestInline2 extends IntegrationTest { ClassNode cls = getClassNode(TestCls.class); String code = cls.getCode().toString(); - assertThat(code, containsOne("int[] a = new int[]{1, 2, 4, 6, 8};")); + assertThat(code, containsOne("int[] a = {1, 2, 4, 6, 8};")); assertThat(code, containsOne("for (int i = 0; i < a.length; i += 2) {")); assertThat(code, containsOne("for (long i2 = (long) b; i2 > 0; i2--) {")); }