K2: Introduce FirCachingCompositeSymbolProvider

The main idea is pre-computing the sets of names that might be
met there, that helps to decrease the sizes of the backing maps
(by avoiding irrelevant keys)

Totally, this branch with previous commits speeds up MT Full Kotlin
approximately on 3 seconds (~5%)
This commit is contained in:
Denis.Zharkov
2023-01-06 17:29:44 +01:00
committed by Space Team
parent 6705d211a6
commit 9c988fd8d8
18 changed files with 437 additions and 44 deletions
@@ -85,6 +85,8 @@ abstract class FirJavaFacade(
return classId.relativeClassName.topLevelName() in knownNames
}
fun knownClassNamesInPackage(packageFqName: FqName): Set<String>? = knownClassNamesInPackage.getValue(packageFqName)
abstract fun getModuleDataForClass(javaClass: JavaClass): FirModuleData
private fun JavaTypeParameter.toFirTypeParameter(
@@ -45,6 +45,12 @@ class JavaSymbolProvider(
override fun getClassLikeSymbolByClassId(classId: ClassId): FirRegularClassSymbol? =
if (javaFacade.hasTopLevelClassOf(classId)) getFirJavaClass(classId) else null
override fun computePackageSetWithTopLevelCallables(): Set<String> = emptySet()
override fun knownTopLevelClassifiersInPackage(packageFqName: FqName): Set<String>? = javaFacade.knownClassNamesInPackage(packageFqName)
override fun computeCallableNamesInPackage(packageFqName: FqName): Set<Name> = emptySet()
private fun getFirJavaClass(classId: ClassId): FirRegularClassSymbol? =
classCache.getValue(classId, classId.outerClassId?.let { getFirJavaClass(it) })
@@ -99,7 +99,7 @@ class JvmClassFileBasedSymbolProvider(
override fun computePackageSetWithNonClassDeclarations(): Set<String> = packagePartProvider.computePackageSetWithNonClassDeclarations()
override fun mayHaveTopLevelClass(classId: ClassId): Boolean = javaFacade.hasTopLevelClassOf(classId)
override fun knownTopLevelClassesInPackage(packageFqName: FqName): Set<String>? = javaFacade.knownClassNamesInPackage(packageFqName)
private val KotlinJvmBinaryClass.incompatibility: IncompatibleVersionErrorData<JvmMetadataVersion>?
get() {
@@ -45,13 +45,22 @@ class OptionalAnnotationClassesProvider(
return@lazy Pair(optionalAnnotationClasses, optionalAnnotationPackages)
}
private val optionalAnnotationClassNamesByPackage: Map<FqName, Set<String>> by lazy(LazyThreadSafetyMode.PUBLICATION) {
buildMap<FqName, MutableSet<String>> {
for (classId in optionalAnnotationClassesAndPackages.first.keys) {
getOrPut(classId.packageFqName, ::mutableSetOf).add(classId.shortClassName.asString())
}
}
}
override fun computePackagePartsInfos(packageFqName: FqName): List<PackagePartsCacheData> {
return emptyList()
}
override fun computePackageSetWithNonClassDeclarations(): Set<String> = optionalAnnotationClassesAndPackages.second
override fun mayHaveTopLevelClass(classId: ClassId): Boolean = classId in optionalAnnotationClassesAndPackages.first
override fun knownTopLevelClassesInPackage(packageFqName: FqName): Set<String> =
optionalAnnotationClassNamesByPackage[packageFqName] ?: emptySet()
override fun extractClassMetadata(
classId: ClassId,