diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeSearch.java b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeSearch.java index b2c587d9a..357369518 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeSearch.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeSearch.java @@ -81,17 +81,23 @@ public class TypeSearch { private boolean applyResolvedVars() { List resolvedVars = state.getResolvedVars(); + List updatedVars = new ArrayList<>(); for (TypeSearchVarInfo var : resolvedVars) { SSAVar ssaVar = var.getVar(); ArgType resolvedType = var.getCurrentType(); - ssaVar.setType(resolvedType); - } - boolean applySuccess = true; - for (TypeSearchVarInfo var : resolvedVars) { - if (!var.getCurrentType().isTypeKnown()) { - // exclude unknown variables + if (!resolvedType.isTypeKnown()) { + // ignore unknown variables continue; } + if (resolvedType.equals(ssaVar.getTypeInfo().getType())) { + // type already set + continue; + } + ssaVar.setType(resolvedType); + updatedVars.add(var); + } + boolean applySuccess = true; + for (TypeSearchVarInfo var : updatedVars) { TypeUpdateResult res = typeUpdate.applyWithWiderIgnSame(mth, var.getVar(), var.getCurrentType()); if (res == TypeUpdateResult.REJECT) { mth.addComment("JADX DEBUG: Multi-variable search result rejected for " + var); diff --git a/jadx-core/src/test/java/jadx/tests/integration/types/TestPrimitiveConversion2.java b/jadx-core/src/test/java/jadx/tests/integration/types/TestPrimitiveConversion2.java index 81ee6f059..02486969d 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/types/TestPrimitiveConversion2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/types/TestPrimitiveConversion2.java @@ -18,7 +18,6 @@ public class TestPrimitiveConversion2 extends SmaliTest { .doesNotContain("z2 | 2") .containsOne("(z2 ? 1 : 0) | 2") .containsOne("if (z2 && formatCurrency != null) {") - .containsOne("i = 1;") - .containsOne("spannable = null;"); + .containsOne("i = 1;"); } }