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.
This commit is contained in:
Dmitry Jemerov
2017-03-28 15:10:51 +02:00
parent 0d5913287f
commit f3ad2cd1ff
@@ -182,9 +182,18 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
val targetPlatform = files.map { TargetPlatformDetector.getPlatform(it) }.toSet().single() val targetPlatform = files.map { TargetPlatformDetector.getPlatform(it) }.toSet().single()
val syntheticFileModule = files.map(KtFile::getModuleInfo).toSet().single() val syntheticFileModule = files.map(KtFile::getModuleInfo).toSet().single()
val sdk = syntheticFileModule.sdk val sdk = syntheticFileModule.sdk
val filesModificationTracker = ModificationTracker { val filesModificationTracker: ModificationTracker
// TODO: Check getUserData(FILE_OUT_OF_BLOCK_MODIFICATION_COUNT) actually works // File copies are created during completion and receive correct modification events through POM.
files.sumByLong { it.outOfBlockModificationCount + it.modificationStamp } // 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 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" val debugName = "completion/highlighting in $syntheticFileModule for files ${files.joinToString { it.name }} for platform $targetPlatform"