[FIR] Store mapped jvm declarations in session component, share it between MPP modules

^KT-61640 Fixed

This change doesn't affect any tests in the moment, because it's part of
  bigger refactoring of proper storing IR declarations during FIR2IR
  conversion (KT-61637)

Without this change, there is one test break in branch for KT-61637:
- FirPsiBlackBoxCodegenTestGenerated.Multiplatform.K2.testJavaMethodWithTypeParameter
This commit is contained in:
Dmitriy Novozhilov
2023-09-01 15:35:55 +03:00
committed by Space Team
parent bb36beb364
commit fa4c6d55c1
5 changed files with 95 additions and 71 deletions
@@ -49,6 +49,7 @@ import org.jetbrains.kotlin.fir.scopes.FirOverrideService
import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper
import org.jetbrains.kotlin.fir.scopes.PlatformSpecificOverridabilityRules
import org.jetbrains.kotlin.fir.scopes.impl.*
import org.jetbrains.kotlin.fir.scopes.jvm.JvmMappedScope.FirMappedSymbolStorage
import org.jetbrains.kotlin.fir.serialization.FirProvidedDeclarationsForMetadataService
import org.jetbrains.kotlin.fir.symbols.FirLazyDeclarationResolver
import org.jetbrains.kotlin.fir.types.*
@@ -104,14 +105,25 @@ fun FirSession.registerCliCompilerOnlyComponents() {
register(FirPredicateBasedProvider::class, FirPredicateBasedProviderImpl(this))
}
class FirSharableJavaComponents(
val enhancementStorage: FirEnhancedSymbolsStorage,
val mappedStorage: FirMappedSymbolStorage
) {
constructor(cachesFactory: FirCachesFactory) : this(
FirEnhancedSymbolsStorage(cachesFactory),
FirMappedSymbolStorage(cachesFactory)
)
}
@OptIn(SessionConfiguration::class)
fun FirSession.registerCommonJavaComponents(
javaModuleResolver: JavaModuleResolver,
predefinedEnhancementStorage: FirEnhancedSymbolsStorage? = null,
predefinedComponents: FirSharableJavaComponents? = null,
) {
val jsr305State = languageVersionSettings.getFlag(JvmAnalysisFlags.javaTypeEnhancementState)
register(FirAnnotationTypeQualifierResolver::class, FirAnnotationTypeQualifierResolver(this, jsr305State, javaModuleResolver))
register(FirEnhancedSymbolsStorage::class, predefinedEnhancementStorage ?: FirEnhancedSymbolsStorage(this))
register(FirEnhancedSymbolsStorage::class, predefinedComponents?.enhancementStorage ?: FirEnhancedSymbolsStorage(this))
register(FirMappedSymbolStorage::class, predefinedComponents?.mappedStorage ?: FirMappedSymbolStorage(this))
register(FirSyntheticPropertiesStorage::class, FirSyntheticPropertiesStorage(this))
register(
FirJvmDefaultModeComponent::class,
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
import org.jetbrains.kotlin.fir.java.deserialization.JvmClassFileBasedSymbolProvider
import org.jetbrains.kotlin.fir.java.deserialization.OptionalAnnotationClassesProvider
import org.jetbrains.kotlin.fir.java.enhancement.FirEnhancedSymbolsStorage
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCloneableSymbolProvider
import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped
@@ -42,7 +41,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
scope: AbstractProjectFileSearchScope,
packagePartProvider: PackagePartProvider,
languageVersionSettings: LanguageVersionSettings,
predefinedEnhancementStorage: FirEnhancedSymbolsStorage? = null,
predefinedJavaComponents: FirSharableJavaComponents? = null,
registerExtraComponents: ((FirSession) -> Unit),
): FirSession {
return createLibrarySession(
@@ -52,7 +51,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
languageVersionSettings,
extensionRegistrars,
registerExtraComponents = {
it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedEnhancementStorage)
it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents)
registerExtraComponents(it)
},
createKotlinScopeProvider = { FirKotlinScopeProvider(::wrapScopeWithJvmMapped) },
@@ -92,7 +91,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
lookupTracker: LookupTracker? = null,
enumWhenTracker: EnumWhenTracker? = null,
importTracker: ImportTracker? = null,
predefinedEnhancementStorage: FirEnhancedSymbolsStorage? = null,
predefinedJavaComponents: FirSharableJavaComponents? = null,
needRegisterJavaElementFinder: Boolean,
registerExtraComponents: ((FirSession) -> Unit) = {},
init: FirSessionConfigurator.() -> Unit = {}
@@ -107,7 +106,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
importTracker,
init,
registerExtraComponents = {
it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedEnhancementStorage)
it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents)
it.registerJavaSpecificResolveComponents()
registerExtraComponents(it)
},