From 9a7b7ae388f073ac5f77533e631d7dc283bd92a6 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 13 Mar 2023 17:26:39 +0100 Subject: [PATCH] vcs: do not compute 'Change.getOriginText' on EDT GitOrigin-RevId: da3967571ba877a929a4a349cdc702ef82b6cad3 --- .../openapi/vcs/changes/ui/ChangesBrowserChangeNode.java | 6 ++++++ .../intellij/openapi/vcs/changes/ui/ChangesBrowserNode.java | 6 ++++++ .../intellij/openapi/vcs/changes/ui/TreeModelBuilder.java | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowserChangeNode.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowserChangeNode.java index fd8188603225..1967ddc91132 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowserChangeNode.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowserChangeNode.java @@ -41,6 +41,12 @@ public class ChangesBrowserChangeNode extends ChangesBrowserNode impleme return ChangesUtil.getFilePath(getUserObject()).isDirectory(); } + @Override + protected void preparePresentationDataCaches(@NotNull Project project) { + getUserObject().getOriginText(project); + super.preparePresentationDataCaches(project); + } + @Override public void render(@NotNull ChangesBrowserNodeRenderer renderer, boolean selected, boolean expanded, boolean hasFocus) { ReadAction.run(() -> { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowserNode.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowserNode.java index 9e23e50b593f..54c5a2c4dc60 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowserNode.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowserNode.java @@ -18,6 +18,7 @@ import com.intellij.ui.DirtyUI; import com.intellij.ui.JBColor; import com.intellij.ui.SimpleTextAttributes; import com.intellij.util.ObjectUtils; +import com.intellij.util.concurrency.annotations.RequiresBackgroundThread; import com.intellij.util.containers.Convertor; import com.intellij.util.containers.JBIterable; import com.intellij.util.ui.tree.TreeUtil; @@ -73,6 +74,11 @@ public abstract class ChangesBrowserNode extends DefaultMutableTreeNode imple super(userObject); } + @RequiresBackgroundThread + protected void preparePresentationDataCaches(@NotNull Project project) { + getBackgroundColorCached(project); + } + /** * see {@link TreeModelBuilder#precalculateFileColors(Project, ChangesBrowserNode)} */ diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/TreeModelBuilder.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/TreeModelBuilder.java index 3d4a4d55d90c..48f9393d1250 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/TreeModelBuilder.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/TreeModelBuilder.java @@ -464,7 +464,7 @@ public class TreeModelBuilder implements ChangesViewModelBuilder { @RequiresReadLock private static void precalculateFileColors(@NotNull Project project, @NotNull ChangesBrowserNode root) { root.traverse().forEach(node -> { - node.getBackgroundColorCached(project); + node.preparePresentationDataCaches(project); // Allow to interrupt read lock ProgressManager.checkCanceled(); });