From 4d5d72992da36fb78272f80947f845a32a667fd0 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 20 Jun 2014 12:59:57 +0400 Subject: [PATCH] wait for refresh finish before start highlighting in tests --- .../daemon/impl/DaemonCodeAnalyzerImpl.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java index 65d302e8ec21..e05f0c5f79dc 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java @@ -30,9 +30,10 @@ import com.intellij.codeInsight.intention.impl.IntentionHintComponent; import com.intellij.ide.PowerSaveMode; import com.intellij.lang.annotation.HighlightSeverity; 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.application.ex.ApplicationEx; +import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.components.NamedComponent; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; @@ -55,6 +56,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.*; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.openapi.vfs.newvfs.RefreshQueueImpl; import com.intellij.packageDependencies.DependencyValidationManager; import com.intellij.psi.PsiCompiledElement; import com.intellij.psi.PsiDocumentManager; @@ -66,6 +68,7 @@ import com.intellij.util.Alarm; import com.intellij.util.CommonProcessors; import com.intellij.util.Processor; import com.intellij.util.SmartList; +import com.intellij.util.io.storage.HeavyProcessLatch; import com.intellij.util.ui.UIUtil; import gnu.trove.THashMap; import gnu.trove.THashSet; @@ -273,7 +276,7 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzerEx implements JDOM @Nullable Runnable callbackWhileWaiting) throws ProcessCanceledException { assert myInitialized; assert !myDisposed; - Application application = ApplicationManager.getApplication(); + ApplicationEx application = ApplicationManagerEx.getApplicationEx(); application.assertIsDispatchThread(); if (application.isWriteAccessAllowed()) { throw new AssertionError("Must not start highlighting from within write action, or deadlock is imminent"); @@ -282,6 +285,12 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzerEx implements JDOM ((FileTypeManagerImpl)FileTypeManager.getInstance()).drainReDetectQueue(); // pump first so that queued event do not interfere UIUtil.dispatchAllInvocationEvents(); + + // refresh will fire write actions interfering with highlighting + while (RefreshQueueImpl.isRefreshInProgress() || HeavyProcessLatch.INSTANCE.isRunning()) { + UIUtil.dispatchAllInvocationEvents(); + } + UIUtil.dispatchAllInvocationEvents(); Project project = file.getProject();