fix: don't apply again already resolved types (#1012)
This commit is contained in:
@@ -81,17 +81,23 @@ public class TypeSearch {
|
||||
|
||||
private boolean applyResolvedVars() {
|
||||
List<TypeSearchVarInfo> resolvedVars = state.getResolvedVars();
|
||||
List<TypeSearchVarInfo> 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);
|
||||
|
||||
@@ -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;");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user