diff --git a/platform/platform-api/src/com/intellij/openapi/project/DumbService.java b/platform/platform-api/src/com/intellij/openapi/project/DumbService.java index 37d7522561dc..ac4b8d551428 100644 --- a/platform/platform-api/src/com/intellij/openapi/project/DumbService.java +++ b/platform/platform-api/src/com/intellij/openapi/project/DumbService.java @@ -16,13 +16,11 @@ package com.intellij.openapi.project; import com.intellij.openapi.Disposable; -import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.ui.popup.BalloonHandler; import com.intellij.openapi.util.NotNullLazyKey; -import com.intellij.util.concurrency.Semaphore; import com.intellij.util.messages.Topic; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -57,22 +55,7 @@ public abstract class DumbService { */ public abstract void runWhenSmart(Runnable runnable); - public void waitForSmartMode() { - final Application application = ApplicationManager.getApplication(); - if (!application.isUnitTestMode()) { - assert !application.isDispatchThread(); - assert !application.isReadAccessAllowed(); - } - - final Semaphore semaphore = new Semaphore(); - semaphore.down(); - runWhenSmart(new Runnable() { - public void run() { - semaphore.up(); - } - }); - semaphore.waitFor(); - } + public abstract void waitForSmartMode(); /** * Invoke the runnable later on EventDispatchThread AND when IDEA isn't in dumb mode diff --git a/platform/platform-impl/src/com/intellij/openapi/project/DumbServiceImpl.java b/platform/platform-impl/src/com/intellij/openapi/project/DumbServiceImpl.java index 545433b3978c..04ce9a100991 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/DumbServiceImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/project/DumbServiceImpl.java @@ -28,6 +28,7 @@ import com.intellij.openapi.ui.popup.BalloonHandler; import com.intellij.openapi.util.Ref; import com.intellij.openapi.wm.WindowManager; import com.intellij.openapi.wm.ex.StatusBarEx; +import com.intellij.util.concurrency.Semaphore; import com.intellij.util.containers.Queue; import com.intellij.util.messages.MessageBus; import org.jetbrains.annotations.NotNull; @@ -184,7 +185,25 @@ public class DumbServiceImpl extends DumbService { } private static final Ref NULL_ACTION = new Ref(null); - + + public void waitForSmartMode() { + final Application application = ApplicationManager.getApplication(); + if (!application.isUnitTestMode()) { + assert !application.isDispatchThread(); + assert !application.isReadAccessAllowed(); + } + + final Semaphore semaphore = new Semaphore(); + semaphore.down(); + runWhenSmart(new Runnable() { + public void run() { + semaphore.up(); + } + }); + semaphore.waitFor(); + LOG.assertTrue(!isDumb()); + } + private class IndexUpdateRunnable implements Runnable { private final CacheUpdateRunner myAction; private double myProcessedItems;