From 8b4f8fb572834cd62e8bae863706edfea0b0b4c7 Mon Sep 17 00:00:00 2001 From: Skylot Date: Sun, 24 Jul 2022 16:53:29 +0100 Subject: [PATCH] fix: resolve inherited method to use correct alias (#1582) --- .../main/java/jadx/core/codegen/InsnGen.java | 6 ++- .../java/jadx/tests/api/IntegrationTest.java | 2 +- .../deobf/TestInheritedMethodRename.java | 41 +++++++++++++++++++ .../names/TestClassNamesCollision2.java | 2 - 4 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 jadx-core/src/test/java/jadx/tests/integration/deobf/TestInheritedMethodRename.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 6b57f2e08..c3f1e51c1 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java @@ -828,7 +828,11 @@ public class InsnGen { if (insn.contains(AFlag.FORCE_RAW_NAME)) { code.add(callMth.getName()); } else { - code.add(callMth.getAlias()); + if (callMthNode != null) { + code.add(callMthNode.getAlias()); + } else { + code.add(callMth.getAlias()); + } } generateMethodArguments(code, insn, k, callMthNode); } diff --git a/jadx-core/src/test/java/jadx/tests/api/IntegrationTest.java b/jadx-core/src/test/java/jadx/tests/api/IntegrationTest.java index c03b87e93..fa87cd63e 100644 --- a/jadx-core/src/test/java/jadx/tests/api/IntegrationTest.java +++ b/jadx-core/src/test/java/jadx/tests/api/IntegrationTest.java @@ -555,7 +555,7 @@ public abstract class IntegrationTest extends TestUtils { protected void enableDeobfuscation() { args.setDeobfuscationOn(true); - args.setDeobfuscationMapFileMode(DeobfuscationMapFileMode.OVERWRITE); + args.setDeobfuscationMapFileMode(DeobfuscationMapFileMode.IGNORE); args.setDeobfuscationMinLength(2); args.setDeobfuscationMaxLength(64); } diff --git a/jadx-core/src/test/java/jadx/tests/integration/deobf/TestInheritedMethodRename.java b/jadx-core/src/test/java/jadx/tests/integration/deobf/TestInheritedMethodRename.java new file mode 100644 index 000000000..4ff38eb6b --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/deobf/TestInheritedMethodRename.java @@ -0,0 +1,41 @@ +package jadx.tests.integration.deobf; + +import org.junit.jupiter.api.Test; + +import jadx.tests.api.IntegrationTest; + +import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat; + +public class TestInheritedMethodRename extends IntegrationTest { + + public static class TestCls { + + public static class A extends B { + } + + public static class B { + public void call() { + System.out.println("call"); + } + } + + public void test(A a) { + // reference to A.call() not renamed, + // should be resolved to B.call() and use alias + a.call(); + } + } + + @Test + public void test() { + noDebugInfo(); + enableDeobfuscation(); + getArgs().setDeobfuscationMinLength(99); + + assertThat(getClassNode(TestCls.class)) + .code() + .containsOne("public void m0call() {") + .doesNotContain(".call();") + .containsOne(".m0call();"); + } +} diff --git a/jadx-core/src/test/java/jadx/tests/integration/names/TestClassNamesCollision2.java b/jadx-core/src/test/java/jadx/tests/integration/names/TestClassNamesCollision2.java index e92c8e3bc..ca0de2b02 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/names/TestClassNamesCollision2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/names/TestClassNamesCollision2.java @@ -1,7 +1,5 @@ package jadx.tests.integration.names; -import java.util.List; - import org.junit.jupiter.api.Test; import jadx.api.CommentsLevel;