From af6f8b53911a02f3ad625e2702c478e0763074de Mon Sep 17 00:00:00 2001 From: Skylot Date: Mon, 23 Dec 2019 19:12:00 +0000 Subject: [PATCH] fix(gui): resolve exceptions during index (#812) --- .../src/main/java/jadx/api/JavaClass.java | 2 +- .../java/jadx/gui/utils/CodeUsageInfo.java | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/jadx-core/src/main/java/jadx/api/JavaClass.java b/jadx-core/src/main/java/jadx/api/JavaClass.java index e9af23c7f..9909c50b0 100644 --- a/jadx-core/src/main/java/jadx/api/JavaClass.java +++ b/jadx-core/src/main/java/jadx/api/JavaClass.java @@ -73,7 +73,7 @@ public final class JavaClass implements JavaNode { return cls; } - private void loadLists() { + private synchronized void loadLists() { if (listsLoaded) { return; } diff --git a/jadx-gui/src/main/java/jadx/gui/utils/CodeUsageInfo.java b/jadx-gui/src/main/java/jadx/gui/utils/CodeUsageInfo.java index cec7fd1aa..7927fb147 100644 --- a/jadx-gui/src/main/java/jadx/gui/utils/CodeUsageInfo.java +++ b/jadx-gui/src/main/java/jadx/gui/utils/CodeUsageInfo.java @@ -6,6 +6,9 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import jadx.api.CodePosition; import jadx.api.JavaClass; import jadx.api.JavaNode; @@ -14,6 +17,7 @@ import jadx.gui.treemodel.JNode; import jadx.gui.utils.search.StringRef; public class CodeUsageInfo { + private static final Logger LOG = LoggerFactory.getLogger(CodeUsageInfo.class); public static class UsageInfo { private final List usageList = new ArrayList<>(); @@ -36,11 +40,15 @@ public class CodeUsageInfo { private final Map usageMap = new ConcurrentHashMap<>(); public void processClass(JavaClass javaClass, CodeLinesInfo linesInfo, List lines) { - Map usage = javaClass.getUsageMap(); - for (Map.Entry entry : usage.entrySet()) { - CodePosition codePosition = entry.getKey(); - JavaNode javaNode = entry.getValue(); - addUsage(nodeCache.makeFrom(javaNode), javaClass, linesInfo, codePosition, lines); + try { + Map usage = javaClass.getUsageMap(); + for (Map.Entry entry : usage.entrySet()) { + CodePosition codePosition = entry.getKey(); + JavaNode javaNode = entry.getValue(); + addUsage(nodeCache.makeFrom(javaNode), javaClass, linesInfo, codePosition, lines); + } + } catch (Exception e) { + LOG.error("Code usage process failed for class: {}", javaClass, e); } }