[JS FIR] Support JS module system FE diagnostics

Support CALL_TO_JS_MODULE_WITHOUT_MODULE_SYSTEM diagnostic
^KT-59377 Fixed

Support CALL_TO_JS_NON_MODULE_WITH_MODULE_SYSTEM diagnostic
^KT-59381 Fixed

Support CALL_FROM_UMD_MUST_BE_JS_MODULE_AND_JS_NON_MODULE diagnostic
^KT-59417 Fixed
This commit is contained in:
Alexander Korepanov
2023-07-13 15:30:04 +02:00
committed by Space Team
parent 30b012839c
commit 08d158f901
24 changed files with 319 additions and 169 deletions
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.session
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
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
@@ -14,6 +14,7 @@ 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
import org.jetbrains.kotlin.fir.checkers.registerJsCheckers
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
@@ -25,15 +26,17 @@ import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSyntheticFuncti
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.js.ModuleKind
object FirJsSessionFactory : FirAbstractSessionFactory() {
fun createModuleBasedSession(
moduleData: FirModuleData,
sessionProvider: FirProjectSessionProvider,
extensionRegistrars: List<FirExtensionRegistrar>,
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
compilerConfiguration: CompilerConfiguration,
lookupTracker: LookupTracker?,
icData: KlibIcData? = null,
registerExtraComponents: ((FirSession) -> Unit) = {},
@@ -43,12 +46,12 @@ object FirJsSessionFactory : FirAbstractSessionFactory() {
moduleData,
sessionProvider,
extensionRegistrars,
languageVersionSettings,
compilerConfiguration.languageVersionSettings,
lookupTracker,
null,
init,
registerExtraComponents = { session ->
session.registerJsSpecificComponents()
session.registerJsSpecificComponents(compilerConfiguration)
registerExtraComponents(session)
},
registerExtraCheckers = { it.registerJsCheckers() },
@@ -77,16 +80,16 @@ object FirJsSessionFactory : FirAbstractSessionFactory() {
sessionProvider: FirProjectSessionProvider,
moduleDataProvider: ModuleDataProvider,
extensionRegistrars: List<FirExtensionRegistrar>,
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
compilerConfiguration: CompilerConfiguration,
registerExtraComponents: ((FirSession) -> Unit),
): FirSession = createLibrarySession(
mainModuleName,
sessionProvider,
moduleDataProvider,
languageVersionSettings,
compilerConfiguration.languageVersionSettings,
extensionRegistrars,
registerExtraComponents = {
it.registerJsSpecificComponents()
it.registerJsSpecificComponents(compilerConfiguration)
registerExtraComponents(it)
},
createKotlinScopeProvider = { FirKotlinScopeProvider() },
@@ -100,11 +103,14 @@ object FirJsSessionFactory : FirAbstractSessionFactory() {
)
@OptIn(SessionConfiguration::class)
fun FirSession.registerJsSpecificComponents() {
fun FirSession.registerJsSpecificComponents(compilerConfiguration: CompilerConfiguration) {
register(FirVisibilityChecker::class, FirVisibilityChecker.Default)
register(ConeCallConflictResolverFactory::class, JsCallConflictResolverFactory)
register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default)
register(FirOverridesBackwardCompatibilityHelper::class, FirEmptyOverridesBackwardCompatibilityHelper)
register(FirPlatformDiagnosticSuppressor::class, FirJsPlatformDiagnosticSuppressor())
val moduleKind = compilerConfiguration.get(JSConfigurationKeys.MODULE_KIND, ModuleKind.PLAIN)
register(FirJsModuleKind::class, FirJsModuleKind(moduleKind))
}
}