[FIR] Introduce module :fir:entrypoint and FirSessionFactory for creating sessions

This commit is contained in:
Dmitriy Novozhilov
2020-08-28 16:04:00 +03:00
parent 94d58c714a
commit a8d23c36f5
25 changed files with 269 additions and 207 deletions
@@ -30,12 +30,11 @@ import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions
import org.jetbrains.kotlin.fir.extensions.FirExtensionService
import org.jetbrains.kotlin.fir.extensions.extensionService
import org.jetbrains.kotlin.fir.extensions.registerExtensions
import org.jetbrains.kotlin.fir.java.FirJavaModuleBasedSession
import org.jetbrains.kotlin.fir.java.FirLibrarySession
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
import org.jetbrains.kotlin.fir.session.FirSessionFactory
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.TargetPlatform
@@ -76,7 +75,8 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
//For BuiltIns, registered in sessionProvider automatically
val allProjectScope = GlobalSearchScope.allScope(project)
FirLibrarySession.create(
FirSessionFactory.createLibrarySession(
builtInsModuleInfo, sessionProvider, allProjectScope, project,
environment.createPackagePartProvider(allProjectScope)
).also {
@@ -88,7 +88,7 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
val scope = TopDownAnalyzerFacadeForJVM.newModuleSearchScope(
project,
moduleFiles.mapNotNull { it.ktFile })
FirJavaModuleBasedSession.create(info, sessionProvider, scope).also {
FirSessionFactory.createJavaModuleBasedSession(info, sessionProvider, scope).also {
registerFirExtensions(it.extensionService)
configureSession(it)
}
@@ -334,4 +334,4 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
}
protected open fun configureSession(session: FirSession) {}
}
}
@@ -11,9 +11,8 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions
import org.jetbrains.kotlin.fir.extensions.extensionService
import org.jetbrains.kotlin.fir.extensions.registerExtensions
import org.jetbrains.kotlin.fir.java.FirJavaModuleBasedSession
import org.jetbrains.kotlin.fir.java.FirLibrarySession
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.session.FirSessionFactory
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.name.Name
@@ -22,7 +21,7 @@ fun createSession(
sourceScope: GlobalSearchScope,
librariesScope: GlobalSearchScope = GlobalSearchScope.notScope(sourceScope),
moduleName: String = "TestModule"
) = createSession(environment.project, sourceScope, librariesScope, moduleName, environment::createPackagePartProvider)
): FirSession = createSession(environment.project, sourceScope, librariesScope, moduleName, environment::createPackagePartProvider)
fun createSession(
project: Project,
@@ -33,7 +32,7 @@ fun createSession(
): FirSession {
val moduleInfo = FirTestModuleInfo(name = Name.identifier(moduleName))
val provider = FirProjectSessionProvider(project)
return FirJavaModuleBasedSession.create(moduleInfo, provider, sourceScope).also {
return FirSessionFactory.createJavaModuleBasedSession(moduleInfo, provider, sourceScope).also {
createSessionForDependencies(project, provider, moduleInfo, librariesScope, packagePartProvider)
it.extensionService.registerExtensions(BunchOfRegisteredExtensions.empty())
}
@@ -48,7 +47,7 @@ private fun createSessionForDependencies(
) {
val dependenciesInfo = FirTestModuleInfo(name = Name.identifier(moduleInfo.name.identifier + ".dependencies"))
moduleInfo.dependencies.add(dependenciesInfo)
FirLibrarySession.create(
FirSessionFactory.createLibrarySession(
dependenciesInfo, provider, librariesScope, project, packagePartProvider(librariesScope)
)
}