From 222677861ae8b5c4fd28ed2ab12125fb3cf3d446 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 2 Apr 2024 13:12:26 +0200 Subject: [PATCH] [find usages] reuse precalculated presentation in popup - to avoid psi access in EDT ^KTIJ-29277 fixed GitOrigin-RevId: 398cd929a24bd30cb0643d94301c5927ec4273bf --- .../com/intellij/find/findUsages/UsageHistory.java | 13 +++++++++++++ .../find/impl/ShowRecentFindUsagesAction.java | 12 +++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/find/findUsages/UsageHistory.java b/platform/lang-impl/src/com/intellij/find/findUsages/UsageHistory.java index 524174720e7b..6e33315c9de4 100644 --- a/platform/lang-impl/src/com/intellij/find/findUsages/UsageHistory.java +++ b/platform/lang-impl/src/com/intellij/find/findUsages/UsageHistory.java @@ -38,4 +38,17 @@ public final class UsageHistory { return result; } } + + public @NotNull Map getAllHistoryData() { + synchronized (myHistory) { + final Set entries = myHistory.keySet(); + for (Iterator iterator = entries.iterator(); iterator.hasNext(); ) { + final ConfigurableUsageTarget target = iterator.next(); + if (!target.isValid()) { + iterator.remove(); + } + } + return myHistory; + } + } } diff --git a/platform/lang-impl/src/com/intellij/find/impl/ShowRecentFindUsagesAction.java b/platform/lang-impl/src/com/intellij/find/impl/ShowRecentFindUsagesAction.java index 912cb0628895..ef28bd8e748f 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/ShowRecentFindUsagesAction.java +++ b/platform/lang-impl/src/com/intellij/find/impl/ShowRecentFindUsagesAction.java @@ -18,10 +18,7 @@ import com.intellij.usages.UsageView; import org.jetbrains.annotations.NotNull; import javax.swing.*; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; +import java.util.*; public final class ShowRecentFindUsagesAction extends AnAction implements ActionRemoteBehaviorSpecification.Frontend { @@ -43,8 +40,9 @@ public final class ShowRecentFindUsagesAction extends AnAction implements Action public void actionPerformed(@NotNull AnActionEvent e) { UsageView usageView = e.getData(UsageView.USAGE_VIEW_KEY); Project project = Objects.requireNonNull(e.getProject()); - final FindUsagesManager findUsagesManager = ((FindManagerImpl)FindManager.getInstance(project)).getFindUsagesManager(); - List history = new ArrayList<>(findUsagesManager.getHistory().getAll()); + FindUsagesManager findUsagesManager = ((FindManagerImpl)FindManager.getInstance(project)).getFindUsagesManager(); + Map historyData = findUsagesManager.getHistory().getAllHistoryData(); + List history = new ArrayList<>(historyData.keySet()); if (!history.isEmpty()) { // skip most recent find usage, it's under your nose @@ -68,7 +66,7 @@ public final class ShowRecentFindUsagesAction extends AnAction implements Action if (data == null) { return FindBundle.message("recent.find.usages.action.nothing"); } - return data.getLongDescriptiveName(); + return historyData.get(data); } @Override