diff --git a/idea/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt b/idea/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt index 14bf9cfb0bf..ba6881b19f5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt +++ b/idea/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt @@ -38,7 +38,6 @@ import org.intellij.plugins.intelliLang.util.AnnotationUtilEx import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.references.KtReference -import org.jetbrains.kotlin.idea.runInReadActionWithWriteActionPriorityWithPCE import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* @@ -78,15 +77,17 @@ class KotlinLanguageInjector( val modificationCount = PsiManager.getInstance(project).modificationTracker.modificationCount val baseInjection = when { - needImmediateAnswer -> kotlinCachedInjection?.baseInjection ?: ABSENT_KOTLIN_INJECTION + needImmediateAnswer -> { + // Can't afford long counting or typing will be laggy. Force cache reuse even if it's outdated. + kotlinCachedInjection?.baseInjection ?: ABSENT_KOTLIN_INJECTION + } kotlinCachedInjection != null && (modificationCount == kotlinCachedInjection.modificationCount) -> + // Cache is up-to-date kotlinCachedInjection.baseInjection else -> { - runInReadActionWithWriteActionPriorityWithPCE { - val computedInjection = computeBaseInjection(ktHost, support, registrar) ?: ABSENT_KOTLIN_INJECTION - ktHost.cachedInjectionWithModification = KotlinCachedInjection(modificationCount, computedInjection) - computedInjection - } + val computedInjection = computeBaseInjection(ktHost, support, registrar) ?: ABSENT_KOTLIN_INJECTION + ktHost.cachedInjectionWithModification = KotlinCachedInjection(modificationCount, computedInjection) + computedInjection } }