[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
@@ -35,7 +35,7 @@ internal object LLFirLibraryProviderFactory {
val packagePartProvider = project.createPackagePartProvider(scope)
return LLFirModuleWithDependenciesSymbolProvider(
session,
providers = listOf(
providers = listOfNotNull(
JvmClassFileBasedSymbolProvider(
session,
moduleDataProvider,
@@ -44,7 +44,7 @@ internal object LLFirLibraryProviderFactory {
VirtualFileFinderFactory.getInstance(project).create(scope),
LLFirJavaFacadeForBinaries(session, builtinTypes, project.createJavaClassFinder(scope), moduleDataProvider)
),
OptionalAnnotationClassesProvider(session, moduleDataProvider, kotlinScopeProvider, packagePartProvider),
OptionalAnnotationClassesProvider.createIfNeeded(session, moduleDataProvider, kotlinScopeProvider, packagePartProvider),
),
LLFirDependenciesSymbolProvider(session, listOf(builtinSymbolProvider)),
)
@@ -60,18 +60,16 @@ internal object LLFirLibraryProviderFactory {
): List<FirSymbolProvider> {
val moduleDataProvider = SingleModuleDataProvider(moduleData)
val packagePartProvider = project.createPackagePartProvider(scope)
return buildList {
add(
JvmClassFileBasedSymbolProvider(
session,
moduleDataProvider,
kotlinScopeProvider,
packagePartProvider,
VirtualFileFinderFactory.getInstance(project).create(scope),
LLFirJavaFacadeForBinaries(session, builtinTypes, project.createJavaClassFinder(scope), moduleDataProvider)
)
)
add(OptionalAnnotationClassesProvider(session, moduleDataProvider, kotlinScopeProvider, packagePartProvider))
}
return listOfNotNull(
JvmClassFileBasedSymbolProvider(
session,
moduleDataProvider,
kotlinScopeProvider,
packagePartProvider,
VirtualFileFinderFactory.getInstance(project).create(scope),
LLFirJavaFacadeForBinaries(session, builtinTypes, project.createJavaClassFinder(scope), moduleDataProvider)
),
OptionalAnnotationClassesProvider.createIfNeeded(session, moduleDataProvider, kotlinScopeProvider, packagePartProvider),
)
}
}
@@ -37,6 +37,7 @@ internal class PackagePartProviderTestImpl(
return providers.flatMapTo(mutableSetOf()) { it.getAllOptionalAnnotationClasses() }.toList()
}
override fun mayHaveOptionalAnnotationClasses(): Boolean = providers.any { it.mayHaveOptionalAnnotationClasses() }
}
}
}