[FIR] Fix dependencyProviders generation in FirDependenciesSymbolProviderImpl
Get rid of unnecessary creating of FirCompositeSymbolProvider
This commit is contained in:
committed by
Space Team
parent
fe670d98a9
commit
69ee40325b
+6
-38
@@ -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)
|
||||
|
||||
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user