mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-02-04 15:06:56 +07:00
[Grazie][IDEA-318518] Add blockingContext for SimpleWordList constructor calls
SimpleWordList uses plain checkCanceled in the initialization of its fields. GitOrigin-RevId: fd751562ae94a301d85f01bad1d753c8b3c30eba
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5069eb8448
commit
13c07914d9
@@ -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<WordListLoader>()
|
||||
@@ -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...")
|
||||
|
||||
Reference in New Issue
Block a user