svn: Refactor "RepositoryLoader" - get rid of "SwingUtilities.invokeLater()" calls

This commit is contained in:
Konstantin Kolosovsky
2018-11-21 16:56:50 +03:00
parent 5fe81e804f
commit 37f2e5bd86
@@ -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<RepositoryTreeNode, Expander> 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<RepositoryTreeNode, Expander> myData;
@NotNull private final List<DirectoryEntry> entries = newArrayList();
@Nullable private String error;
private LoadTask(@NotNull Pair<RepositoryTreeNode, Expander> data) {
super(data.first.getVcs().getProject(), "Loading Child Entries");
myData = data;
}
@Override
public void run() {
List<DirectoryEntry> 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();
}
}
}