From bec0c51bc586a8aaf6d0e843b0f83b761fcbe5c9 Mon Sep 17 00:00:00 2001 From: dev747368 <48332326+dev747368@users.noreply.github.com> Date: Thu, 22 Jul 2021 18:47:52 -0400 Subject: [PATCH] GP-1155 fix hang when "Set External Program" on large shared project. Fixes issue #3245. --- .../main/datatree/ProjectDataTreePanel.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/ProjectDataTreePanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/ProjectDataTreePanel.java index 014ff6be8a..e927527a6d 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/ProjectDataTreePanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/ProjectDataTreePanel.java @@ -47,6 +47,7 @@ import ghidra.util.task.TaskMonitor; public class ProjectDataTreePanel extends JPanel { private static final String EXPANDED_PATHS_SEPARATOR = ":"; + private static final int MAX_PROJECT_SIZE_TO_SEARCH = 1000; private DataTree tree; private ProjectData projectData; @@ -488,13 +489,14 @@ public class ProjectDataTreePanel extends JPanel { * @param s node name */ public void findAndSelect(String s) { - tree.expandTree(root); - Iterator it = root.iterator(true); - while (it.hasNext()) { - GTreeNode node = it.next(); - if (node.getName().equals(s)) { - tree.setSelectedNode(node); - return; + if (projectData.getFileCount() < MAX_PROJECT_SIZE_TO_SEARCH) { + tree.expandTree(root); + for (Iterator it = root.iterator(true); it.hasNext();) { + GTreeNode node = it.next(); + if (node.getName().equals(s)) { + tree.setSelectedNode(node); + return; + } } } }