[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:
committed by
Space Team
parent
d3be38476a
commit
f9785c1050
+13
-15
@@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
+1
@@ -37,6 +37,7 @@ internal class PackagePartProviderTestImpl(
|
||||
return providers.flatMapTo(mutableSetOf()) { it.getAllOptionalAnnotationClasses() }.toList()
|
||||
}
|
||||
|
||||
override fun mayHaveOptionalAnnotationClasses(): Boolean = providers.any { it.mayHaveOptionalAnnotationClasses() }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user