FIR Java: implement knownClassNamesInPackage optimization
This commit is contained in:
committed by
Mikhail Glukhikh
parent
a51b7fb8d0
commit
082e9d1cd7
@@ -51,6 +51,7 @@ class JavaSymbolProvider(
|
||||
}
|
||||
|
||||
override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol? {
|
||||
if (!hasTopLevelClassOf(classId)) return null
|
||||
return classCache.lookupCacheOrCalculateWithPostCompute(classId, {
|
||||
val foundClass = findClass(classId)
|
||||
if (foundClass == null || foundClass.annotations.any { it.classId?.asSingleFqName() == JvmAnnotationNames.METADATA_FQ_NAME }) {
|
||||
@@ -152,5 +153,18 @@ class JavaSymbolProvider(
|
||||
.filter { it.classId.relativeClassName.parent().isRoot }
|
||||
.map { it.fir }
|
||||
}
|
||||
|
||||
private val knownClassNamesInPackage = mutableMapOf<FqName, Set<String>?>()
|
||||
|
||||
private fun hasTopLevelClassOf(classId: ClassId): Boolean {
|
||||
val knownNames = knownClassNamesInPackage.getOrPut(classId.packageFqName) {
|
||||
facade.knownClassNamesInPackage(classId.packageFqName)
|
||||
} ?: return true
|
||||
return classId.relativeClassName.topLevelName() in knownNames
|
||||
}
|
||||
}
|
||||
|
||||
fun FqName.topLevelName() =
|
||||
asString().substringBefore(".")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user