do not use busy loop

This commit is contained in:
Alexey Kudravtsev
2013-08-21 13:58:06 +04:00
parent 7ece03dad4
commit ccf03d1915
2 changed files with 20 additions and 4 deletions
@@ -250,6 +250,7 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx
if (callbackWhileWaiting != null) {
callbackWhileWaiting.run();
}
myPassExecutorService.waitFor(50);
UIUtil.dispatchAllInvocationEvents();
Throwable savedException = PassExecutorService.getSavedException(progress);
if (savedException != null) throw savedException;
@@ -47,12 +47,10 @@ import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashMap;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.TestOnly;
import java.util.*;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
/**
@@ -519,4 +517,21 @@ public abstract class PassExecutorService implements Disposable {
public static Throwable getSavedException(DaemonProgressIndicator indicator) {
return indicator.getUserData(THROWABLE_KEY);
}
@TestOnly
public void waitFor(int millis) throws Exception {
ApplicationManager.getApplication().assertIsDispatchThread();
try {
for (Job<Void> job : mySubmittedPasses.values()) {
if (!job.isDone()) {
for (FutureTask task : ((JobImpl)job).getTasks()) {
task.get(millis, TimeUnit.MILLISECONDS);
}
}
}
}
catch (TimeoutException ignored) {
}
}
}