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 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"
|
||||||
|
|||||||
Reference in New Issue
Block a user