Do not queue bg task under read action

Relates to #EA-218701
This commit is contained in:
Vladimir Dolzhenko
2020-11-13 16:56:14 +01:00
committed by Vladimir Dolzhenko
parent 6e7b5a55b3
commit b6f958f856
@@ -16,7 +16,6 @@ import com.intellij.openapi.project.DumbService
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Computable import com.intellij.openapi.util.Computable
import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil
import com.intellij.util.concurrency.NonUrgentExecutor
import org.jetbrains.kotlin.codegen.ClassBuilderFactories import org.jetbrains.kotlin.codegen.ClassBuilderFactories
import org.jetbrains.kotlin.codegen.KotlinCodegenFacade import org.jetbrains.kotlin.codegen.KotlinCodegenFacade
import org.jetbrains.kotlin.codegen.filterClassFiles import org.jetbrains.kotlin.codegen.filterClassFiles
@@ -56,9 +55,8 @@ class KtScratchExecutionSession(
if (!executor.checkForErrors(psiFile, expressions)) return if (!executor.checkForErrors(psiFile, expressions)) return
val project = file.project val project = file.project
ReadAction.nonBlocking { when (val result = runReadAction { KtScratchSourceFileProcessor().process(expressions) }) {
when (val result = KtScratchSourceFileProcessor().process(expressions)) { is KtScratchSourceFileProcessor.Result.Error -> return executor.errorOccurs(result.message, isFatal = true)
is KtScratchSourceFileProcessor.Result.Error -> return@nonBlocking executor.errorOccurs(result.message, isFatal = true)
is KtScratchSourceFileProcessor.Result.OK -> { is KtScratchSourceFileProcessor.Result.OK -> {
LOG.printDebugMessage("After processing by KtScratchSourceFileProcessor:\n ${result.code}") LOG.printDebugMessage("After processing by KtScratchSourceFileProcessor:\n ${result.code}")
@@ -66,6 +64,7 @@ class KtScratchExecutionSession(
override fun run(indicator: ProgressIndicator) { override fun run(indicator: ProgressIndicator) {
backgroundProcessIndicator = indicator backgroundProcessIndicator = indicator
ReadAction.nonBlocking {
val modifiedScratchSourceFile = runReadAction { val modifiedScratchSourceFile = runReadAction {
KtPsiFactory(psiFile.project).createFileWithLightClassSupport("tmp.kt", result.code, psiFile) KtPsiFactory(psiFile.project).createFileWithLightClassSupport("tmp.kt", result.code, psiFile)
} }
@@ -83,14 +82,16 @@ class KtScratchExecutionSession(
) )
} }
} }
.inSmartMode(project)
.wrapProgress(indicator)
.withDocumentsCommitted(project)
.executeSynchronously()
}
}.queue() }.queue()
} }
} }
}
.inSmartMode(project)
.expireWith(project)
.withDocumentsCommitted(project)
.submit(NonUrgentExecutor.getInstance())
} }
private fun runCommandLine( private fun runCommandLine(