FIR: refactor session factory to better support JS scenarios
This commit is contained in:
@@ -26,7 +26,7 @@ dependencies {
|
||||
api(project(":compiler:fir:providers"))
|
||||
api(project(":compiler:fir:semantics"))
|
||||
api(project(":compiler:fir:java"))
|
||||
implementation(project(":compiler:fir:entrypoint"))
|
||||
api(project(":compiler:fir:entrypoint"))
|
||||
api(project(":compiler:fir:fir2ir"))
|
||||
api(project(":compiler:fir:fir2ir:jvm-backend"))
|
||||
api(project(":compiler:fir:checkers"))
|
||||
|
||||
+5
@@ -6,13 +6,17 @@
|
||||
package org.jetbrains.kotlin.fir.session
|
||||
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.analysis.FirOverridesBackwardCompatibilityHelper
|
||||
import org.jetbrains.kotlin.fir.checkers.registerCommonCheckers
|
||||
import org.jetbrains.kotlin.fir.checkers.registerJsCheckers
|
||||
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||
import org.jetbrains.kotlin.fir.extensions.FirSwitchableExtensionDeclarationsSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.java.FirCliSession
|
||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirDependenciesSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||
@@ -21,6 +25,7 @@ import org.jetbrains.kotlin.fir.resolve.providers.impl.FirDependenciesSymbolProv
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirLibrarySessionProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
|
||||
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper
|
||||
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.test.frontend.fir
|
||||
package org.jetbrains.kotlin.fir.session
|
||||
|
||||
import org.jetbrains.kotlin.fir.NoMutableState
|
||||
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
||||
+2
-2
@@ -131,7 +131,7 @@ class FirFrontendFacade(
|
||||
}
|
||||
module.targetPlatform.isJs() -> {
|
||||
projectEnvironment = null
|
||||
FirJsSessionFactory.createLibrarySession(
|
||||
TestFirJsSessionFactory.createLibrarySession(
|
||||
moduleName,
|
||||
moduleInfoProvider.firSessionProvider,
|
||||
dependencyList,
|
||||
@@ -179,7 +179,7 @@ class FirFrontendFacade(
|
||||
)
|
||||
}
|
||||
module.targetPlatform.isJs() -> {
|
||||
FirJsSessionFactory.createModuleBasedSession(
|
||||
TestFirJsSessionFactory.createModuleBasedSession(
|
||||
mainModuleData,
|
||||
moduleInfoProvider.firSessionProvider,
|
||||
extensionRegistrars,
|
||||
|
||||
-81
@@ -1,81 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.test.frontend.fir
|
||||
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.analysis.FirOverridesBackwardCompatibilityHelper
|
||||
import org.jetbrains.kotlin.fir.checkers.registerJsCheckers
|
||||
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.FirAbstractSessionFactory
|
||||
import org.jetbrains.kotlin.fir.session.FirSessionConfigurator
|
||||
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
||||
import org.jetbrains.kotlin.fir.session.KlibBasedSymbolProvider
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
|
||||
object FirJsSessionFactory : FirAbstractSessionFactory() {
|
||||
fun createLibrarySession(
|
||||
mainModuleName: Name,
|
||||
sessionProvider: FirProjectSessionProvider,
|
||||
dependencyListForCliModule: DependencyListForCliModule,
|
||||
module: TestModule,
|
||||
testServices: TestServices,
|
||||
configuration: CompilerConfiguration,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
): FirSession = FirSessionFactory.createJsLibrarySession(
|
||||
mainModuleName,
|
||||
getAllJsDependenciesPaths(module, testServices),
|
||||
configuration, sessionProvider, dependencyListForCliModule.moduleDataProvider, languageVersionSettings
|
||||
)
|
||||
|
||||
fun createModuleBasedSession(
|
||||
moduleData: FirModuleData,
|
||||
sessionProvider: FirProjectSessionProvider,
|
||||
extensionRegistrars: List<FirExtensionRegistrar>,
|
||||
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||
lookupTracker: LookupTracker?,
|
||||
init: FirSessionConfigurator.() -> Unit
|
||||
): FirSession {
|
||||
return createModuleBasedSession(
|
||||
moduleData,
|
||||
sessionProvider,
|
||||
extensionRegistrars,
|
||||
languageVersionSettings,
|
||||
lookupTracker,
|
||||
null,
|
||||
init,
|
||||
registerExtraComponents = { it.registerJsSpecificResolveComponents() },
|
||||
registerExtraCheckers = { it.registerJsCheckers() },
|
||||
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _ -> declaredMemberScope } },
|
||||
createProviders = { _, _, symbolProvider, generatedSymbolsProvider, dependenciesSymbolProvider ->
|
||||
listOfNotNull(
|
||||
symbolProvider,
|
||||
generatedSymbolsProvider,
|
||||
dependenciesSymbolProvider,
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@OptIn(SessionConfiguration::class)
|
||||
fun FirSession.registerJsSpecificResolveComponents() {
|
||||
register(FirVisibilityChecker::class, FirVisibilityChecker.Default)
|
||||
register(ConeCallConflictResolverFactory::class, JsCallConflictResolverFactory)
|
||||
register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default)
|
||||
register(FirOverridesBackwardCompatibilityHelper::class, FirOverridesBackwardCompatibilityHelper.Default())
|
||||
}
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.test.frontend.fir
|
||||
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||
import org.jetbrains.kotlin.fir.session.FirJsSessionFactory
|
||||
import org.jetbrains.kotlin.fir.session.FirSessionConfigurator
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.ir.backend.js.jsResolveLibraries
|
||||
import org.jetbrains.kotlin.ir.backend.js.resolverLogger
|
||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
|
||||
object TestFirJsSessionFactory {
|
||||
fun createLibrarySession(
|
||||
mainModuleName: Name,
|
||||
sessionProvider: FirProjectSessionProvider,
|
||||
dependencyListForCliModule: DependencyListForCliModule,
|
||||
module: TestModule,
|
||||
testServices: TestServices,
|
||||
configuration: CompilerConfiguration,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
): FirSession {
|
||||
val repositories = configuration[JSConfigurationKeys.REPOSITORIES] ?: emptyList()
|
||||
val logger = configuration.resolverLogger
|
||||
val libraries = getAllJsDependenciesPaths(module, testServices)
|
||||
val resolvedLibraries = jsResolveLibraries(libraries, repositories, logger).getFullResolvedList()
|
||||
|
||||
return FirJsSessionFactory.createJsLibrarySession(
|
||||
mainModuleName, resolvedLibraries, sessionProvider, dependencyListForCliModule.moduleDataProvider, languageVersionSettings
|
||||
)
|
||||
}
|
||||
|
||||
fun createModuleBasedSession(
|
||||
mainModuleData: FirModuleDataImpl, sessionProvider: FirProjectSessionProvider, extensionRegistrars: List<FirExtensionRegistrar>,
|
||||
languageVersionSettings: LanguageVersionSettings, lookupTracker: LookupTracker?,
|
||||
sessionConfigurator: FirSessionConfigurator.() -> Unit
|
||||
): FirSession =
|
||||
FirJsSessionFactory.createJsModuleBasedSession(
|
||||
mainModuleData, sessionProvider, extensionRegistrars, languageVersionSettings, lookupTracker, sessionConfigurator
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user