From f3ad2cd1ffd0f9a7ef57e8aa28876ec4a2e24d9b Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 28 Mar 2017 15:10:51 +0200 Subject: [PATCH] Don't recreate ProjectResolutionFacade on every completion Rely on POM events sent when modifying synthetic file copies during completion to update the OOCB modification count, and recreate facade only on OOCB mod count changes. --- .../idea/caches/resolve/KotlinCacheServiceImpl.kt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt index f983301e24a..6bf41406943 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt @@ -182,9 +182,18 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { val targetPlatform = files.map { TargetPlatformDetector.getPlatform(it) }.toSet().single() val syntheticFileModule = files.map(KtFile::getModuleInfo).toSet().single() val sdk = syntheticFileModule.sdk - val filesModificationTracker = ModificationTracker { - // TODO: Check getUserData(FILE_OUT_OF_BLOCK_MODIFICATION_COUNT) actually works - files.sumByLong { it.outOfBlockModificationCount + it.modificationStamp } + val filesModificationTracker: ModificationTracker + // File copies are created during completion and receive correct modification events through POM. + // Dummy files created e.g. by J2K do not receive events. + if (files.all { it.originalFile != it }) { + filesModificationTracker = ModificationTracker { + files.sumByLong { it.outOfBlockModificationCount } + } + } + else { + filesModificationTracker = ModificationTracker { + files.sumByLong { it.outOfBlockModificationCount + it.modificationStamp } + } } val dependenciesForSyntheticFileCache = listOf(PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT, filesModificationTracker) val debugName = "completion/highlighting in $syntheticFileModule for files ${files.joinToString { it.name }} for platform $targetPlatform"