diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java index a695f74754f8..1731237582a1 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java @@ -23,6 +23,7 @@ import com.intellij.ui.ColoredTreeCellRenderer; import com.intellij.util.ArrayUtil; import com.intellij.util.EventDispatcher; import com.intellij.util.Function; +import com.intellij.util.containers.ConcurrentHashSet; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.Convertor; import com.intellij.util.xmlb.XmlSerializationException; @@ -111,7 +112,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe private final List myRepositories = new ArrayList(); private final EventDispatcher myDispatcher = EventDispatcher.create(TaskListener.class); - private Set myBadRepositories = new HashSet(); + private Set myBadRepositories = new ConcurrentHashSet(); public TaskManagerImpl(Project project, WorkingContextManager contextManager, @@ -227,7 +228,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe @Override public List getIssues(String query) { - List tasks = getIssuesFromRepositories(query, 50, 0); + List tasks = getIssuesFromRepositories(query, 50, 0, true); synchronized (myIssueCache) { myTemporaryCache.clear(); myTemporaryCache.putAll(ContainerUtil.assignKeys(tasks.iterator(), KEY_CONVERTOR)); @@ -416,6 +417,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe ProgressManager.getInstance().run(task); Exception e = task.myException; if (e == null) { + myBadRepositories.remove(repository); Messages.showMessageDialog(myProject, "Connection is successful", "Connection", Messages.getInformationIcon()); } else if (!(e instanceof ProcessCanceledException)) { @@ -634,7 +636,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { public void run() { try { - List issues = getIssuesFromRepositories(null, myConfig.updateIssuesCount, 0); + List issues = getIssuesFromRepositories(null, myConfig.updateIssuesCount, 0, false); synchronized (myIssueCache) { myIssueCache.clear(); @@ -665,14 +667,15 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe }); } - private List getIssuesFromRepositories(String request, int max, long since) { + private List getIssuesFromRepositories(String request, int max, long since, boolean forceRequest) { List issues = new ArrayList(); for (final TaskRepository repository : getAllRepositories()) { - if (!repository.isConfigured() || myBadRepositories.contains(repository)) { + if (!repository.isConfigured() || (!forceRequest && myBadRepositories.contains(repository))) { continue; } try { Task[] tasks = repository.getIssues(request, max, since); + myBadRepositories.remove(repository); ContainerUtil.addAll(issues, tasks); } catch (Exception e) {