From e7a59cb7119d81c011da164d50cf872a97acff4e Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Tue, 19 Sep 2017 15:59:43 +0300 Subject: [PATCH] git: do not create swing components on pooled thread --- .../branch/GitBranchUiHandlerImpl.java | 16 ++++------ .../branch/GitSmartOperationDialog.java | 29 ++++++++++--------- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/plugins/git4idea/src/git4idea/branch/GitBranchUiHandlerImpl.java b/plugins/git4idea/src/git4idea/branch/GitBranchUiHandlerImpl.java index 87c1f07318a5..5adab5800d00 100644 --- a/plugins/git4idea/src/git4idea/branch/GitBranchUiHandlerImpl.java +++ b/plugins/git4idea/src/git4idea/branch/GitBranchUiHandlerImpl.java @@ -35,13 +35,10 @@ import git4idea.GitUtil; import git4idea.commands.Git; import git4idea.merge.GitConflictResolver; import git4idea.repo.GitRepository; -import git4idea.ui.ChangesBrowserWithRollback; -import git4idea.util.GitSimplePathsBrowser; import git4idea.util.GitUntrackedFilesHelper; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.*; import javax.swing.event.HyperlinkEvent; import java.util.Collection; import java.util.List; @@ -140,14 +137,11 @@ public class GitBranchUiHandlerImpl implements GitBranchUiHandler { @NotNull Collection paths, @NotNull String operation, @Nullable String forceButtonTitle) { - JComponent fileBrowser; - if (!changes.isEmpty()) { - fileBrowser = new ChangesBrowserWithRollback(project, changes); - } - else { - fileBrowser = new GitSimplePathsBrowser(project, paths); - } - return GitSmartOperationDialog.showAndGetAnswer(myProject, fileBrowser, operation, forceButtonTitle); + Ref exitCode = Ref.create(); + ApplicationManager.getApplication().invokeAndWait(() -> { + exitCode.set(GitSmartOperationDialog.show(project, changes, paths, operation, forceButtonTitle)); + }); + return exitCode.get(); } @Override diff --git a/plugins/git4idea/src/git4idea/branch/GitSmartOperationDialog.java b/plugins/git4idea/src/git4idea/branch/GitSmartOperationDialog.java index c3280b4c4442..798906af1966 100644 --- a/plugins/git4idea/src/git4idea/branch/GitSmartOperationDialog.java +++ b/plugins/git4idea/src/git4idea/branch/GitSmartOperationDialog.java @@ -15,20 +15,23 @@ */ package git4idea.branch; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ApplicationNamesInfo; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; -import com.intellij.openapi.util.Ref; +import com.intellij.openapi.vcs.changes.Change; import com.intellij.ui.components.JBLabel; import com.intellij.util.ui.JBUI; import git4idea.DialogManager; +import git4idea.ui.ChangesBrowserWithRollback; +import git4idea.util.GitSimplePathsBrowser; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.event.ActionEvent; +import java.util.Collection; +import java.util.List; import static com.intellij.openapi.util.text.StringUtil.capitalize; @@ -66,17 +69,17 @@ public class GitSmartOperationDialog extends DialogWrapper { * Shows the dialog with the list of local changes preventing merge/checkout and returns the user's choice. */ @NotNull - static Choice showAndGetAnswer(@NotNull Project project, - @NotNull JComponent fileBrowser, - @NotNull String operationTitle, - @Nullable String forceButtonTitle) { - Ref exitCode = Ref.create(); - ApplicationManager.getApplication().invokeAndWait(() -> { - GitSmartOperationDialog dialog = new GitSmartOperationDialog(project, fileBrowser, operationTitle, forceButtonTitle); - DialogManager.show(dialog); - exitCode.set(Choice.fromDialogExitCode(dialog.getExitCode())); - }); - return exitCode.get(); + static Choice show(@NotNull Project project, + @NotNull List changes, + @NotNull Collection paths, + @NotNull String operationTitle, + @Nullable String forceButtonTitle) { + JComponent fileBrowser = !changes.isEmpty() + ? new ChangesBrowserWithRollback(project, changes) + : new GitSimplePathsBrowser(project, paths); + GitSmartOperationDialog dialog = new GitSmartOperationDialog(project, fileBrowser, operationTitle, forceButtonTitle); + DialogManager.show(dialog); + return Choice.fromDialogExitCode(dialog.getExitCode()); } private GitSmartOperationDialog(@NotNull Project project, @NotNull JComponent fileBrowser, @NotNull String operationTitle,