K2: Optimize AbstractFirDeserializedSymbolProvider
Avoid filling caches with keys that are definitely empty (if it's cheap to compute that), to decrease the size of backing maps. The strategy is pre-computing the sets of names that might be met. NB: the size of the sets is way fewer than a size of all queried names.
This commit is contained in:
committed by
Space Team
parent
e2e87bd107
commit
58c1b5dd1f
+5
@@ -39,6 +39,11 @@ abstract class JvmPackagePartProviderBase<MappingsKey> : PackagePartProvider, Me
|
||||
return result.toList()
|
||||
}
|
||||
|
||||
private val allPackageNames: Set<String> by lazy {
|
||||
loadedModules.flatMapTo(mutableSetOf()) { it.mapping.packageFqName2Parts.keys }
|
||||
}
|
||||
|
||||
override fun computePackageSetWithNonClassDeclarations(): Set<String> = allPackageNames
|
||||
override fun findMetadataPackageParts(packageFqName: String): List<String> =
|
||||
getPackageParts(packageFqName).flatMap(PackageParts::metadataParts).distinct()
|
||||
|
||||
|
||||
+8
@@ -18,6 +18,12 @@ interface PackagePartProvider {
|
||||
*/
|
||||
fun findPackageParts(packageFqName: String): List<String>
|
||||
|
||||
/**
|
||||
* This method is only for sake of optimization
|
||||
* @return package names set for which that provider has package parts
|
||||
*/
|
||||
fun computePackageSetWithNonClassDeclarations(): Set<String>
|
||||
|
||||
fun getAnnotationsOnBinaryModule(moduleName: String): List<ClassId>
|
||||
|
||||
fun getAllOptionalAnnotationClasses(): List<ClassData>
|
||||
@@ -28,5 +34,7 @@ interface PackagePartProvider {
|
||||
override fun getAnnotationsOnBinaryModule(moduleName: String): List<ClassId> = emptyList()
|
||||
|
||||
override fun getAllOptionalAnnotationClasses(): List<ClassData> = emptyList()
|
||||
|
||||
override fun computePackageSetWithNonClassDeclarations(): Set<String> = emptySet()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user