From f63a9ee556b277ee0d77a550c6e82cbf80329a37 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Wed, 20 Jan 2016 16:03:19 +0300 Subject: [PATCH] Optimize adding lookups to lookup storage --- .../kotlin/incremental/LookupStorage.kt | 16 +++++++++++----- .../jetbrains/kotlin/jps/build/KotlinBuilder.kt | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/build/src/org/jetbrains/kotlin/incremental/LookupStorage.kt b/build/src/org/jetbrains/kotlin/incremental/LookupStorage.kt index e1ca3696acf..680a9879826 100644 --- a/build/src/org/jetbrains/kotlin/incremental/LookupStorage.kt +++ b/build/src/org/jetbrains/kotlin/incremental/LookupStorage.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.incremental.components.Position import org.jetbrains.kotlin.incremental.components.ScopeKind import org.jetbrains.kotlin.incremental.storage.* import org.jetbrains.kotlin.utils.Printer +import org.jetbrains.kotlin.utils.keysToMap import java.io.File import java.util.* @@ -61,11 +62,16 @@ open class LookupStorage(private val targetDataDir: File) : BasicMapsOwner() { } } - fun add(lookupSymbol: LookupSymbol, containingPaths: Collection) { - val key = LookupSymbolKey(lookupSymbol.name, lookupSymbol.scope) - val fileIds = containingPaths.map { addFileIfNeeded(File(it)) }.toHashSet() - fileIds.addAll(lookupMap[key] ?: emptySet()) - lookupMap[key] = fileIds + fun addAll(lookups: Set>>) { + val allPaths = lookups.flatMapTo(HashSet()) { it.value } + val pathToId = allPaths.keysToMap { addFileIfNeeded(File(it)) } + + for ((lookupSymbol, paths) in lookups) { + val key = LookupSymbolKey(lookupSymbol.name, lookupSymbol.scope) + val fileIds = paths.mapTo(HashSet()) { pathToId[it]!! } + fileIds.addAll(lookupMap[key] ?: emptySet()) + lookupMap[key] = fileIds + } } fun removeLookupsFrom(file: File) { diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index a0c2c725afa..6ab0bf66423 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -542,7 +542,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { val removedFiles = chunk.targets.flatMap { KotlinSourceFileCollector.getRemovedKotlinFiles(dirtyFilesHolder, 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