From 4e3b1f141ea160906d8af57e3d1cb28d7a5f3c0b Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Tue, 1 Sep 2020 10:50:40 +0200 Subject: [PATCH] Use runReadActionInSmartMode instead of runReadAction in ConfigureKotlinInProjectUtils runReadActionInSmartMode has no effect if it is already run under runReadAction - therefore it could lead to IndexNotReadyException ^EA-220414 Fixed ^EA-210940 Fixed ^KT-30929 Fixed --- .../idea/configuration/ConfigureKotlinInProjectUtils.kt | 9 +++------ .../codeInsight/KotlinCopyPasteReferenceProcessor.kt | 8 +++++--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInProjectUtils.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInProjectUtils.kt index fd78e8a8f25..96b55dea0dc 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInProjectUtils.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInProjectUtils.kt @@ -31,12 +31,9 @@ import org.jetbrains.kotlin.idea.core.util.getKotlinJvmRuntimeMarkerClass import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.idea.framework.effectiveKind import org.jetbrains.kotlin.idea.quickfix.KotlinAddRequiredModuleFix +import org.jetbrains.kotlin.idea.util.* import org.jetbrains.kotlin.idea.util.application.isUnitTestMode import org.jetbrains.kotlin.idea.util.application.runReadAction -import org.jetbrains.kotlin.idea.util.findFirstPsiJavaModule -import org.jetbrains.kotlin.idea.util.isDev -import org.jetbrains.kotlin.idea.util.isEap -import org.jetbrains.kotlin.idea.util.isSnapshot import org.jetbrains.kotlin.idea.util.projectStructure.allModules import org.jetbrains.kotlin.idea.util.projectStructure.sdk import org.jetbrains.kotlin.idea.util.projectStructure.version @@ -267,7 +264,7 @@ fun findApplicableConfigurator(module: Module): KotlinProjectConfigurator { } fun hasAnyKotlinRuntimeInScope(module: Module): Boolean { - return runReadAction { + return module.project.runReadActionInSmartMode { val scope = module.getModuleWithDependenciesAndLibrariesScope(hasKotlinFilesOnlyInTests(module)) getKotlinJvmRuntimeMarkerClass(module.project, scope) != null || hasKotlinJsKjsmFile(module.project, LibraryKindSearchScope(module, scope, JSLibraryKind)) || @@ -283,7 +280,7 @@ fun hasKotlinJvmRuntimeInScope(module: Module): Boolean { } fun hasKotlinJsRuntimeInScope(module: Module): Boolean { - return runReadAction { + return module.project.runReadActionInSmartMode { val scope = module.getModuleWithDependenciesAndLibrariesScope(hasKotlinFilesOnlyInTests(module)) hasKotlinJsKjsmFile(module.project, LibraryKindSearchScope(module, scope, JSLibraryKind)) } diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt index a79b34091f2..166aac235d5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt @@ -167,9 +167,11 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor() } } + val project = file.project + // TODO: allowResolveInDispatchThread could be dropped as soon as // ConvertJavaCopyPasteProcessor will perform it on non UI thread - val bindingContext = runReadAction { + val bindingContext = project.runReadActionInSmartMode { allowResolveInDispatchThread { file.getResolutionFacade().analyze(allElementsToResolve, BodyResolveMode.PARTIAL) } @@ -177,7 +179,7 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor() for (ktElement in allElementsToResolve) { - runReadAction { + project.runReadActionInSmartMode { indicator?.checkCanceled() result.addReferenceDataInsideElement( ktElement, file, ranges, bindingContext, fakePackageName = fakePackageName, @@ -211,7 +213,7 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor