K2: Get rid of FirDependenciesSymbolProviderImpl
Its usages will be safely replaced with FirCachingCompositeSymbolProvider But here, in the commit plain FirCompositeSymbolProvider used temporary
This commit is contained in:
committed by
Space Team
parent
9302fe3cb5
commit
6705d211a6
+45
-9
@@ -13,11 +13,8 @@ import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||
import org.jetbrains.kotlin.fir.extensions.FirSwitchableExtensionDeclarationsSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.java.FirCliSession
|
||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirDependenciesSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.*
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCompositeSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirDependenciesSymbolProviderImpl
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirLibrarySessionProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
|
||||
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
||||
@@ -78,7 +75,7 @@ abstract class FirAbstractSessionFactory {
|
||||
createProviders: (
|
||||
FirSession, FirKotlinScopeProvider, FirSymbolProvider,
|
||||
FirSwitchableExtensionDeclarationsSymbolProvider?,
|
||||
FirDependenciesSymbolProvider
|
||||
dependencies: List<FirSymbolProvider>,
|
||||
) -> List<FirSymbolProvider>
|
||||
): FirSession {
|
||||
return FirCliSession(sessionProvider, FirSession.Kind.Source).apply session@{
|
||||
@@ -106,17 +103,56 @@ abstract class FirAbstractSessionFactory {
|
||||
init()
|
||||
}.configure()
|
||||
|
||||
val dependenciesSymbolProvider = FirDependenciesSymbolProviderImpl(this)
|
||||
val dependencyProviders = computeDependencyProviderList(moduleData)
|
||||
val generatedSymbolsProvider = FirSwitchableExtensionDeclarationsSymbolProvider.create(this)
|
||||
|
||||
val providers = createProviders(
|
||||
this, kotlinScopeProvider, firProvider.symbolProvider, generatedSymbolsProvider, dependenciesSymbolProvider,
|
||||
this, kotlinScopeProvider, firProvider.symbolProvider, generatedSymbolsProvider,
|
||||
dependencyProviders,
|
||||
)
|
||||
|
||||
register(FirSymbolProvider::class, FirCompositeSymbolProvider(this, providers))
|
||||
|
||||
generatedSymbolsProvider?.let { register(FirSwitchableExtensionDeclarationsSymbolProvider::class, it) }
|
||||
register(DEPENDENCIES_SYMBOL_PROVIDER_QUALIFIED_KEY, dependenciesSymbolProvider)
|
||||
register(DEPENDENCIES_SYMBOL_PROVIDER_QUALIFIED_KEY, FirCompositeSymbolProvider(this, dependencyProviders))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun FirSession.computeDependencyProviderList(moduleData: FirModuleData): List<FirSymbolProvider> {
|
||||
val visited = mutableSetOf<FirSymbolProvider>()
|
||||
return (moduleData.dependencies + moduleData.friendDependencies + moduleData.dependsOnDependencies)
|
||||
.mapNotNull { sessionProvider?.getSession(it) }
|
||||
.map { it.symbolProvider }
|
||||
.flatMap { it.flatten(visited, collectSourceProviders = it.session.kind == FirSession.Kind.Source) }
|
||||
.sortedBy { it.session.kind }
|
||||
}
|
||||
|
||||
/* It eliminates dependency and composite providers since the current dependency provider is composite in fact.
|
||||
* To prevent duplications and resolving errors, library or source providers from other modules should be filtered out during flattening.
|
||||
* It depends on the session's kind of the top-level provider */
|
||||
private fun FirSymbolProvider.flatten(
|
||||
visited: MutableSet<FirSymbolProvider>,
|
||||
collectSourceProviders: Boolean
|
||||
): List<FirSymbolProvider> {
|
||||
val result = mutableListOf<FirSymbolProvider>()
|
||||
|
||||
fun FirSymbolProvider.collectProviders() {
|
||||
if (!visited.add(this)) return
|
||||
when {
|
||||
this is FirCompositeSymbolProvider -> {
|
||||
for (provider in providers) {
|
||||
provider.collectProviders()
|
||||
}
|
||||
}
|
||||
collectSourceProviders && session.kind == FirSession.Kind.Source ||
|
||||
!collectSourceProviders && session.kind == FirSession.Kind.Library -> {
|
||||
result.add(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
collectProviders()
|
||||
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,11 +44,11 @@ object FirJsSessionFactory : FirAbstractSessionFactory() {
|
||||
},
|
||||
registerExtraCheckers = { it.registerJsCheckers() },
|
||||
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _ -> declaredMemberScope } },
|
||||
createProviders = { _, _, symbolProvider, generatedSymbolsProvider, dependenciesSymbolProvider ->
|
||||
createProviders = { _, _, symbolProvider, generatedSymbolsProvider, dependencies ->
|
||||
listOfNotNull(
|
||||
symbolProvider,
|
||||
generatedSymbolsProvider,
|
||||
dependenciesSymbolProvider,
|
||||
*dependencies.toTypedArray(),
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
+2
-2
@@ -100,7 +100,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
|
||||
},
|
||||
registerExtraCheckers = { it.registerJvmCheckers() },
|
||||
createKotlinScopeProvider = { FirKotlinScopeProvider(::wrapScopeWithJvmMapped) },
|
||||
createProviders = { session, kotlinScopeProvider, symbolProvider, generatedSymbolsProvider, dependenciesSymbolProvider ->
|
||||
createProviders = { session, kotlinScopeProvider, symbolProvider, generatedSymbolsProvider, dependencies ->
|
||||
var symbolProviderForBinariesFromIncrementalCompilation: JvmClassFileBasedSymbolProvider? = null
|
||||
var optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation: OptionalAnnotationClassesProvider? = null
|
||||
incrementalCompilationContext?.let {
|
||||
@@ -137,7 +137,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
|
||||
symbolProviderForBinariesFromIncrementalCompilation,
|
||||
generatedSymbolsProvider,
|
||||
javaSymbolProvider,
|
||||
dependenciesSymbolProvider,
|
||||
*dependencies.toTypedArray(),
|
||||
optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation,
|
||||
)
|
||||
}
|
||||
|
||||
+3
-3
@@ -67,11 +67,11 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() {
|
||||
},
|
||||
registerExtraCheckers = { it.registerNativeCheckers() },
|
||||
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _ -> declaredMemberScope } },
|
||||
createProviders = { _, _, symbolProvider, generatedSymbolsProvider, dependenciesSymbolProvider ->
|
||||
createProviders = { _, _, symbolProvider, generatedSymbolsProvider, dependencies ->
|
||||
listOfNotNull(
|
||||
symbolProvider,
|
||||
generatedSymbolsProvider,
|
||||
dependenciesSymbolProvider,
|
||||
*dependencies.toTypedArray(),
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -84,4 +84,4 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() {
|
||||
register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default)
|
||||
register(FirOverridesBackwardCompatibilityHelper::class, FirOverridesBackwardCompatibilityHelper.Default())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user