[FIR] Move createSessionWithDependencies and createEmptySession into FirSessionFactoryHelper
This commit is contained in:
committed by
Space Team
parent
281c79e21e
commit
40a01180ff
@@ -5,7 +5,6 @@
|
||||
|
||||
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.checkers.registerJvmCheckers
|
||||
@@ -18,7 +17,6 @@ import org.jetbrains.kotlin.fir.java.deserialization.JvmClassFileBasedSymbolProv
|
||||
import org.jetbrains.kotlin.fir.java.deserialization.OptionalAnnotationClassesProvider
|
||||
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.FirDependenciesSymbolProviderImpl
|
||||
import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped
|
||||
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
|
||||
@@ -27,66 +25,8 @@ import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
|
||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||
|
||||
@OptIn(PrivateSessionConstructor::class)
|
||||
object FirSessionFactory : FirAbstractSessionFactory() {
|
||||
inline fun createSessionWithDependencies(
|
||||
moduleName: Name,
|
||||
platform: TargetPlatform,
|
||||
analyzerServices: PlatformDependentAnalyzerServices,
|
||||
externalSessionProvider: FirProjectSessionProvider?,
|
||||
projectEnvironment: AbstractProjectEnvironment,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
javaSourcesScope: AbstractProjectFileSearchScope,
|
||||
librariesScope: AbstractProjectFileSearchScope,
|
||||
lookupTracker: LookupTracker?,
|
||||
enumWhenTracker: EnumWhenTracker?,
|
||||
incrementalCompilationContext: IncrementalCompilationContext?,
|
||||
extensionRegistrars: List<FirExtensionRegistrar>,
|
||||
needRegisterJavaElementFinder: Boolean,
|
||||
dependenciesConfigurator: DependencyListForCliModule.Builder.() -> Unit = {},
|
||||
noinline sessionConfigurator: FirSessionConfigurator.() -> Unit = {},
|
||||
): FirSession {
|
||||
val dependencyList = DependencyListForCliModule.build(moduleName, platform, analyzerServices, dependenciesConfigurator)
|
||||
val sessionProvider = externalSessionProvider ?: FirProjectSessionProvider()
|
||||
val packagePartProvider = projectEnvironment.getPackagePartProvider(librariesScope)
|
||||
createLibrarySession(
|
||||
moduleName,
|
||||
sessionProvider,
|
||||
dependencyList,
|
||||
projectEnvironment,
|
||||
librariesScope,
|
||||
packagePartProvider,
|
||||
languageVersionSettings
|
||||
)
|
||||
|
||||
val mainModuleData = FirModuleDataImpl(
|
||||
moduleName,
|
||||
dependencyList.regularDependencies,
|
||||
dependencyList.dependsOnDependencies,
|
||||
dependencyList.friendsDependencies,
|
||||
dependencyList.platform,
|
||||
dependencyList.analyzerServices
|
||||
)
|
||||
return createModuleBasedSession(
|
||||
mainModuleData,
|
||||
sessionProvider,
|
||||
javaSourcesScope,
|
||||
projectEnvironment,
|
||||
incrementalCompilationContext,
|
||||
extensionRegistrars,
|
||||
languageVersionSettings,
|
||||
lookupTracker,
|
||||
enumWhenTracker,
|
||||
needRegisterJavaElementFinder,
|
||||
sessionConfigurator
|
||||
)
|
||||
}
|
||||
|
||||
fun createLibrarySession(
|
||||
mainModuleName: Name,
|
||||
sessionProvider: FirProjectSessionProvider,
|
||||
@@ -195,44 +135,4 @@ object FirSessionFactory : FirAbstractSessionFactory() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(SessionConfiguration::class)
|
||||
@TestOnly
|
||||
fun createEmptySession(): FirSession {
|
||||
return object : FirSession(null, Kind.Source) {}.apply {
|
||||
val moduleData = FirModuleDataImpl(
|
||||
Name.identifier("<stub module>"),
|
||||
dependencies = emptyList(),
|
||||
dependsOnDependencies = emptyList(),
|
||||
friendDependencies = emptyList(),
|
||||
platform = JvmPlatforms.unspecifiedJvmPlatform,
|
||||
analyzerServices = JvmPlatformAnalyzerServices
|
||||
)
|
||||
registerModuleData(moduleData)
|
||||
moduleData.bindSession(this)
|
||||
// Empty stub for tests
|
||||
register(FirLanguageSettingsComponent::class, FirLanguageSettingsComponent(
|
||||
object : LanguageVersionSettings {
|
||||
|
||||
private fun stub(): Nothing = TODO(
|
||||
"It does not yet have well-defined semantics for tests." +
|
||||
"If you're seeing this, implement it in a test-specific way"
|
||||
)
|
||||
|
||||
override fun getFeatureSupport(feature: LanguageFeature): LanguageFeature.State {
|
||||
return LanguageFeature.State.DISABLED
|
||||
}
|
||||
|
||||
override fun isPreRelease(): Boolean = stub()
|
||||
|
||||
override fun <T> getFlag(flag: AnalysisFlag<T>): T = stub()
|
||||
|
||||
override val apiVersion: ApiVersion
|
||||
get() = stub()
|
||||
override val languageVersion: LanguageVersion
|
||||
get() = stub()
|
||||
}
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+116
@@ -0,0 +1,116 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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.fir.session
|
||||
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.config.*
|
||||
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.environment.AbstractProjectEnvironment
|
||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
|
||||
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
|
||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||
|
||||
object FirSessionFactoryHelper {
|
||||
inline fun createSessionWithDependencies(
|
||||
moduleName: Name,
|
||||
platform: TargetPlatform,
|
||||
analyzerServices: PlatformDependentAnalyzerServices,
|
||||
externalSessionProvider: FirProjectSessionProvider?,
|
||||
projectEnvironment: AbstractProjectEnvironment,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
javaSourcesScope: AbstractProjectFileSearchScope,
|
||||
librariesScope: AbstractProjectFileSearchScope,
|
||||
lookupTracker: LookupTracker?,
|
||||
enumWhenTracker: EnumWhenTracker?,
|
||||
incrementalCompilationContext: IncrementalCompilationContext?,
|
||||
extensionRegistrars: List<FirExtensionRegistrar>,
|
||||
needRegisterJavaElementFinder: Boolean,
|
||||
dependenciesConfigurator: DependencyListForCliModule.Builder.() -> Unit = {},
|
||||
noinline sessionConfigurator: FirSessionConfigurator.() -> Unit = {},
|
||||
): FirSession {
|
||||
val dependencyList = DependencyListForCliModule.build(moduleName, platform, analyzerServices, dependenciesConfigurator)
|
||||
val sessionProvider = externalSessionProvider ?: FirProjectSessionProvider()
|
||||
val packagePartProvider = projectEnvironment.getPackagePartProvider(librariesScope)
|
||||
FirJvmSessionFactory.createLibrarySession(
|
||||
moduleName,
|
||||
sessionProvider,
|
||||
dependencyList,
|
||||
projectEnvironment,
|
||||
librariesScope,
|
||||
packagePartProvider,
|
||||
languageVersionSettings
|
||||
)
|
||||
|
||||
val mainModuleData = FirModuleDataImpl(
|
||||
moduleName,
|
||||
dependencyList.regularDependencies,
|
||||
dependencyList.dependsOnDependencies,
|
||||
dependencyList.friendsDependencies,
|
||||
dependencyList.platform,
|
||||
dependencyList.analyzerServices
|
||||
)
|
||||
return FirJvmSessionFactory.createModuleBasedSession(
|
||||
mainModuleData,
|
||||
sessionProvider,
|
||||
javaSourcesScope,
|
||||
projectEnvironment,
|
||||
incrementalCompilationContext,
|
||||
extensionRegistrars,
|
||||
languageVersionSettings,
|
||||
lookupTracker,
|
||||
enumWhenTracker,
|
||||
needRegisterJavaElementFinder,
|
||||
sessionConfigurator
|
||||
)
|
||||
}
|
||||
|
||||
@OptIn(SessionConfiguration::class, PrivateSessionConstructor::class)
|
||||
@TestOnly
|
||||
fun createEmptySession(): FirSession {
|
||||
return object : FirSession(null, Kind.Source) {}.apply {
|
||||
val moduleData = FirModuleDataImpl(
|
||||
Name.identifier("<stub module>"),
|
||||
dependencies = emptyList(),
|
||||
dependsOnDependencies = emptyList(),
|
||||
friendDependencies = emptyList(),
|
||||
platform = JvmPlatforms.unspecifiedJvmPlatform,
|
||||
analyzerServices = JvmPlatformAnalyzerServices
|
||||
)
|
||||
registerModuleData(moduleData)
|
||||
moduleData.bindSession(this)
|
||||
// Empty stub for tests
|
||||
register(FirLanguageSettingsComponent::class, FirLanguageSettingsComponent(
|
||||
object : LanguageVersionSettings {
|
||||
|
||||
private fun stub(): Nothing = TODO(
|
||||
"It does not yet have well-defined semantics for tests." +
|
||||
"If you're seeing this, implement it in a test-specific way"
|
||||
)
|
||||
|
||||
override fun getFeatureSupport(feature: LanguageFeature): LanguageFeature.State {
|
||||
return LanguageFeature.State.DISABLED
|
||||
}
|
||||
|
||||
override fun isPreRelease(): Boolean = stub()
|
||||
|
||||
override fun <T> getFlag(flag: AnalysisFlag<T>): T = stub()
|
||||
|
||||
override val apiVersion: ApiVersion
|
||||
get() = stub()
|
||||
override val languageVersion: LanguageVersion
|
||||
get() = stub()
|
||||
}
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user