[LL FIR] KT-57455 Avoid creating optional annotation class providers

- An `OptionalAnnotationClassesProvider` only needs to be created if the
  package part provider may even have optional annotation classes.
- In the IDE case, the package part provider never provides optional
  annotation classes, so especially in the IDE, we can avoid a lot of
  useless symbol providers with this.
This commit is contained in:
Marco Pennekamp
2023-03-20 20:14:21 +01:00
committed by Space Team
parent d3be38476a
commit f9785c1050
6 changed files with 53 additions and 15 deletions
@@ -66,6 +66,11 @@ abstract class JvmPackagePartProviderBase<MappingsKey> : PackageAndMetadataPartP
getAllOptionalAnnotationClasses(module.mapping)
}
override fun mayHaveOptionalAnnotationClasses(): Boolean {
// `loadedModules` is mutable, so even a package part provider without optional annotation classes may have some in the future.
return true
}
companion object {
fun getAllOptionalAnnotationClasses(module: ModuleMapping): List<ClassData> {
val data = module.moduleData
@@ -28,6 +28,11 @@ interface PackagePartProvider {
fun getAllOptionalAnnotationClasses(): List<ClassData>
/**
* Returns `true` if [getAllOptionalAnnotationClasses] may return a non-empty list.
*/
fun mayHaveOptionalAnnotationClasses(): Boolean
object Empty : PackagePartProvider {
override fun findPackageParts(packageFqName: String): List<String> = emptyList()
@@ -35,6 +40,8 @@ interface PackagePartProvider {
override fun getAllOptionalAnnotationClasses(): List<ClassData> = emptyList()
override fun mayHaveOptionalAnnotationClasses(): Boolean = false
override fun computePackageSetWithNonClassDeclarations(): Set<String> = emptySet()
}
}