From 87c123142245f5f787238f169ec46bb95502b5e9 Mon Sep 17 00:00:00 2001 From: Skylot Date: Wed, 5 Dec 2018 22:49:05 +0300 Subject: [PATCH] fix: show type inference errors as method comments --- .../typeinference/TypeInferenceVisitor.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeInferenceVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeInferenceVisitor.java index 5207dd3fc..37d692164 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeInferenceVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/typeinference/TypeInferenceVisitor.java @@ -55,9 +55,13 @@ public final class TypeInferenceVisitor extends AbstractVisitor { // try all possible types if var type is still unknown mth.getSVars().forEach(var -> { - ArgType type = var.getTypeInfo().getType(); + TypeInfo typeInfo = var.getTypeInfo(); + ArgType type = typeInfo.getType(); if (type != null && !type.isTypeKnown()) { - tryAllTypes(var, type); + boolean changed = tryAllTypes(var, type); + if (!changed) { + mth.addComment("JADX WARNING: type inference failed for: " + var + ", bounds: " + typeInfo.getBounds()); + } } }); } @@ -153,14 +157,15 @@ public final class TypeInferenceVisitor extends AbstractVisitor { return new TypeBoundConst(BoundEnum.USE, regArg.getInitType()); } - private void tryAllTypes(SSAVar var, ArgType type) { + private boolean tryAllTypes(SSAVar var, ArgType type) { List types = makePossibleTypesList(type); for (ArgType candidateType : types) { TypeUpdateResult result = typeUpdate.apply(var, candidateType); if (result == TypeUpdateResult.CHANGED) { - break; + return true; } } + return false; } private List makePossibleTypesList(ArgType type) {