diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index 87c04bb3c..e6bea223a 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -532,9 +532,11 @@ public class MainWindow extends JFrame { updateLiveReload(project.isEnableLiveReload()); BreakpointManager.init(project.getFilePaths().get(0).toAbsolutePath().getParent()); + List openTabs = project.getOpenTabs(this); backgroundExecutor.execute(NLS.str("progress.load"), - this::restoreOpenTabs, + () -> preLoadOpenTabs(openTabs), status -> { + restoreOpenTabs(openTabs); runInitialBackgroundJobs(); notifyLoadListeners(true); }); @@ -1503,8 +1505,8 @@ public class MainWindow extends JFrame { project.saveOpenTabs(tabbedPane.getEditorViewStates(), tabbedPane.getSelectedIndex()); } - private void restoreOpenTabs() { - List openTabs = project.getOpenTabs(this); + private void restoreOpenTabs(List openTabs) { + UiUtils.uiThreadGuard(); if (openTabs.isEmpty()) { return; } @@ -1518,6 +1520,18 @@ public class MainWindow extends JFrame { } } + private void preLoadOpenTabs(List openTabs) { + UiUtils.notUiThreadGuard(); + for (EditorViewState tabState : openTabs) { + JNode node = tabState.getNode(); + try { + node.getCodeInfo(); + } catch (Exception e) { + LOG.warn("Failed to preload code for node: {}", node, e); + } + } + } + private void saveSplittersInfo() { settings.setMainWindowVerticalSplitterLoc(verticalSplitter.getDividerLocation()); settings.setDebuggerStackFrameSplitterLoc(debuggerPanel.getLeftSplitterLocation());