From 20b03aa755251c640e7219e47f214f8996bb70a5 Mon Sep 17 00:00:00 2001 From: Skylot Date: Fri, 9 Nov 2018 19:54:00 +0300 Subject: [PATCH] fix: don't remove synthetic method if args count or name not same (#361) --- .../java/jadx/core/dex/visitors/ClassModifier.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java b/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java index bd702a678..3cb19bceb 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java @@ -1,6 +1,7 @@ package jadx.core.dex.visitors; import java.util.List; +import java.util.Objects; import jadx.core.dex.attributes.AFlag; import jadx.core.dex.attributes.AType; @@ -216,6 +217,9 @@ public class ClassModifier extends AbstractVisitor { MethodInfo callMth = ((InvokeNode) insn).getCallMth(); MethodNode wrappedMth = mth.root().deepResolveMethod(callMth); if (wrappedMth != null) { + if (callMth.getArgsCount() != mth.getMethodInfo().getArgsCount()) { + return false; + } // all args must be registers passed from method args (allow only casts insns) for (InsnArg arg : insn.getArguments()) { if (!registersAndCastsOnly(arg)) { @@ -223,9 +227,13 @@ public class ClassModifier extends AbstractVisitor { } } String alias = mth.getAlias(); - if (!wrappedMth.getAlias().equals(alias) && wrappedMth.isVirtual()) { - wrappedMth.getMethodInfo().setAlias(alias); + if (Objects.equals(wrappedMth.getAlias(), alias)) { + return true; } + if (!wrappedMth.isVirtual()) { + return false; + } + wrappedMth.getMethodInfo().setAlias(alias); return true; } }