Commit 20b03aa7 authored by Skylot's avatar Skylot

fix: don't remove synthetic method if args count or name not same (#361)

parent 5281eed1
package jadx.core.dex.visitors; package jadx.core.dex.visitors;
import java.util.List; import java.util.List;
import java.util.Objects;
import jadx.core.dex.attributes.AFlag; import jadx.core.dex.attributes.AFlag;
import jadx.core.dex.attributes.AType; import jadx.core.dex.attributes.AType;
...@@ -216,6 +217,9 @@ public class ClassModifier extends AbstractVisitor { ...@@ -216,6 +217,9 @@ public class ClassModifier extends AbstractVisitor {
MethodInfo callMth = ((InvokeNode) insn).getCallMth(); MethodInfo callMth = ((InvokeNode) insn).getCallMth();
MethodNode wrappedMth = mth.root().deepResolveMethod(callMth); MethodNode wrappedMth = mth.root().deepResolveMethod(callMth);
if (wrappedMth != null) { if (wrappedMth != null) {
if (callMth.getArgsCount() != mth.getMethodInfo().getArgsCount()) {
return false;
}
// all args must be registers passed from method args (allow only casts insns) // all args must be registers passed from method args (allow only casts insns)
for (InsnArg arg : insn.getArguments()) { for (InsnArg arg : insn.getArguments()) {
if (!registersAndCastsOnly(arg)) { if (!registersAndCastsOnly(arg)) {
...@@ -223,9 +227,13 @@ public class ClassModifier extends AbstractVisitor { ...@@ -223,9 +227,13 @@ public class ClassModifier extends AbstractVisitor {
} }
} }
String alias = mth.getAlias(); String alias = mth.getAlias();
if (!wrappedMth.getAlias().equals(alias) && wrappedMth.isVirtual()) { if (Objects.equals(wrappedMth.getAlias(), alias)) {
wrappedMth.getMethodInfo().setAlias(alias); return true;
}
if (!wrappedMth.isVirtual()) {
return false;
} }
wrappedMth.getMethodInfo().setAlias(alias);
return true; return true;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment