From 1026cdf0354eb3130f1f0bae9eb10054e8fa5edf Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Thu, 14 Sep 2023 19:00:43 +0200 Subject: [PATCH] [FIR] Register necessary resolve components for library session for all backends ^KT-61876 Fixed --- .../structure/LLFirBuiltinsSessionFactory.kt | 8 ++--- .../sessions/LLFirAbstractSessionFactory.kt | 7 ++-- .../api/fir/sessions/LLFirJsSessionFactory.kt | 11 +++--- .../fir/sessions/LLFirJvmSessionFactory.kt | 9 ++--- .../fir/session/ComponentsContainers.kt | 35 +++++++++---------- .../fir/session/FirCommonSessionFactory.kt | 14 ++------ .../kotlin/fir/session/FirJsSessionFactory.kt | 20 +++++------ .../fir/session/FirJvmSessionFactory.kt | 8 +++-- .../fir/session/FirNativeSessionFactory.kt | 18 ++++------ .../fir/session/FirSessionFactoryHelper.kt | 16 +++++++++ .../fir/session/FirWasmSessionFactory.kt | 23 +++--------- 11 files changed, 70 insertions(+), 99 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirBuiltinsSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirBuiltinsSessionFactory.kt index ea0d31b7bbf..85a5047a7ed 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirBuiltinsSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirBuiltinsSessionFactory.kt @@ -33,13 +33,9 @@ import org.jetbrains.kotlin.fir.resolve.providers.impl.FirExtensionSyntheticFunc import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped import org.jetbrains.kotlin.fir.resolve.transformers.FirDummyCompilerLazyDeclarationResolver import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider -import org.jetbrains.kotlin.fir.session.registerCommonComponents -import org.jetbrains.kotlin.fir.session.registerCommonComponentsAfterExtensionsAreConfigured -import org.jetbrains.kotlin.fir.session.registerCommonJavaComponents -import org.jetbrains.kotlin.fir.session.registerModuleData +import org.jetbrains.kotlin.fir.session.* import org.jetbrains.kotlin.fir.symbols.FirLazyDeclarationResolver import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol -import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.isCommon @@ -90,7 +86,7 @@ class LLFirBuiltinsSessionFactory(private val project: Project) { register(FirLazyDeclarationResolver::class, FirDummyCompilerLazyDeclarationResolver) registerCommonComponents(LanguageVersionSettingsImpl.DEFAULT/*TODO*/) registerCommonComponentsAfterExtensionsAreConfigured() - registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) + registerJavaComponents(JavaModuleResolver.getInstance(project)) registerModuleData(moduleData) val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirAbstractSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirAbstractSessionFactory.kt index 7db094cd46e..6482b19972a 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirAbstractSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirAbstractSessionFactory.kt @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.analysis.providers.impl.util.mergeInto import org.jetbrains.kotlin.analysis.utils.errors.withKtModuleEntry import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.fir.BuiltinTypes import org.jetbrains.kotlin.fir.PrivateSessionConstructor import org.jetbrains.kotlin.fir.SessionConfiguration @@ -113,9 +112,8 @@ internal abstract class LLFirAbstractSessionFactory(protected val project: Proje registerIdeComponents(project) registerCommonComponents(languageVersionSettings) registerCommonComponentsAfterExtensionsAreConfigured() - registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) + registerJavaComponents(JavaModuleResolver.getInstance(project)) registerResolveComponents() - registerJavaSpecificResolveComponents() val provider = LLFirProvider( this, @@ -195,9 +193,8 @@ internal abstract class LLFirAbstractSessionFactory(protected val project: Proje registerIdeComponents(project) registerCommonComponents(languageVersionSettings) registerCommonComponentsAfterExtensionsAreConfigured() - registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) + registerJavaComponents(JavaModuleResolver.getInstance(project)) registerResolveComponents() - registerJavaSpecificResolveComponents() val ktFile = module.file as? KtFile diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirJsSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirJsSessionFactory.kt index feb94a7a3c2..49cec0418c7 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirJsSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirJsSessionFactory.kt @@ -14,18 +14,15 @@ import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule import org.jetbrains.kotlin.fir.BuiltinTypes -import org.jetbrains.kotlin.fir.FirVisibilityChecker import org.jetbrains.kotlin.fir.SessionConfiguration -import org.jetbrains.kotlin.fir.analysis.FirOverridesBackwardCompatibilityHelper import org.jetbrains.kotlin.fir.analysis.checkers.FirPlatformDiagnosticSuppressor import org.jetbrains.kotlin.fir.analysis.js.checkers.FirJsPlatformDiagnosticSuppressor -import org.jetbrains.kotlin.fir.analysis.jvm.FirJvmOverridesBackwardCompatibilityHelper import org.jetbrains.kotlin.fir.declarations.FirTypeSpecificityComparatorProvider import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider -import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper +import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper.registerDefaultComponents import org.jetbrains.kotlin.fir.session.JsCallConflictResolverFactory import org.jetbrains.kotlin.fir.types.typeContext import org.jetbrains.kotlin.js.resolve.JsTypeSpecificityComparatorWithoutDelegate @@ -34,6 +31,7 @@ import org.jetbrains.kotlin.js.resolve.JsTypeSpecificityComparatorWithoutDelegat internal class LLFirJsSessionFactory(project: Project) : LLFirAbstractSessionFactory(project) { override fun createSourcesSession(module: KtSourceModule): LLFirSourcesSession { return doCreateSourcesSession(module) { context -> + registerDefaultComponents() registerModuleIndependentJsComponents() register( @@ -53,6 +51,7 @@ internal class LLFirJsSessionFactory(project: Project) : LLFirAbstractSessionFac override fun createLibrarySession(module: KtModule): LLFirLibraryOrLibrarySourceResolvableModuleSession { return doCreateLibrarySession(module) { context -> + registerDefaultComponents() registerModuleIndependentJsComponents() register( @@ -70,6 +69,7 @@ internal class LLFirJsSessionFactory(project: Project) : LLFirAbstractSessionFac override fun createBinaryLibrarySession(module: KtBinaryModule): LLFirLibrarySession { return doCreateBinaryLibrarySession(module) { + registerDefaultComponents() registerModuleIndependentJsComponents() } } @@ -88,14 +88,11 @@ internal class LLFirJsSessionFactory(project: Project) : LLFirAbstractSessionFac } private fun LLFirSession.registerModuleIndependentJsComponents() { - register(FirVisibilityChecker::class, FirVisibilityChecker.Default) register(ConeCallConflictResolverFactory::class, JsCallConflictResolverFactory) register( FirTypeSpecificityComparatorProvider::class, FirTypeSpecificityComparatorProvider(JsTypeSpecificityComparatorWithoutDelegate(typeContext)) ) - register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default) - register(FirOverridesBackwardCompatibilityHelper::class, FirJvmOverridesBackwardCompatibilityHelper) register(FirPlatformDiagnosticSuppressor::class, FirJsPlatformDiagnosticSuppressor()) } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirJvmSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirJvmSessionFactory.kt index 8e2f0a2d5fb..b9bd3dc3436 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirJvmSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirJvmSessionFactory.kt @@ -34,8 +34,7 @@ internal class LLFirJvmSessionFactory(project: Project) : LLFirAbstractSessionFa override fun createSourcesSession(module: KtSourceModule): LLFirSourcesSession { return doCreateSourcesSession(module, FirKotlinScopeProvider(::wrapScopeWithJvmMapped)) { context -> - registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) - registerJavaSpecificResolveComponents() + registerJavaComponents(JavaModuleResolver.getInstance(project)) val javaSymbolProvider = LLFirJavaSymbolProvider(this, context.moduleData, project, context.contentScope) register(JavaSymbolProvider::class, javaSymbolProvider) @@ -59,8 +58,7 @@ internal class LLFirJvmSessionFactory(project: Project) : LLFirAbstractSessionFa override fun createLibrarySession(module: KtModule): LLFirLibraryOrLibrarySourceResolvableModuleSession { return doCreateLibrarySession(module) { context -> - registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) - registerJavaSpecificResolveComponents() + registerJavaComponents(JavaModuleResolver.getInstance(project)) val javaSymbolProvider = LLFirJavaSymbolProvider(this, context.moduleData, project, context.contentScope) register( FirSymbolProvider::class, @@ -81,8 +79,7 @@ internal class LLFirJvmSessionFactory(project: Project) : LLFirAbstractSessionFa override fun createBinaryLibrarySession(module: KtBinaryModule): LLFirLibrarySession { return doCreateBinaryLibrarySession(module) { - registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) - registerJavaSpecificResolveComponents() + registerJavaComponents(JavaModuleResolver.getInstance(project)) register(FirJvmTypeMapper::class, FirJvmTypeMapper(this)) registerLibraryScopeAwareCallConflictResolverFactory() } diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt index 4f79f25da0a..6c26746f5c3 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt @@ -122,12 +122,15 @@ class FirSharableJavaComponents( } @OptIn(SessionConfiguration::class) -fun FirSession.registerCommonJavaComponents( +fun FirSession.registerJavaComponents( javaModuleResolver: JavaModuleResolver, predefinedComponents: FirSharableJavaComponents? = null, ) { val jsr305State = languageVersionSettings.getFlag(JvmAnalysisFlags.javaTypeEnhancementState) - register(FirAnnotationTypeQualifierResolver::class, FirAnnotationTypeQualifierResolver(this, jsr305State, javaModuleResolver)) + register( + FirAnnotationTypeQualifierResolver::class, + FirAnnotationTypeQualifierResolver(this, jsr305State, javaModuleResolver) + ) register(FirEnhancedSymbolsStorage::class, predefinedComponents?.enhancementStorage ?: FirEnhancedSymbolsStorage(this)) register(FirMappedSymbolStorage::class, predefinedComponents?.mappedStorage ?: FirMappedSymbolStorage(this)) register(FirSyntheticPropertiesStorage::class, FirSyntheticPropertiesStorage(this)) @@ -142,6 +145,17 @@ fun FirSession.registerCommonJavaComponents( register(CompilerRequiredAnnotationEnhancementProvider::class, JavaCompilerRequiredAnnotationEnhancementProvider) register(FirAnnotationsPlatformSpecificSupportComponent::class, FirJvmAnnotationsPlatformSpecificSupportComponent) register(FirPrimaryConstructorSuperTypeCheckerPlatformComponent::class, FirJvmPrimaryConstructorSuperTypeCheckerPlatformComponent) + + register(FirVisibilityChecker::class, FirJavaVisibilityChecker) + register(ConeCallConflictResolverFactory::class, JvmCallConflictResolverFactory) + register( + FirTypeSpecificityComparatorProvider::class, + FirTypeSpecificityComparatorProvider(JvmTypeSpecificityComparator(typeContext)) + ) + register(FirPlatformClassMapper::class, FirJavaClassMapper(this)) + register(FirSyntheticNamesProvider::class, FirJavaSyntheticNamesProvider) + register(FirOverridesBackwardCompatibilityHelper::class, FirJvmOverridesBackwardCompatibilityHelper) + register(FirInlineCheckerPlatformSpecificComponent::class, FirJvmInlineCheckerComponent()) } // -------------------------- Resolve components -------------------------- @@ -181,23 +195,6 @@ fun FirSession.registerResolveComponents(lookupTracker: LookupTracker? = null, e register(FirExpectActualMatchingContextFactory::class, FirExpectActualMatchingContextImpl.Factory) } -/* - * Resolve components which have specific implementations on JVM - */ -@OptIn(SessionConfiguration::class) -fun FirSession.registerJavaSpecificResolveComponents() { - register(FirVisibilityChecker::class, FirJavaVisibilityChecker) - register(ConeCallConflictResolverFactory::class, JvmCallConflictResolverFactory) - register( - FirTypeSpecificityComparatorProvider::class, - FirTypeSpecificityComparatorProvider(JvmTypeSpecificityComparator(typeContext)) - ) - register(FirPlatformClassMapper::class, FirJavaClassMapper(this)) - register(FirSyntheticNamesProvider::class, FirJavaSyntheticNamesProvider) - register(FirOverridesBackwardCompatibilityHelper::class, FirJvmOverridesBackwardCompatibilityHelper) - register(FirInlineCheckerPlatformSpecificComponent::class, FirJvmInlineCheckerComponent()) -} - @OptIn(SessionConfiguration::class) fun FirSession.registerModuleData(moduleData: FirModuleData) { register(FirModuleData::class, moduleData) diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirCommonSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirCommonSessionFactory.kt index 4a26b0b85f6..271073ea2ca 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirCommonSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirCommonSessionFactory.kt @@ -9,20 +9,15 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.FirVisibilityChecker -import org.jetbrains.kotlin.fir.SessionConfiguration -import org.jetbrains.kotlin.fir.analysis.FirDefaultOverridesBackwardCompatibilityHelper -import org.jetbrains.kotlin.fir.analysis.FirOverridesBackwardCompatibilityHelper import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar 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.scopes.FirKotlinScopeProvider -import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper +import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper.registerDefaultComponents import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope import org.jetbrains.kotlin.incremental.components.EnumWhenTracker @@ -54,6 +49,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() { languageVersionSettings, extensionRegistrars, registerExtraComponents = { + it.registerDefaultComponents() registerExtraComponents(it) }, createKotlinScopeProvider = { FirKotlinScopeProvider() }, @@ -82,7 +78,6 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() { ) } - @OptIn(SessionConfiguration::class) fun createModuleBasedSession( moduleData: FirModuleData, sessionProvider: FirProjectSessionProvider, @@ -106,10 +101,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() { importTracker, init, registerExtraComponents = { - it.register(FirVisibilityChecker::class, FirVisibilityChecker.Default) - it.register(ConeCallConflictResolverFactory::class, DefaultCallConflictResolverFactory) - it.register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default) - it.register(FirOverridesBackwardCompatibilityHelper::class, FirDefaultOverridesBackwardCompatibilityHelper) + it.registerDefaultComponents() registerExtraComponents(it) }, registerExtraCheckers = {}, diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirJsSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirJsSessionFactory.kt index 508c9e479d1..ba9226196f6 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirJsSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirJsSessionFactory.kt @@ -9,10 +9,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.FirVisibilityChecker import org.jetbrains.kotlin.fir.SessionConfiguration -import org.jetbrains.kotlin.fir.analysis.FirEmptyOverridesBackwardCompatibilityHelper -import org.jetbrains.kotlin.fir.analysis.FirOverridesBackwardCompatibilityHelper import org.jetbrains.kotlin.fir.analysis.checkers.FirPlatformDiagnosticSuppressor import org.jetbrains.kotlin.fir.analysis.js.checkers.FirJsModuleKind import org.jetbrains.kotlin.fir.analysis.js.checkers.FirJsPlatformDiagnosticSuppressor @@ -25,7 +22,7 @@ import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSyntheticFunctionInterfaceProvider import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider -import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper +import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper.registerDefaultComponents import org.jetbrains.kotlin.fir.types.typeContext import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.js.config.JSConfigurationKeys @@ -54,9 +51,10 @@ object FirJsSessionFactory : FirAbstractSessionFactory() { null, null, init, - registerExtraComponents = { session -> - session.registerJsSpecificComponents(compilerConfiguration) - registerExtraComponents(session) + registerExtraComponents = { + it.registerDefaultComponents() + it.registerJsComponents(compilerConfiguration) + registerExtraComponents(it) }, registerExtraCheckers = { it.registerJsCheckers() }, createKotlinScopeProvider = { FirKotlinScopeProvider() }, @@ -93,7 +91,8 @@ object FirJsSessionFactory : FirAbstractSessionFactory() { compilerConfiguration.languageVersionSettings, extensionRegistrars, registerExtraComponents = { - it.registerJsSpecificComponents(compilerConfiguration) + it.registerDefaultComponents() + it.registerJsComponents(compilerConfiguration) registerExtraComponents(it) }, createKotlinScopeProvider = { FirKotlinScopeProvider() }, @@ -107,15 +106,12 @@ object FirJsSessionFactory : FirAbstractSessionFactory() { ) @OptIn(SessionConfiguration::class) - fun FirSession.registerJsSpecificComponents(compilerConfiguration: CompilerConfiguration) { - register(FirVisibilityChecker::class, FirVisibilityChecker.Default) + private fun FirSession.registerJsComponents(compilerConfiguration: CompilerConfiguration) { register(ConeCallConflictResolverFactory::class, JsCallConflictResolverFactory) register( FirTypeSpecificityComparatorProvider::class, FirTypeSpecificityComparatorProvider(JsTypeSpecificityComparatorWithoutDelegate(typeContext)) ) - register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default) - register(FirOverridesBackwardCompatibilityHelper::class, FirEmptyOverridesBackwardCompatibilityHelper) register(FirPlatformDiagnosticSuppressor::class, FirJsPlatformDiagnosticSuppressor()) val moduleKind = compilerConfiguration.get(JSConfigurationKeys.MODULE_KIND, ModuleKind.PLAIN) diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirJvmSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirJvmSessionFactory.kt index 23740e6d523..627f6d4672a 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirJvmSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirJvmSessionFactory.kt @@ -23,6 +23,7 @@ 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 import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider +import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper.registerDefaultComponents import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope import org.jetbrains.kotlin.incremental.components.EnumWhenTracker @@ -51,7 +52,8 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() { languageVersionSettings, extensionRegistrars, registerExtraComponents = { - it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents) + it.registerDefaultComponents() + it.registerJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents) registerExtraComponents(it) }, createKotlinScopeProvider = { FirKotlinScopeProvider(::wrapScopeWithJvmMapped) }, @@ -106,8 +108,8 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() { importTracker, init, registerExtraComponents = { - it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents) - it.registerJavaSpecificResolveComponents() + it.registerDefaultComponents() + it.registerJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents) registerExtraComponents(it) }, registerExtraCheckers = { it.registerJvmCheckers() }, diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirNativeSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirNativeSessionFactory.kt index 7fbb35dec01..1e5e1495763 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirNativeSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirNativeSessionFactory.kt @@ -6,24 +6,22 @@ package org.jetbrains.kotlin.fir.session import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.fir.* -import org.jetbrains.kotlin.fir.analysis.FirEmptyOverridesBackwardCompatibilityHelper -import org.jetbrains.kotlin.fir.analysis.FirOverridesBackwardCompatibilityHelper +import org.jetbrains.kotlin.fir.BinaryModuleData +import org.jetbrains.kotlin.fir.FirModuleData +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.checkers.registerNativeCheckers import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider -import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSyntheticFunctionInterfaceProvider import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider -import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper +import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper.registerDefaultComponents import org.jetbrains.kotlin.library.isNativeStdlib import org.jetbrains.kotlin.library.metadata.impl.KlibResolvedModuleDescriptorsFactoryImpl.Companion.FORWARD_DECLARATIONS_MODULE_NAME import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary import org.jetbrains.kotlin.name.Name object FirNativeSessionFactory : FirAbstractSessionFactory() { - @OptIn(SessionConfiguration::class) fun createLibrarySession( mainModuleName: Name, resolvedLibraries: List, @@ -40,7 +38,7 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() { languageVersionSettings, extensionRegistrars, registerExtraComponents = { session -> - session.register(FirVisibilityChecker::class, FirVisibilityChecker.Default) + session.registerDefaultComponents() registerExtraComponents(session) }, createKotlinScopeProvider = { FirKotlinScopeProvider() }, @@ -66,7 +64,6 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() { }) } - @OptIn(SessionConfiguration::class) fun createModuleBasedSession( moduleData: FirModuleData, sessionProvider: FirProjectSessionProvider, @@ -85,10 +82,7 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() { null, init, registerExtraComponents = { - it.register(FirVisibilityChecker::class, FirVisibilityChecker.Default) - it.register(ConeCallConflictResolverFactory::class, DefaultCallConflictResolverFactory) - it.register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default) - it.register(FirOverridesBackwardCompatibilityHelper::class, FirEmptyOverridesBackwardCompatibilityHelper) + it.registerDefaultComponents() registerExtraComponents(it) }, registerExtraCheckers = { it.registerNativeCheckers() }, diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactoryHelper.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactoryHelper.kt index 5fdceeaa712..d6a384bf1e0 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactoryHelper.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactoryHelper.kt @@ -8,9 +8,13 @@ package org.jetbrains.kotlin.fir.session import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.analysis.FirEmptyOverridesBackwardCompatibilityHelper +import org.jetbrains.kotlin.fir.analysis.FirOverridesBackwardCompatibilityHelper import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.extensions.FirExtensionService import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider +import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory +import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope import org.jetbrains.kotlin.incremental.components.EnumWhenTracker @@ -123,4 +127,16 @@ object FirSessionFactoryHelper { register(FirExtensionService::class, FirExtensionService(this)) } } + + /** + * Registers default components for [FirSession] + * They could be overridden by calling a function that registers specific platform components + */ + @OptIn(SessionConfiguration::class) + fun FirSession.registerDefaultComponents() { + register(FirVisibilityChecker::class, FirVisibilityChecker.Default) + register(ConeCallConflictResolverFactory::class, DefaultCallConflictResolverFactory) + register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default) + register(FirOverridesBackwardCompatibilityHelper::class, FirEmptyOverridesBackwardCompatibilityHelper) + } } diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirWasmSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirWasmSessionFactory.kt index f7bb5328b2b..e2d0a5b5f13 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirWasmSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirWasmSessionFactory.kt @@ -9,19 +9,14 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.FirVisibilityChecker -import org.jetbrains.kotlin.fir.SessionConfiguration -import org.jetbrains.kotlin.fir.analysis.FirEmptyOverridesBackwardCompatibilityHelper -import org.jetbrains.kotlin.fir.analysis.FirOverridesBackwardCompatibilityHelper import org.jetbrains.kotlin.fir.checkers.registerWasmCheckers import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider -import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSyntheticFunctionInterfaceProvider import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider -import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper +import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper.registerDefaultComponents import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.library.KotlinLibrary import org.jetbrains.kotlin.name.Name @@ -46,9 +41,9 @@ object FirWasmSessionFactory : FirAbstractSessionFactory() { null, null, init, - registerExtraComponents = { session -> - session.registerWasmSpecificComponents() - registerExtraComponents(session) + registerExtraComponents = { + it.registerDefaultComponents() + registerExtraComponents(it) }, registerExtraCheckers = { it.registerWasmCheckers() }, createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _, _ -> declaredMemberScope } }, @@ -85,7 +80,7 @@ object FirWasmSessionFactory : FirAbstractSessionFactory() { languageVersionSettings, extensionRegistrars, registerExtraComponents = { - it.registerWasmSpecificComponents() + it.registerDefaultComponents() registerExtraComponents(it) }, createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _, _ -> declaredMemberScope } }, @@ -97,12 +92,4 @@ object FirWasmSessionFactory : FirAbstractSessionFactory() { ) } ) - - @OptIn(SessionConfiguration::class) - fun FirSession.registerWasmSpecificComponents() { - register(FirVisibilityChecker::class, FirVisibilityChecker.Default) - register(ConeCallConflictResolverFactory::class, DefaultCallConflictResolverFactory) - register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default) - register(FirOverridesBackwardCompatibilityHelper::class, FirEmptyOverridesBackwardCompatibilityHelper) - } }