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 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"