diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/RepositoryLoader.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/RepositoryLoader.java index 29a41b254699..921ee0a5bf7e 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/RepositoryLoader.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/RepositoryLoader.java @@ -2,13 +2,15 @@ package org.jetbrains.idea.svn.dialogs.browserCache; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.progress.EmptyProgressIndicator; +import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.progress.Task; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vcs.VcsException; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.svn.SvnVcs; import org.jetbrains.idea.svn.api.Depth; import org.jetbrains.idea.svn.api.Revision; @@ -16,7 +18,6 @@ import org.jetbrains.idea.svn.api.Target; import org.jetbrains.idea.svn.browse.DirectoryEntry; import org.jetbrains.idea.svn.dialogs.RepositoryTreeNode; -import javax.swing.*; import java.util.List; import java.util.Queue; @@ -75,9 +76,7 @@ class RepositoryLoader extends Loader { } private void startLoadTask(@NotNull final Pair data) { - final ModalityState state = ModalityState.current(); - ApplicationManager.getApplication() - .executeOnPooledThread(() -> ProgressManager.getInstance().runProcess(new LoadTask(data), new EmptyProgressIndicator(state))); + ProgressManager.getInstance().runProcessWithProgressAsynchronously(new LoadTask(data), new EmptyProgressIndicator()); } @Override @@ -86,36 +85,39 @@ class RepositoryLoader extends Loader { return NodeLoadState.REFRESHED; } - private class LoadTask implements Runnable { - + private class LoadTask extends Task.Backgroundable { @NotNull private final Pair myData; + @NotNull private final List entries = newArrayList(); + @Nullable private String error; private LoadTask(@NotNull Pair data) { + super(data.first.getVcs().getProject(), "Loading Child Entries"); myData = data; } @Override - public void run() { - List entries = newArrayList(); - final RepositoryTreeNode node = myData.first; - final SvnVcs vcs = node.getVcs(); + public void run(@NotNull ProgressIndicator indicator) { + RepositoryTreeNode node = myData.first; + SvnVcs vcs = node.getVcs(); + Target target = Target.on(node.getURL()); try { - Target target = Target.on(node.getURL()); vcs.getFactoryFromSettings().createBrowseClient().list(target, Revision.HEAD, Depth.IMMEDIATES, entries::add); } - catch (final VcsException e) { - SwingUtilities.invokeLater(() -> { - setError(myData, e.getMessage()); - startNext(); - }); - return; + catch (VcsException e) { + error = e.getMessage(); } + } - SwingUtilities.invokeLater(() -> { + @Override + public void onSuccess() { + if (error != null) { + setError(myData, error); + } + else { setResults(myData, sorted(entries, DirectoryEntry.CASE_INSENSITIVE_ORDER)); - startNext(); - }); + } + startNext(); } } }