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:
+12
-3
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user