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? {
|
override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol? {
|
||||||
|
if (!hasTopLevelClassOf(classId)) return null
|
||||||
return classCache.lookupCacheOrCalculateWithPostCompute(classId, {
|
return classCache.lookupCacheOrCalculateWithPostCompute(classId, {
|
||||||
val foundClass = findClass(classId)
|
val foundClass = findClass(classId)
|
||||||
if (foundClass == null || foundClass.annotations.any { it.classId?.asSingleFqName() == JvmAnnotationNames.METADATA_FQ_NAME }) {
|
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 }
|
.filter { it.classId.relativeClassName.parent().isRoot }
|
||||||
.map { it.fir }
|
.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