From 670f731649b1024b044c699e353d0a02371f4b29 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 12 Jan 2012 19:59:38 +0100 Subject: [PATCH] com.intellij.openapi.vcs.changes.ChangeListManager.ensureUpToDate should wait until all refresh tasks are finished --- .../vcs/changes/ChangeListManagerImpl.java | 1 + .../openapi/vcs/changes/UpdateRequestsQueue.java | 16 ++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java index a9f775283f5c..55f8ba1d6a4a 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java @@ -1304,6 +1304,7 @@ public class ChangeListManagerImpl extends ChangeListManagerEx implements Projec public boolean ensureUpToDate(final boolean canBeCanceled) { final EnsureUpToDateFromNonAWTThread worker = new EnsureUpToDateFromNonAWTThread(myProject); worker.execute(); + myUpdater.waitUntilRefreshed(); return worker.isDone(); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/UpdateRequestsQueue.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/UpdateRequestsQueue.java index 0adfe9eeb859..61f3774c8550 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/UpdateRequestsQueue.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/UpdateRequestsQueue.java @@ -27,7 +27,6 @@ import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.util.Consumer; import com.intellij.util.concurrency.Semaphore; import com.intellij.util.io.storage.HeavyProcessLatch; -import org.jetbrains.annotations.TestOnly; import javax.swing.*; import java.util.ArrayList; @@ -95,15 +94,14 @@ public class UpdateRequestsQueue { } public void schedule() { - if (ChangeListManagerImpl.DEBUG) { - System.out.println("UpdateRequestsQueue.schedule"); - } - synchronized (myLock) { if (! myStarted && ApplicationManager.getApplication().isUnitTestMode()) return; if (! myStopped) { if (! myRequestSubmitted) { + if (ChangeListManagerImpl.DEBUG) { + System.out.println("UpdateRequestsQueue.schedule"); + } final MyRunnable runnable = new MyRunnable(); myRequestSubmitted = true; myExecutor.schedule(runnable, 300, TimeUnit.MILLISECONDS); @@ -142,7 +140,6 @@ public class UpdateRequestsQueue { LOG.debug("Stop finished for project: " + myProject.getName()); } - @TestOnly public void waitUntilRefreshed() { if (ChangeListManagerImpl.DEBUG) { System.out.println("UpdateRequestsQueue.waitUntilRefreshed"); @@ -261,7 +258,14 @@ public class UpdateRequestsQueue { } LOG.debug("MyRunnable: INVOKE, project: " + myProject.getName() + ", runnable: " + hashCode()); + if (ChangeListManagerImpl.DEBUG) { + System.out.println("UpdateRequestsQueue$MyRunnable.run"); + } + myDelegate.run(); + if (ChangeListManagerImpl.DEBUG) { + System.out.println(" - end - UpdateRequestsQueue$MyRunnable.run"); + } LOG.debug("MyRunnable: invokeD, project: " + myProject.getName() + ", runnable: " + hashCode()); } finally { synchronized (myLock) {