diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdate.java b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdate.java index 591a64c71..c786d6ec5 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdate.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdate.java @@ -18,7 +18,6 @@ import jadx.core.dex.instructions.args.InsnArg; import jadx.core.dex.instructions.args.PrimitiveType; import jadx.core.dex.instructions.args.RegisterArg; import jadx.core.dex.instructions.args.SSAVar; -import jadx.core.dex.instructions.args.Typed; import jadx.core.dex.nodes.InsnNode; import jadx.core.dex.nodes.RootNode; import jadx.core.utils.exceptions.JadxOverflowException; @@ -57,11 +56,11 @@ public final class TypeUpdate { if (result == REJECT) { return result; } - Map updates = updateInfo.getUpdates(); + List updates = updateInfo.getUpdates(); if (updates.isEmpty()) { return SAME; } - updates.forEach(Typed::setType); + updates.forEach(TypeUpdateEntry::apply); return CHANGED; } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdateEntry.java b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdateEntry.java new file mode 100644 index 000000000..0923ea0a2 --- /dev/null +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdateEntry.java @@ -0,0 +1,31 @@ +package jadx.core.dex.visitors.typeinference; + +import jadx.core.dex.instructions.args.ArgType; +import jadx.core.dex.instructions.args.InsnArg; + +public final class TypeUpdateEntry { + private final InsnArg arg; + private final ArgType type; + + public TypeUpdateEntry(InsnArg arg, ArgType type) { + this.arg = arg; + this.type = type; + } + + public void apply() { + arg.setType(type); + } + + public InsnArg getArg() { + return arg; + } + + public ArgType getType() { + return type; + } + + @Override + public String toString() { + return "TypeUpdateEntry{" + arg + " -> " + type + '}'; + } +} diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdateInfo.java b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdateInfo.java index 289d66e23..3496669ab 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdateInfo.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeUpdateInfo.java @@ -1,28 +1,35 @@ package jadx.core.dex.visitors.typeinference; -import java.util.IdentityHashMap; -import java.util.Map; +import java.util.ArrayList; +import java.util.List; import jadx.core.dex.instructions.args.ArgType; import jadx.core.dex.instructions.args.InsnArg; public class TypeUpdateInfo { - - private final Map updates = new IdentityHashMap<>(); + private final List updates = new ArrayList<>(); public void requestUpdate(InsnArg arg, ArgType changeType) { - updates.put(arg, changeType); + updates.add(new TypeUpdateEntry(arg, changeType)); } public boolean isProcessed(InsnArg arg) { - return updates.containsKey(arg); + if (updates.isEmpty()) { + return false; + } + for (TypeUpdateEntry entry : updates) { + if (entry.getArg() == arg) { + return true; + } + } + return false; } public void rollbackUpdate(InsnArg arg) { - updates.remove(arg); + updates.removeIf(updateEntry -> updateEntry.getArg() == arg); } - public Map getUpdates() { + public List getUpdates() { return updates; } }