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:
committed by
Space Team
parent
6705d211a6
commit
9c988fd8d8
@@ -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) })
|
||||
|
||||
|
||||
+1
-1
@@ -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() {
|
||||
|
||||
+10
-1
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user