From 12bb63237155b1aebc7b64c481b776286d5c73dc Mon Sep 17 00:00:00 2001 From: Skylot Date: Wed, 10 Jul 2019 21:08:37 +0300 Subject: [PATCH] fix: always cast null objects in overloaded method (#707) --- .../main/java/jadx/core/codegen/InsnGen.java | 22 +++++++++++++------ .../integration/others/TestCastOfNull.java | 7 ++++++ 2 files changed, 22 insertions(+), 7 deletions(-) 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 9f748a2fc..9e821e82d 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java @@ -807,11 +807,22 @@ public class InsnGen { return false; } } + if (isCastNeeded(arg, origType)) { + code.add('('); + useType(code, origType); + code.add(") "); + return true; + } + return false; + } + + private boolean isCastNeeded(InsnArg arg, ArgType origType) { ArgType argType = arg.getType(); - if (argType.equals(origType) - // null cast to object - && (!arg.isLiteral() || ((LiteralArg) arg).getLiteral() != 0 - || (!argType.isArray() && !argType.isObject()))) { + if (arg.isLiteral() && ((LiteralArg) arg).getLiteral() == 0 + && (argType.isObject() || argType.isArray())) { + return true; + } + if (argType.equals(origType)) { return false; } if (origType.isGeneric()) { @@ -828,9 +839,6 @@ public class InsnGen { ((InsnWrapArg) arg).getWrapInsn().add(AFlag.EXPLICIT_GENERICS); } } - code.add('('); - useType(code, origType); - code.add(") "); return true; } diff --git a/jadx-core/src/test/java/jadx/tests/integration/others/TestCastOfNull.java b/jadx-core/src/test/java/jadx/tests/integration/others/TestCastOfNull.java index cb6051923..2039f1e70 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/others/TestCastOfNull.java +++ b/jadx-core/src/test/java/jadx/tests/integration/others/TestCastOfNull.java @@ -1,5 +1,7 @@ package jadx.tests.integration.others; +import java.util.List; + import org.junit.jupiter.api.Test; import jadx.core.dex.nodes.ClassNode; @@ -15,6 +17,7 @@ public class TestCastOfNull extends IntegrationTest { public void test() { m((long[]) null); m((String) null); + m((List) null); } public void m(long[] a) { @@ -22,6 +25,9 @@ public class TestCastOfNull extends IntegrationTest { public void m(String s) { } + + public void m(List list) { + } } @Test @@ -31,5 +37,6 @@ public class TestCastOfNull extends IntegrationTest { assertThat(code, containsOne("m((long[]) null);")); assertThat(code, containsOne("m((String) null);")); + assertThat(code, containsOne("m((List) null);")); } }