[FIR] Extract SyntheticFunctionsCache from builtins provider into separate one
This is needed because now set of available synthetic functional interfaces depends on session, because each module can contain different plugins, which provide different kinds of functional types
This commit is contained in:
committed by
Space Team
parent
e0c8f2354a
commit
87a9103cc6
+8
-4
@@ -16,9 +16,7 @@ import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.DEPENDENCIES_SYMBOL_PROVIDER_QUALIFIED_KEY
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCachingCompositeSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirLibrarySessionProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.*
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
||||
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
|
||||
@@ -79,6 +77,7 @@ abstract class FirAbstractSessionFactory {
|
||||
createProviders: (
|
||||
FirSession, FirKotlinScopeProvider, FirSymbolProvider,
|
||||
FirSwitchableExtensionDeclarationsSymbolProvider?,
|
||||
FirExtensionSyntheticFunctionalInterfaceProvider,
|
||||
dependencies: List<FirSymbolProvider>,
|
||||
) -> List<FirSymbolProvider>
|
||||
): FirSession {
|
||||
@@ -110,9 +109,14 @@ abstract class FirAbstractSessionFactory {
|
||||
|
||||
val dependencyProviders = computeDependencyProviderList(moduleData)
|
||||
val generatedSymbolsProvider = FirSwitchableExtensionDeclarationsSymbolProvider.create(this)
|
||||
val syntheticFunctionalInterfaceProvider = FirExtensionSyntheticFunctionalInterfaceProvider(this, moduleData, kotlinScopeProvider)
|
||||
|
||||
val providers = createProviders(
|
||||
this, kotlinScopeProvider, firProvider.symbolProvider, generatedSymbolsProvider,
|
||||
this,
|
||||
kotlinScopeProvider,
|
||||
firProvider.symbolProvider,
|
||||
generatedSymbolsProvider,
|
||||
syntheticFunctionalInterfaceProvider,
|
||||
dependencyProviders,
|
||||
)
|
||||
|
||||
|
||||
+3
-2
@@ -104,7 +104,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
|
||||
it.registerNativeCheckers()
|
||||
},
|
||||
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _ -> declaredMemberScope } },
|
||||
createProviders = { session, kotlinScopeProvider, symbolProvider, generatedSymbolsProvider, dependencies ->
|
||||
createProviders = { session, kotlinScopeProvider, symbolProvider, syntheticFunctionalInterfaceProvider, generatedSymbolsProvider, dependencies ->
|
||||
var symbolProviderForBinariesFromIncrementalCompilation: MetadataSymbolProvider? = null
|
||||
var optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation: OptionalAnnotationClassesProvider? = null
|
||||
incrementalCompilationContext?.let {
|
||||
@@ -140,6 +140,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
|
||||
*(incrementalCompilationContext?.previousFirSessionsSymbolProviders?.toTypedArray() ?: emptyArray()),
|
||||
symbolProviderForBinariesFromIncrementalCompilation,
|
||||
generatedSymbolsProvider,
|
||||
syntheticFunctionalInterfaceProvider,
|
||||
javaSymbolProvider,
|
||||
*dependencies.toTypedArray(),
|
||||
optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation,
|
||||
@@ -151,4 +152,4 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,10 +44,11 @@ object FirJsSessionFactory : FirAbstractSessionFactory() {
|
||||
},
|
||||
registerExtraCheckers = { it.registerJsCheckers() },
|
||||
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _ -> declaredMemberScope } },
|
||||
createProviders = { _, _, symbolProvider, generatedSymbolsProvider, dependencies ->
|
||||
createProviders = { _, _, symbolProvider, generatedSymbolsProvider, syntheticFunctionalInterfaceProvider, dependencies ->
|
||||
listOfNotNull(
|
||||
symbolProvider,
|
||||
generatedSymbolsProvider,
|
||||
syntheticFunctionalInterfaceProvider,
|
||||
*dependencies.toTypedArray(),
|
||||
)
|
||||
}
|
||||
@@ -78,6 +79,7 @@ object FirJsSessionFactory : FirAbstractSessionFactory() {
|
||||
// TODO: consider using "poisoning" provider for builtins to ensure that proper ones are taken from dependencies
|
||||
// NOTE: it requires precise filtering for true nuiltins, like Function*
|
||||
FirBuiltinSymbolProvider(session, builtinsModuleData, kotlinScopeProvider),
|
||||
FirExtensionSyntheticFunctionalInterfaceProvider(session, builtinsModuleData, kotlinScopeProvider),
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
+3
-1
@@ -58,6 +58,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
|
||||
projectEnvironment.getFirJavaFacade(session, moduleDataProvider.allModuleData.last(), scope)
|
||||
),
|
||||
FirBuiltinSymbolProvider(session, builtinsModuleData, kotlinScopeProvider),
|
||||
FirExtensionSyntheticFunctionalInterfaceProvider(session, builtinsModuleData, kotlinScopeProvider),
|
||||
FirCloneableSymbolProvider(session, builtinsModuleData, kotlinScopeProvider),
|
||||
OptionalAnnotationClassesProvider(
|
||||
session,
|
||||
@@ -100,7 +101,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
|
||||
},
|
||||
registerExtraCheckers = { it.registerJvmCheckers() },
|
||||
createKotlinScopeProvider = { FirKotlinScopeProvider(::wrapScopeWithJvmMapped) },
|
||||
createProviders = { session, kotlinScopeProvider, symbolProvider, generatedSymbolsProvider, dependencies ->
|
||||
createProviders = { session, kotlinScopeProvider, symbolProvider, generatedSymbolsProvider, syntheticFunctionalInterfaceProvider, dependencies ->
|
||||
var symbolProviderForBinariesFromIncrementalCompilation: JvmClassFileBasedSymbolProvider? = null
|
||||
var optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation: OptionalAnnotationClassesProvider? = null
|
||||
incrementalCompilationContext?.let {
|
||||
@@ -137,6 +138,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
|
||||
symbolProviderForBinariesFromIncrementalCompilation,
|
||||
generatedSymbolsProvider,
|
||||
javaSymbolProvider,
|
||||
syntheticFunctionalInterfaceProvider,
|
||||
*dependencies.toTypedArray(),
|
||||
optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation,
|
||||
)
|
||||
|
||||
+4
-1
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCloneableSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirExtensionSyntheticFunctionalInterfaceProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper
|
||||
import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary
|
||||
@@ -40,6 +41,7 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() {
|
||||
listOf(
|
||||
KlibBasedSymbolProvider(session, moduleDataProvider, kotlinScopeProvider, resolvedLibraries),
|
||||
FirBuiltinSymbolProvider(session, builtinsModuleData, kotlinScopeProvider),
|
||||
FirExtensionSyntheticFunctionalInterfaceProvider(session, builtinsModuleData, kotlinScopeProvider),
|
||||
FirCloneableSymbolProvider(session, builtinsModuleData, kotlinScopeProvider),
|
||||
)
|
||||
})
|
||||
@@ -67,10 +69,11 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() {
|
||||
},
|
||||
registerExtraCheckers = { it.registerNativeCheckers() },
|
||||
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _ -> declaredMemberScope } },
|
||||
createProviders = { _, _, symbolProvider, generatedSymbolsProvider, dependencies ->
|
||||
createProviders = { _, _, symbolProvider, generatedSymbolsProvider, syntheticFunctionalInterfaceProvider, dependencies ->
|
||||
listOfNotNull(
|
||||
symbolProvider,
|
||||
generatedSymbolsProvider,
|
||||
syntheticFunctionalInterfaceProvider,
|
||||
*dependencies.toTypedArray(),
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user