From 10fd480262c932b8e4f8fd82bc7b2f2241d13904 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Tue, 24 Jun 2014 18:11:22 +0400 Subject: [PATCH] Exclude all local and cached tasks from those returned by server in TaskItemProvider --- .../intellij/tasks/actions/TaskItemProvider.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/TaskItemProvider.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/TaskItemProvider.java index afa94414c35c..2511fdef536b 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/TaskItemProvider.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/TaskItemProvider.java @@ -20,8 +20,6 @@ import java.util.List; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicReference; -import static com.intellij.tasks.actions.TaskSearchSupport.getRepositoriesTasks; - /** * @author Mikhail Golubev */ @@ -88,7 +86,15 @@ class TaskItemProvider implements ChooseByNameItemProvider, Disposable { try { List tasks = future.get(); myFutureReference.compareAndSet(future, null); - tasks.removeAll(cachedAndLocalTasks); + + // Exclude *all* cached and local issues, not only those returned by TaskSearchSupport.getLocalAndCachedTasks(). + // Previously used approach might lead to the following strange behavior. Local task excluded by getLocalAndCachedTasks() + // as "locally closed" (i.e. having no associated change list) was indeed *included* in popup because it + // was contained in server response (as not remotely closed). Moreover on next request with pagination when the + // same issues was not returned again by server it was *excluded* from popup (thus subsequent update reduced total + // number of items shown). + tasks.removeAll(TaskManager.getManager(myProject).getLocalTasks()); + tasks.removeAll(TaskManager.getManager(myProject).getCachedIssues()); return processTasks(tasks, consumer, cancelled); } catch (InterruptedException interrupted) { @@ -138,7 +144,8 @@ class TaskItemProvider implements ChooseByNameItemProvider, Disposable { limit = GotoTaskAction.PAGE_SIZE; myCurrentOffset += GotoTaskAction.PAGE_SIZE; } - List tasks = getRepositoriesTasks(TaskManager.getManager(myProject), pattern, offset, limit, true, everywhere, cancelled); + List tasks = TaskSearchSupport.getRepositoriesTasks(TaskManager.getManager(myProject), + pattern, offset, limit, true, everywhere, cancelled); myOldEverywhere = everywhere; myOldPattern = pattern; return tasks;