Optimize adding lookups to lookup storage
This commit is contained in:
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.incremental.components.Position
|
|||||||
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
||||||
import org.jetbrains.kotlin.incremental.storage.*
|
import org.jetbrains.kotlin.incremental.storage.*
|
||||||
import org.jetbrains.kotlin.utils.Printer
|
import org.jetbrains.kotlin.utils.Printer
|
||||||
|
import org.jetbrains.kotlin.utils.keysToMap
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -61,11 +62,16 @@ open class LookupStorage(private val targetDataDir: File) : BasicMapsOwner() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun add(lookupSymbol: LookupSymbol, containingPaths: Collection<String>) {
|
fun addAll(lookups: Set<Map.Entry<LookupSymbol, Collection<String>>>) {
|
||||||
val key = LookupSymbolKey(lookupSymbol.name, lookupSymbol.scope)
|
val allPaths = lookups.flatMapTo(HashSet<String>()) { it.value }
|
||||||
val fileIds = containingPaths.map { addFileIfNeeded(File(it)) }.toHashSet()
|
val pathToId = allPaths.keysToMap { addFileIfNeeded(File(it)) }
|
||||||
fileIds.addAll(lookupMap[key] ?: emptySet())
|
|
||||||
lookupMap[key] = fileIds
|
for ((lookupSymbol, paths) in lookups) {
|
||||||
|
val key = LookupSymbolKey(lookupSymbol.name, lookupSymbol.scope)
|
||||||
|
val fileIds = paths.mapTo(HashSet<Int>()) { pathToId[it]!! }
|
||||||
|
fileIds.addAll(lookupMap[key] ?: emptySet())
|
||||||
|
lookupMap[key] = fileIds
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun removeLookupsFrom(file: File) {
|
fun removeLookupsFrom(file: File) {
|
||||||
|
|||||||
@@ -542,7 +542,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
val removedFiles = chunk.targets.flatMap { KotlinSourceFileCollector.getRemovedKotlinFiles(dirtyFilesHolder, it) }
|
val removedFiles = chunk.targets.flatMap { KotlinSourceFileCollector.getRemovedKotlinFiles(dirtyFilesHolder, it) }
|
||||||
removedFiles.forEach { lookupStorage.removeLookupsFrom(it) }
|
removedFiles.forEach { lookupStorage.removeLookupsFrom(it) }
|
||||||
|
|
||||||
lookupTracker.lookups.entrySet().forEach { lookupStorage.add(it.key, it.value) }
|
lookupStorage.addAll(lookupTracker.lookups.entrySet())
|
||||||
}
|
}
|
||||||
|
|
||||||
// if null is returned, nothing was done
|
// if null is returned, nothing was done
|
||||||
|
|||||||
Reference in New Issue
Block a user