assertion

This commit is contained in:
Alexey Kudravtsev
2009-11-23 14:38:14 +03:00
parent 41131f282e
commit 7c81076e77
2 changed files with 21 additions and 19 deletions
@@ -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
@@ -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<CacheUpdateRunner> NULL_ACTION = new Ref<CacheUpdateRunner>(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;