[FIR] Register necessary resolve components for library session for all backends

^KT-61876 Fixed
This commit is contained in:
Ivan Kochurkin
2023-09-14 19:00:43 +02:00
committed by Space Team
parent 1c6af76f61
commit 1026cdf035
11 changed files with 70 additions and 99 deletions
@@ -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.scopes.wrapScopeWithJvmMapped
import org.jetbrains.kotlin.fir.resolve.transformers.FirDummyCompilerLazyDeclarationResolver import org.jetbrains.kotlin.fir.resolve.transformers.FirDummyCompilerLazyDeclarationResolver
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
import org.jetbrains.kotlin.fir.session.registerCommonComponents import org.jetbrains.kotlin.fir.session.*
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.symbols.FirLazyDeclarationResolver import org.jetbrains.kotlin.fir.symbols.FirLazyDeclarationResolver
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol 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.name.ClassId
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.platform.isCommon
@@ -90,7 +86,7 @@ class LLFirBuiltinsSessionFactory(private val project: Project) {
register(FirLazyDeclarationResolver::class, FirDummyCompilerLazyDeclarationResolver) register(FirLazyDeclarationResolver::class, FirDummyCompilerLazyDeclarationResolver)
registerCommonComponents(LanguageVersionSettingsImpl.DEFAULT/*TODO*/) registerCommonComponents(LanguageVersionSettingsImpl.DEFAULT/*TODO*/)
registerCommonComponentsAfterExtensionsAreConfigured() registerCommonComponentsAfterExtensionsAreConfigured()
registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) registerJavaComponents(JavaModuleResolver.getInstance(project))
registerModuleData(moduleData) registerModuleData(moduleData)
val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped) val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped)
@@ -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.analysis.utils.errors.withKtModuleEntry
import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.fir.BuiltinTypes import org.jetbrains.kotlin.fir.BuiltinTypes
import org.jetbrains.kotlin.fir.PrivateSessionConstructor import org.jetbrains.kotlin.fir.PrivateSessionConstructor
import org.jetbrains.kotlin.fir.SessionConfiguration import org.jetbrains.kotlin.fir.SessionConfiguration
@@ -113,9 +112,8 @@ internal abstract class LLFirAbstractSessionFactory(protected val project: Proje
registerIdeComponents(project) registerIdeComponents(project)
registerCommonComponents(languageVersionSettings) registerCommonComponents(languageVersionSettings)
registerCommonComponentsAfterExtensionsAreConfigured() registerCommonComponentsAfterExtensionsAreConfigured()
registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) registerJavaComponents(JavaModuleResolver.getInstance(project))
registerResolveComponents() registerResolveComponents()
registerJavaSpecificResolveComponents()
val provider = LLFirProvider( val provider = LLFirProvider(
this, this,
@@ -195,9 +193,8 @@ internal abstract class LLFirAbstractSessionFactory(protected val project: Proje
registerIdeComponents(project) registerIdeComponents(project)
registerCommonComponents(languageVersionSettings) registerCommonComponents(languageVersionSettings)
registerCommonComponentsAfterExtensionsAreConfigured() registerCommonComponentsAfterExtensionsAreConfigured()
registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) registerJavaComponents(JavaModuleResolver.getInstance(project))
registerResolveComponents() registerResolveComponents()
registerJavaSpecificResolveComponents()
val ktFile = module.file as? KtFile val ktFile = module.file as? KtFile
@@ -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.KtModule
import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule
import org.jetbrains.kotlin.fir.BuiltinTypes import org.jetbrains.kotlin.fir.BuiltinTypes
import org.jetbrains.kotlin.fir.FirVisibilityChecker
import org.jetbrains.kotlin.fir.SessionConfiguration 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.checkers.FirPlatformDiagnosticSuppressor
import org.jetbrains.kotlin.fir.analysis.js.checkers.FirJsPlatformDiagnosticSuppressor 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.declarations.FirTypeSpecificityComparatorProvider
import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider
import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider 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.session.JsCallConflictResolverFactory
import org.jetbrains.kotlin.fir.types.typeContext import org.jetbrains.kotlin.fir.types.typeContext
import org.jetbrains.kotlin.js.resolve.JsTypeSpecificityComparatorWithoutDelegate 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) { internal class LLFirJsSessionFactory(project: Project) : LLFirAbstractSessionFactory(project) {
override fun createSourcesSession(module: KtSourceModule): LLFirSourcesSession { override fun createSourcesSession(module: KtSourceModule): LLFirSourcesSession {
return doCreateSourcesSession(module) { context -> return doCreateSourcesSession(module) { context ->
registerDefaultComponents()
registerModuleIndependentJsComponents() registerModuleIndependentJsComponents()
register( register(
@@ -53,6 +51,7 @@ internal class LLFirJsSessionFactory(project: Project) : LLFirAbstractSessionFac
override fun createLibrarySession(module: KtModule): LLFirLibraryOrLibrarySourceResolvableModuleSession { override fun createLibrarySession(module: KtModule): LLFirLibraryOrLibrarySourceResolvableModuleSession {
return doCreateLibrarySession(module) { context -> return doCreateLibrarySession(module) { context ->
registerDefaultComponents()
registerModuleIndependentJsComponents() registerModuleIndependentJsComponents()
register( register(
@@ -70,6 +69,7 @@ internal class LLFirJsSessionFactory(project: Project) : LLFirAbstractSessionFac
override fun createBinaryLibrarySession(module: KtBinaryModule): LLFirLibrarySession { override fun createBinaryLibrarySession(module: KtBinaryModule): LLFirLibrarySession {
return doCreateBinaryLibrarySession(module) { return doCreateBinaryLibrarySession(module) {
registerDefaultComponents()
registerModuleIndependentJsComponents() registerModuleIndependentJsComponents()
} }
} }
@@ -88,14 +88,11 @@ internal class LLFirJsSessionFactory(project: Project) : LLFirAbstractSessionFac
} }
private fun LLFirSession.registerModuleIndependentJsComponents() { private fun LLFirSession.registerModuleIndependentJsComponents() {
register(FirVisibilityChecker::class, FirVisibilityChecker.Default)
register(ConeCallConflictResolverFactory::class, JsCallConflictResolverFactory) register(ConeCallConflictResolverFactory::class, JsCallConflictResolverFactory)
register( register(
FirTypeSpecificityComparatorProvider::class, FirTypeSpecificityComparatorProvider::class,
FirTypeSpecificityComparatorProvider(JsTypeSpecificityComparatorWithoutDelegate(typeContext)) FirTypeSpecificityComparatorProvider(JsTypeSpecificityComparatorWithoutDelegate(typeContext))
) )
register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default)
register(FirOverridesBackwardCompatibilityHelper::class, FirJvmOverridesBackwardCompatibilityHelper)
register(FirPlatformDiagnosticSuppressor::class, FirJsPlatformDiagnosticSuppressor()) register(FirPlatformDiagnosticSuppressor::class, FirJsPlatformDiagnosticSuppressor())
} }
} }
@@ -34,8 +34,7 @@ internal class LLFirJvmSessionFactory(project: Project) : LLFirAbstractSessionFa
override fun createSourcesSession(module: KtSourceModule): LLFirSourcesSession { override fun createSourcesSession(module: KtSourceModule): LLFirSourcesSession {
return doCreateSourcesSession(module, FirKotlinScopeProvider(::wrapScopeWithJvmMapped)) { context -> return doCreateSourcesSession(module, FirKotlinScopeProvider(::wrapScopeWithJvmMapped)) { context ->
registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) registerJavaComponents(JavaModuleResolver.getInstance(project))
registerJavaSpecificResolveComponents()
val javaSymbolProvider = LLFirJavaSymbolProvider(this, context.moduleData, project, context.contentScope) val javaSymbolProvider = LLFirJavaSymbolProvider(this, context.moduleData, project, context.contentScope)
register(JavaSymbolProvider::class, javaSymbolProvider) register(JavaSymbolProvider::class, javaSymbolProvider)
@@ -59,8 +58,7 @@ internal class LLFirJvmSessionFactory(project: Project) : LLFirAbstractSessionFa
override fun createLibrarySession(module: KtModule): LLFirLibraryOrLibrarySourceResolvableModuleSession { override fun createLibrarySession(module: KtModule): LLFirLibraryOrLibrarySourceResolvableModuleSession {
return doCreateLibrarySession(module) { context -> return doCreateLibrarySession(module) { context ->
registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) registerJavaComponents(JavaModuleResolver.getInstance(project))
registerJavaSpecificResolveComponents()
val javaSymbolProvider = LLFirJavaSymbolProvider(this, context.moduleData, project, context.contentScope) val javaSymbolProvider = LLFirJavaSymbolProvider(this, context.moduleData, project, context.contentScope)
register( register(
FirSymbolProvider::class, FirSymbolProvider::class,
@@ -81,8 +79,7 @@ internal class LLFirJvmSessionFactory(project: Project) : LLFirAbstractSessionFa
override fun createBinaryLibrarySession(module: KtBinaryModule): LLFirLibrarySession { override fun createBinaryLibrarySession(module: KtBinaryModule): LLFirLibrarySession {
return doCreateBinaryLibrarySession(module) { return doCreateBinaryLibrarySession(module) {
registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) registerJavaComponents(JavaModuleResolver.getInstance(project))
registerJavaSpecificResolveComponents()
register(FirJvmTypeMapper::class, FirJvmTypeMapper(this)) register(FirJvmTypeMapper::class, FirJvmTypeMapper(this))
registerLibraryScopeAwareCallConflictResolverFactory() registerLibraryScopeAwareCallConflictResolverFactory()
} }
@@ -122,12 +122,15 @@ class FirSharableJavaComponents(
} }
@OptIn(SessionConfiguration::class) @OptIn(SessionConfiguration::class)
fun FirSession.registerCommonJavaComponents( fun FirSession.registerJavaComponents(
javaModuleResolver: JavaModuleResolver, javaModuleResolver: JavaModuleResolver,
predefinedComponents: FirSharableJavaComponents? = null, predefinedComponents: FirSharableJavaComponents? = null,
) { ) {
val jsr305State = languageVersionSettings.getFlag(JvmAnalysisFlags.javaTypeEnhancementState) 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(FirEnhancedSymbolsStorage::class, predefinedComponents?.enhancementStorage ?: FirEnhancedSymbolsStorage(this))
register(FirMappedSymbolStorage::class, predefinedComponents?.mappedStorage ?: FirMappedSymbolStorage(this)) register(FirMappedSymbolStorage::class, predefinedComponents?.mappedStorage ?: FirMappedSymbolStorage(this))
register(FirSyntheticPropertiesStorage::class, FirSyntheticPropertiesStorage(this)) register(FirSyntheticPropertiesStorage::class, FirSyntheticPropertiesStorage(this))
@@ -142,6 +145,17 @@ fun FirSession.registerCommonJavaComponents(
register(CompilerRequiredAnnotationEnhancementProvider::class, JavaCompilerRequiredAnnotationEnhancementProvider) register(CompilerRequiredAnnotationEnhancementProvider::class, JavaCompilerRequiredAnnotationEnhancementProvider)
register(FirAnnotationsPlatformSpecificSupportComponent::class, FirJvmAnnotationsPlatformSpecificSupportComponent) register(FirAnnotationsPlatformSpecificSupportComponent::class, FirJvmAnnotationsPlatformSpecificSupportComponent)
register(FirPrimaryConstructorSuperTypeCheckerPlatformComponent::class, FirJvmPrimaryConstructorSuperTypeCheckerPlatformComponent) 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 -------------------------- // -------------------------- Resolve components --------------------------
@@ -181,23 +195,6 @@ fun FirSession.registerResolveComponents(lookupTracker: LookupTracker? = null, e
register(FirExpectActualMatchingContextFactory::class, FirExpectActualMatchingContextImpl.Factory) 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) @OptIn(SessionConfiguration::class)
fun FirSession.registerModuleData(moduleData: FirModuleData) { fun FirSession.registerModuleData(moduleData: FirModuleData) {
register(FirModuleData::class, moduleData) register(FirModuleData::class, moduleData)
@@ -9,20 +9,15 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.FirSession 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.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider 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.FirBuiltinSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCloneableSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCloneableSymbolProvider
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider 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.AbstractProjectEnvironment
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
@@ -54,6 +49,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
languageVersionSettings, languageVersionSettings,
extensionRegistrars, extensionRegistrars,
registerExtraComponents = { registerExtraComponents = {
it.registerDefaultComponents()
registerExtraComponents(it) registerExtraComponents(it)
}, },
createKotlinScopeProvider = { FirKotlinScopeProvider() }, createKotlinScopeProvider = { FirKotlinScopeProvider() },
@@ -82,7 +78,6 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
) )
} }
@OptIn(SessionConfiguration::class)
fun createModuleBasedSession( fun createModuleBasedSession(
moduleData: FirModuleData, moduleData: FirModuleData,
sessionProvider: FirProjectSessionProvider, sessionProvider: FirProjectSessionProvider,
@@ -106,10 +101,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
importTracker, importTracker,
init, init,
registerExtraComponents = { registerExtraComponents = {
it.register(FirVisibilityChecker::class, FirVisibilityChecker.Default) it.registerDefaultComponents()
it.register(ConeCallConflictResolverFactory::class, DefaultCallConflictResolverFactory)
it.register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default)
it.register(FirOverridesBackwardCompatibilityHelper::class, FirDefaultOverridesBackwardCompatibilityHelper)
registerExtraComponents(it) registerExtraComponents(it)
}, },
registerExtraCheckers = {}, registerExtraCheckers = {},
@@ -9,10 +9,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirVisibilityChecker
import org.jetbrains.kotlin.fir.SessionConfiguration 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.checkers.FirPlatformDiagnosticSuppressor
import org.jetbrains.kotlin.fir.analysis.js.checkers.FirJsModuleKind import org.jetbrains.kotlin.fir.analysis.js.checkers.FirJsModuleKind
import org.jetbrains.kotlin.fir.analysis.js.checkers.FirJsPlatformDiagnosticSuppressor 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.calls.ConeCallConflictResolverFactory
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSyntheticFunctionInterfaceProvider import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSyntheticFunctionInterfaceProvider
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider 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.fir.types.typeContext
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.js.config.JSConfigurationKeys import org.jetbrains.kotlin.js.config.JSConfigurationKeys
@@ -54,9 +51,10 @@ object FirJsSessionFactory : FirAbstractSessionFactory() {
null, null,
null, null,
init, init,
registerExtraComponents = { session -> registerExtraComponents = {
session.registerJsSpecificComponents(compilerConfiguration) it.registerDefaultComponents()
registerExtraComponents(session) it.registerJsComponents(compilerConfiguration)
registerExtraComponents(it)
}, },
registerExtraCheckers = { it.registerJsCheckers() }, registerExtraCheckers = { it.registerJsCheckers() },
createKotlinScopeProvider = { FirKotlinScopeProvider() }, createKotlinScopeProvider = { FirKotlinScopeProvider() },
@@ -93,7 +91,8 @@ object FirJsSessionFactory : FirAbstractSessionFactory() {
compilerConfiguration.languageVersionSettings, compilerConfiguration.languageVersionSettings,
extensionRegistrars, extensionRegistrars,
registerExtraComponents = { registerExtraComponents = {
it.registerJsSpecificComponents(compilerConfiguration) it.registerDefaultComponents()
it.registerJsComponents(compilerConfiguration)
registerExtraComponents(it) registerExtraComponents(it)
}, },
createKotlinScopeProvider = { FirKotlinScopeProvider() }, createKotlinScopeProvider = { FirKotlinScopeProvider() },
@@ -107,15 +106,12 @@ object FirJsSessionFactory : FirAbstractSessionFactory() {
) )
@OptIn(SessionConfiguration::class) @OptIn(SessionConfiguration::class)
fun FirSession.registerJsSpecificComponents(compilerConfiguration: CompilerConfiguration) { private fun FirSession.registerJsComponents(compilerConfiguration: CompilerConfiguration) {
register(FirVisibilityChecker::class, FirVisibilityChecker.Default)
register(ConeCallConflictResolverFactory::class, JsCallConflictResolverFactory) register(ConeCallConflictResolverFactory::class, JsCallConflictResolverFactory)
register( register(
FirTypeSpecificityComparatorProvider::class, FirTypeSpecificityComparatorProvider::class,
FirTypeSpecificityComparatorProvider(JsTypeSpecificityComparatorWithoutDelegate(typeContext)) FirTypeSpecificityComparatorProvider(JsTypeSpecificityComparatorWithoutDelegate(typeContext))
) )
register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default)
register(FirOverridesBackwardCompatibilityHelper::class, FirEmptyOverridesBackwardCompatibilityHelper)
register(FirPlatformDiagnosticSuppressor::class, FirJsPlatformDiagnosticSuppressor()) register(FirPlatformDiagnosticSuppressor::class, FirJsPlatformDiagnosticSuppressor())
val moduleKind = compilerConfiguration.get(JSConfigurationKeys.MODULE_KIND, ModuleKind.PLAIN) val moduleKind = compilerConfiguration.get(JSConfigurationKeys.MODULE_KIND, ModuleKind.PLAIN)
@@ -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.providers.impl.FirCloneableSymbolProvider
import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider 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.AbstractProjectEnvironment
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
@@ -51,7 +52,8 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
languageVersionSettings, languageVersionSettings,
extensionRegistrars, extensionRegistrars,
registerExtraComponents = { registerExtraComponents = {
it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents) it.registerDefaultComponents()
it.registerJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents)
registerExtraComponents(it) registerExtraComponents(it)
}, },
createKotlinScopeProvider = { FirKotlinScopeProvider(::wrapScopeWithJvmMapped) }, createKotlinScopeProvider = { FirKotlinScopeProvider(::wrapScopeWithJvmMapped) },
@@ -106,8 +108,8 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
importTracker, importTracker,
init, init,
registerExtraComponents = { registerExtraComponents = {
it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents) it.registerDefaultComponents()
it.registerJavaSpecificResolveComponents() it.registerJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents)
registerExtraComponents(it) registerExtraComponents(it)
}, },
registerExtraCheckers = { it.registerJvmCheckers() }, registerExtraCheckers = { it.registerJvmCheckers() },
@@ -6,24 +6,22 @@
package org.jetbrains.kotlin.fir.session package org.jetbrains.kotlin.fir.session
import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.BinaryModuleData
import org.jetbrains.kotlin.fir.analysis.FirEmptyOverridesBackwardCompatibilityHelper import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.analysis.FirOverridesBackwardCompatibilityHelper import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.checkers.registerNativeCheckers import org.jetbrains.kotlin.fir.checkers.registerNativeCheckers
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider 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.resolve.providers.impl.FirBuiltinSyntheticFunctionInterfaceProvider
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider 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.isNativeStdlib
import org.jetbrains.kotlin.library.metadata.impl.KlibResolvedModuleDescriptorsFactoryImpl.Companion.FORWARD_DECLARATIONS_MODULE_NAME 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.library.metadata.resolver.KotlinResolvedLibrary
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
object FirNativeSessionFactory : FirAbstractSessionFactory() { object FirNativeSessionFactory : FirAbstractSessionFactory() {
@OptIn(SessionConfiguration::class)
fun createLibrarySession( fun createLibrarySession(
mainModuleName: Name, mainModuleName: Name,
resolvedLibraries: List<KotlinResolvedLibrary>, resolvedLibraries: List<KotlinResolvedLibrary>,
@@ -40,7 +38,7 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() {
languageVersionSettings, languageVersionSettings,
extensionRegistrars, extensionRegistrars,
registerExtraComponents = { session -> registerExtraComponents = { session ->
session.register(FirVisibilityChecker::class, FirVisibilityChecker.Default) session.registerDefaultComponents()
registerExtraComponents(session) registerExtraComponents(session)
}, },
createKotlinScopeProvider = { FirKotlinScopeProvider() }, createKotlinScopeProvider = { FirKotlinScopeProvider() },
@@ -66,7 +64,6 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() {
}) })
} }
@OptIn(SessionConfiguration::class)
fun createModuleBasedSession( fun createModuleBasedSession(
moduleData: FirModuleData, moduleData: FirModuleData,
sessionProvider: FirProjectSessionProvider, sessionProvider: FirProjectSessionProvider,
@@ -85,10 +82,7 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() {
null, null,
init, init,
registerExtraComponents = { registerExtraComponents = {
it.register(FirVisibilityChecker::class, FirVisibilityChecker.Default) it.registerDefaultComponents()
it.register(ConeCallConflictResolverFactory::class, DefaultCallConflictResolverFactory)
it.register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default)
it.register(FirOverridesBackwardCompatibilityHelper::class, FirEmptyOverridesBackwardCompatibilityHelper)
registerExtraComponents(it) registerExtraComponents(it)
}, },
registerExtraCheckers = { it.registerNativeCheckers() }, registerExtraCheckers = { it.registerNativeCheckers() },
@@ -8,9 +8,13 @@ package org.jetbrains.kotlin.fir.session
import org.jetbrains.annotations.TestOnly import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.fir.* 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.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.extensions.FirExtensionService import org.jetbrains.kotlin.fir.extensions.FirExtensionService
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider 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.AbstractProjectEnvironment
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
@@ -123,4 +127,16 @@ object FirSessionFactoryHelper {
register(FirExtensionService::class, FirExtensionService(this)) 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)
}
} }
@@ -9,19 +9,14 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.FirSession 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.checkers.registerWasmCheckers
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider 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.resolve.providers.impl.FirBuiltinSyntheticFunctionInterfaceProvider
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider 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.incremental.components.LookupTracker
import org.jetbrains.kotlin.library.KotlinLibrary import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -46,9 +41,9 @@ object FirWasmSessionFactory : FirAbstractSessionFactory() {
null, null,
null, null,
init, init,
registerExtraComponents = { session -> registerExtraComponents = {
session.registerWasmSpecificComponents() it.registerDefaultComponents()
registerExtraComponents(session) registerExtraComponents(it)
}, },
registerExtraCheckers = { it.registerWasmCheckers() }, registerExtraCheckers = { it.registerWasmCheckers() },
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _, _ -> declaredMemberScope } }, createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _, _ -> declaredMemberScope } },
@@ -85,7 +80,7 @@ object FirWasmSessionFactory : FirAbstractSessionFactory() {
languageVersionSettings, languageVersionSettings,
extensionRegistrars, extensionRegistrars,
registerExtraComponents = { registerExtraComponents = {
it.registerWasmSpecificComponents() it.registerDefaultComponents()
registerExtraComponents(it) registerExtraComponents(it)
}, },
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _, _ -> declaredMemberScope } }, 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)
}
} }