Fix flaky ConfigureKotlinTest

This commit is contained in:
Vladimir Dolzhenko
2020-03-30 17:36:06 +02:00
parent d0e28d7c8d
commit 5f66458cb5
@@ -23,6 +23,8 @@ import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.application.ReadAction.nonBlocking import com.intellij.openapi.application.ReadAction.nonBlocking
import com.intellij.openapi.application.runReadAction import com.intellij.openapi.application.runReadAction
import com.intellij.openapi.externalSystem.service.project.manage.ProjectDataImportListener import com.intellij.openapi.externalSystem.service.project.manage.ProjectDataImportListener
import com.intellij.openapi.module.Module
import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.startup.StartupActivity import com.intellij.openapi.startup.StartupActivity
import com.intellij.util.concurrency.AppExecutorUtil import com.intellij.util.concurrency.AppExecutorUtil
@@ -30,7 +32,6 @@ import org.jetbrains.kotlin.idea.configuration.getModulesWithKotlinFiles
import org.jetbrains.kotlin.idea.configuration.notifyOutdatedBundledCompilerIfNecessary import org.jetbrains.kotlin.idea.configuration.notifyOutdatedBundledCompilerIfNecessary
import org.jetbrains.kotlin.idea.configuration.ui.notifications.notifyKotlinStyleUpdateIfNeeded import org.jetbrains.kotlin.idea.configuration.ui.notifications.notifyKotlinStyleUpdateIfNeeded
import org.jetbrains.kotlin.idea.project.getAndCacheLanguageLevelByDependencies import org.jetbrains.kotlin.idea.project.getAndCacheLanguageLevelByDependencies
import org.jetbrains.kotlin.idea.util.ProgressIndicatorUtils
import org.jetbrains.kotlin.idea.util.application.isUnitTestMode import org.jetbrains.kotlin.idea.util.application.isUnitTestMode
import java.util.concurrent.Callable import java.util.concurrent.Callable
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger
@@ -58,25 +59,33 @@ class KotlinConfigurationCheckerService(val project: Project) {
private val syncDepth = AtomicInteger() private val syncDepth = AtomicInteger()
fun performProjectPostOpenActions() { fun performProjectPostOpenActions() {
nonBlocking(Callable { val callable = Callable {
return@Callable getModulesWithKotlinFiles(project) return@Callable getModulesWithKotlinFiles(project)
}) }
.inSmartMode(project)
.expireWith(project) fun continuation(modulesWithKotlinFiles: Collection<Module>) {
.coalesceBy(this) for (module in modulesWithKotlinFiles) {
.finishOnUiThread(ModalityState.any()) { modulesWithKotlinFiles -> ProgressManager.checkCanceled()
val promise = ApplicationManager.getApplication().executeOnPooledThread { runReadAction {
for (module in modulesWithKotlinFiles) { module.getAndCacheLanguageLevelByDependencies()
runReadAction {
module.getAndCacheLanguageLevelByDependencies()
}
}
}
if (isUnitTestMode()) {
ProgressIndicatorUtils.awaitWithCheckCanceled(promise)
} }
} }
.submit(AppExecutorUtil.getAppExecutorService()) }
if (!isUnitTestMode()) {
nonBlocking(callable)
.inSmartMode(project)
.expireWith(project)
.coalesceBy(this)
.finishOnUiThread(ModalityState.any()) { modulesWithKotlinFiles ->
ApplicationManager.getApplication().executeOnPooledThread {
continuation(modulesWithKotlinFiles)
}
}
.submit(AppExecutorUtil.getAppExecutorService())
} else {
continuation(callable.call())
}
} }
val isSyncing: Boolean get() = syncDepth.get() > 0 val isSyncing: Boolean get() = syncDepth.get() > 0