From e915f4fcd79dd1c217f0776d5e1991e5da7606da Mon Sep 17 00:00:00 2001 From: Skylot Date: Sun, 31 Jan 2016 15:20:07 +0300 Subject: [PATCH] core: show missing class references only once --- .../main/java/jadx/api/JadxDecompiler.java | 1 + .../main/java/jadx/core/clsp/ClspGraph.java | 22 +++++++++++++++++-- .../java/jadx/core/utils/ErrorsCounter.java | 5 ----- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/jadx-core/src/main/java/jadx/api/JadxDecompiler.java b/jadx-core/src/main/java/jadx/api/JadxDecompiler.java index 6df86668d..cbab76925 100644 --- a/jadx-core/src/main/java/jadx/api/JadxDecompiler.java +++ b/jadx-core/src/main/java/jadx/api/JadxDecompiler.java @@ -248,6 +248,7 @@ public final class JadxDecompiler { if (root == null) { return; } + root.getClsp().printMissingClasses(); root.getErrorsCounter().printReport(); } diff --git a/jadx-core/src/main/java/jadx/core/clsp/ClspGraph.java b/jadx-core/src/main/java/jadx/core/clsp/ClspGraph.java index 168770b72..2f78059c8 100644 --- a/jadx-core/src/main/java/jadx/core/clsp/ClspGraph.java +++ b/jadx-core/src/main/java/jadx/core/clsp/ClspGraph.java @@ -5,6 +5,7 @@ import jadx.core.utils.exceptions.DecodeException; import jadx.core.utils.exceptions.JadxRuntimeException; import java.io.IOException; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -25,6 +26,8 @@ public class ClspGraph { private final Map> ancestorCache = new WeakHashMap>(); private Map nameMap; + private final Set missingClasses = new HashSet(); + public void load() throws IOException, DecodeException { ClsSet set = new ClsSet(); set.load(); @@ -73,7 +76,7 @@ public class ClspGraph { } NClass cls = nameMap.get(implClsName); if (cls == null) { - LOG.debug("Missing class: {}", implClsName); + missingClasses.add(clsName); return null; } if (isImplements(clsName, implClsName)) { @@ -104,7 +107,7 @@ public class ClspGraph { } NClass cls = nameMap.get(clsName); if (cls == null) { - LOG.debug("Missing class: {}", clsName); + missingClasses.add(clsName); return Collections.emptySet(); } result = new HashSet(); @@ -122,4 +125,19 @@ public class ClspGraph { addAncestorsNames(p, result); } } + + public void printMissingClasses() { + int count = missingClasses.size(); + if (count == 0) { + return; + } + LOG.warn("Found {} references to unknown classes", count); + if (LOG.isDebugEnabled()) { + List clsNames = new ArrayList(missingClasses); + Collections.sort(clsNames); + for (String cls : clsNames) { + LOG.debug(" {}", cls); + } + } + } } diff --git a/jadx-core/src/main/java/jadx/core/utils/ErrorsCounter.java b/jadx-core/src/main/java/jadx/core/utils/ErrorsCounter.java index 25905b1b9..6de490c3b 100644 --- a/jadx-core/src/main/java/jadx/core/utils/ErrorsCounter.java +++ b/jadx-core/src/main/java/jadx/core/utils/ErrorsCounter.java @@ -27,11 +27,6 @@ public class ErrorsCounter { return errorsCount; } - public void reset() { - errorNodes.clear(); - errorsCount = 0; - } - private void addError(IAttributeNode node, String msg, Throwable e) { errorNodes.add(node); errorsCount++;