mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
svn: Refactor "RepositoryLoader" - get rid of "SwingUtilities.invokeLater()" calls
This commit is contained in:
+23
-21
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user