diff --git a/spellchecker/src/com/intellij/spellchecker/grazie/async/WordListLoader.kt b/spellchecker/src/com/intellij/spellchecker/grazie/async/WordListLoader.kt index b7171ae2fea5..ce0d2bef0696 100644 --- a/spellchecker/src/com/intellij/spellchecker/grazie/async/WordListLoader.kt +++ b/spellchecker/src/com/intellij/spellchecker/grazie/async/WordListLoader.kt @@ -6,18 +6,15 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.EDT import com.intellij.openapi.diagnostic.debug import com.intellij.openapi.diagnostic.logger -import com.intellij.openapi.progress.blockingContext import com.intellij.openapi.progress.ProgressManager +import com.intellij.openapi.progress.blockingContext import com.intellij.openapi.project.Project import com.intellij.openapi.startup.StartupManager import com.intellij.spellchecker.dictionary.Loader import com.intellij.spellchecker.grazie.dictionary.SimpleWordList import com.intellij.util.containers.CollectionFactory import com.intellij.util.containers.ContainerUtil -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext +import kotlinx.coroutines.* import java.util.concurrent.atomic.AtomicBoolean private val LOG = logger() @@ -49,13 +46,21 @@ internal class WordListLoader(private val project: Project, private val coroutin coroutineScope.launch { LOG.debug("${loader} loaded!") - consumer(loader.name, SimpleWordList(readAll(loader))) + + val list = blockingContext { // makes checkCanceled() work inside constructor + SimpleWordList(readAll(loader)) + } + consumer(loader.name, list) while (listsToLoad.isNotEmpty()) { - ProgressManager.checkCanceled() + ensureActive() // checkCanceled does not work in a coroutine + // ProgressManager.checkCanceled() val (curLoader, currentConsumer) = listsToLoad.removeAt(0) LOG.debug("${curLoader.name} loaded!") - currentConsumer(curLoader.name, SimpleWordList(readAll(curLoader))) + val simpleWordList = blockingContext { // makes checkCanceled() work inside constructor + SimpleWordList(readAll(curLoader)) + } + currentConsumer(curLoader.name, simpleWordList) } LOG.debug("Loading finished, restarting daemon...")