From 18ac9b38226f0e0fdc3311866a80767eef16cede Mon Sep 17 00:00:00 2001 From: Sergei Tachenov Date: Wed, 30 Aug 2023 17:35:15 +0300 Subject: [PATCH] IDEA-319883 Move AnalyzeModuleDependencyAction.findUsedScopes to a BGT Hijack the result class by allowing to extend it and put the result there. It's OK, as this class is internal and was introduced exactly for this purpose: storing various precomputed stuff to be used in the EDT later. GitOrigin-RevId: 4801518afa4aef8a383a0fb19c7f0bd79076f05d --- .../AnalyzeModuleDependencyAction.java | 17 ++++++++++++++++- .../DependencyAnalysisResult.kt | 2 +- .../actions/DependenciesHandlerBase.java | 13 +++++++++++-- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/AnalyzeModuleDependencyAction.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/AnalyzeModuleDependencyAction.java index 8c1f4b143d1d..2c780aacdc5b 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/AnalyzeModuleDependencyAction.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/AnalyzeModuleDependencyAction.java @@ -68,7 +68,7 @@ class AnalyzeModuleDependencyAction extends AnAction { GlobalSearchScope.union(scopes.toArray(GlobalSearchScope.EMPTY_ARRAY))) { @Override protected boolean shouldShowDependenciesPanel(@NotNull DependencyAnalysisResult result) { - Set usedScopes = findUsedScopes(result.getBuilders(), scopes); + Set usedScopes = ((MyAnalyzeResult)result).usedScopes; if (usedScopes.contains(mainScope)) { Messages.showInfoMessage(myProject, JavaUiBundle @@ -126,6 +126,17 @@ class AnalyzeModuleDependencyAction extends AnAction { }; } + @Override + protected @NotNull DependencyAnalysisResult createAnalysisResult() { + return new MyAnalyzeResult(); + } + + @Override + protected void bgtPostAnalyze(DependencyAnalysisResult result) { + super.bgtPostAnalyze(result); + ((MyAnalyzeResult)result).usedScopes = findUsedScopes(result.getBuilders(), scopes); + } + @Override protected boolean canStartInBackground() { return false; @@ -186,4 +197,8 @@ class AnalyzeModuleDependencyAction extends AnAction { public @NotNull ActionUpdateThread getActionUpdateThread() { return ActionUpdateThread.EDT; } + + private static class MyAnalyzeResult extends DependencyAnalysisResult { + Set usedScopes; + } } diff --git a/platform/analysis-impl/src/com/intellij/packageDependencies/DependencyAnalysisResult.kt b/platform/analysis-impl/src/com/intellij/packageDependencies/DependencyAnalysisResult.kt index d490fef36919..b8ed5002d516 100644 --- a/platform/analysis-impl/src/com/intellij/packageDependencies/DependencyAnalysisResult.kt +++ b/platform/analysis-impl/src/com/intellij/packageDependencies/DependencyAnalysisResult.kt @@ -5,7 +5,7 @@ import com.intellij.openapi.util.NlsContexts import org.jetbrains.annotations.ApiStatus.Internal @Internal -class DependencyAnalysisResult( +open class DependencyAnalysisResult( val builders: MutableList = arrayListOf() ) { diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/actions/DependenciesHandlerBase.java b/platform/lang-impl/src/com/intellij/packageDependencies/actions/DependenciesHandlerBase.java index d56d56d57edf..85ca2db6ac7a 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/actions/DependenciesHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/actions/DependenciesHandlerBase.java @@ -40,7 +40,7 @@ public abstract class DependenciesHandlerBase { } public void analyze() { - final DependencyAnalysisResult result = new DependencyAnalysisResult(); + final DependencyAnalysisResult result = createAnalysisResult(); final Task task; if (canStartInBackground()) { @@ -73,6 +73,11 @@ public abstract class DependenciesHandlerBase { ProgressManager.getInstance().run(task); } + @NotNull + protected DependencyAnalysisResult createAnalysisResult() { + return new DependencyAnalysisResult(); + } + protected boolean canStartInBackground() { return true; } @@ -96,7 +101,7 @@ public abstract class DependenciesHandlerBase { for (DependenciesBuilder builder : result.getBuilders()) { builder.analyze(); } - result.panelDisplayName = getPanelDisplayName(result.getBuilders().get(0).getScope()); + bgtPostAnalyze(result); snapshot.logResponsivenessSinceCreation("Dependency analysis"); } catch (IndexNotReadyException e) { @@ -106,6 +111,10 @@ public abstract class DependenciesHandlerBase { } } + protected void bgtPostAnalyze(DependencyAnalysisResult result) { + result.panelDisplayName = getPanelDisplayName(result.getBuilders().get(0).getScope()); + } + private void onSuccess(final DependencyAnalysisResult result) { //noinspection SSBasedInspection SwingUtilities.invokeLater(() -> {