[FIR] Fix dependencyProviders generation in FirDependenciesSymbolProviderImpl

Get rid of unnecessary creating of FirCompositeSymbolProvider
This commit is contained in:
Ivan Kochurkin
2022-10-03 16:22:33 +02:00
committed by Space Team
parent fe670d98a9
commit 69ee40325b
2 changed files with 6 additions and 39 deletions
@@ -33,48 +33,16 @@ open class FirDependenciesSymbolProviderImpl(session: FirSession) : FirDependenc
protected open val dependencyProviders by lazy {
val moduleData =
session.nullableModuleData ?: error("FirDependenciesSymbolProvider should not be created if there are no dependencies")
(moduleData.dependencies + moduleData.friendDependencies + moduleData.dependsOnDependencies)
val result = (moduleData.dependencies + moduleData.friendDependencies + moduleData.dependsOnDependencies)
.mapNotNull { session.sessionProvider?.getSession(it) }
.sortedBy { it.kind }
.map {
if (it.kind == FirSession.Kind.Source) {
it.symbolProvider.loadTransitiveSourceProvides()
} else {
listOf(it.symbolProvider)
}
}
.flatten()
}
private fun FirSymbolProvider.loadTransitiveSourceProvides(): List<FirSymbolProvider> {
val result = mutableListOf<FirSymbolProvider>()
val visited = hashSetOf<FirSymbolProvider>()
fun loadTransitiveSourceProvides(provider: FirSymbolProvider) {
if (!visited.add(provider)) {
return
}
when {
provider is FirDependenciesSymbolProviderImpl -> {
for (p in provider.dependencyProviders) {
loadTransitiveSourceProvides(p)
}
}
provider is FirCompositeSymbolProvider -> {
for (p in provider.providers) {
loadTransitiveSourceProvides(p)
}
}
provider.session.kind == FirSession.Kind.Source -> {
result.add(provider)
}
.map { it.symbolProvider }
result.flatMap {
when (it) {
is FirCompositeSymbolProvider -> it.providers
else -> listOf(it)
}
}
loadTransitiveSourceProvides(this)
return result
}
@OptIn(FirSymbolProviderInternals::class, ExperimentalStdlibApi::class)
@@ -3,7 +3,6 @@
// IGNORE_BACKEND: JS_IR
// IGNORE_BACKEND: JS_IR_ES6
// IGNORE_BACKEND: NATIVE
// IGNORE_BACKEND_FIR: JVM_IR
// MODULE: lib-common
// FILE: common.kt