■ ■ ■ ■ ■ ■
jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeSearch.java
| skipped 80 lines |
81 | 81 | | |
82 | 82 | | private boolean applyResolvedVars() { |
83 | 83 | | List<TypeSearchVarInfo> resolvedVars = state.getResolvedVars(); |
| 84 | + | List<TypeSearchVarInfo> updatedVars = new ArrayList<>(); |
84 | 85 | | for (TypeSearchVarInfo var : resolvedVars) { |
85 | 86 | | SSAVar ssaVar = var.getVar(); |
86 | 87 | | ArgType resolvedType = var.getCurrentType(); |
| 88 | + | if (!resolvedType.isTypeKnown()) { |
| 89 | + | // ignore unknown variables |
| 90 | + | continue; |
| 91 | + | } |
| 92 | + | if (resolvedType.equals(ssaVar.getTypeInfo().getType())) { |
| 93 | + | // type already set |
| 94 | + | continue; |
| 95 | + | } |
87 | 96 | | ssaVar.setType(resolvedType); |
| 97 | + | updatedVars.add(var); |
88 | 98 | | } |
89 | 99 | | boolean applySuccess = true; |
90 | | - | for (TypeSearchVarInfo var : resolvedVars) { |
91 | | - | if (!var.getCurrentType().isTypeKnown()) { |
92 | | - | // exclude unknown variables |
93 | | - | continue; |
94 | | - | } |
| 100 | + | for (TypeSearchVarInfo var : updatedVars) { |
95 | 101 | | TypeUpdateResult res = typeUpdate.applyWithWiderIgnSame(mth, var.getVar(), var.getCurrentType()); |
96 | 102 | | if (res == TypeUpdateResult.REJECT) { |
97 | 103 | | mth.addComment("JADX DEBUG: Multi-variable search result rejected for " + var); |
| skipped 301 lines |