From c327118eaca5def29993039a0041e611fa8c21e7 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 6 Sep 2017 17:43:20 +0300 Subject: [PATCH] Remove PCE throwing as it can cancel background tasks (KT-19901) Method can be called from the background task and be paused because the write action is in progress. Throwing the PCE might stop the whole task, that is wrong. Explicit read action seems to be unneeded. #KT-19901 Fixed --- .../idea/injection/KotlinLanguageInjector.kt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) 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 } }