[FIR] Cleanup session creation utils

This commit is contained in:
Dmitriy Novozhilov
2021-03-05 13:23:33 +03:00
parent f1edca8ca8
commit f82c7c4678
11 changed files with 136 additions and 70 deletions
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.fir.analysis.FirAnalyzerFacade
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
import org.jetbrains.kotlin.fir.createSession
import org.jetbrains.kotlin.fir.createSessionForTests
import org.jetbrains.kotlin.ir.backend.jvm.jvmResolveLibraries
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.psi.KtFile
@@ -104,7 +104,7 @@ object GenerationUtils {
val scope = GlobalSearchScope.filesScope(project, files.map { it.virtualFile })
.uniteWith(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(project))
val librariesScope = ProjectScope.getLibrariesScope(project)
val session = createSession(project, scope, librariesScope, "main", packagePartProvider)
val session = createSessionForTests(project, scope, librariesScope, "main", packagePartProvider = packagePartProvider)
// TODO: add running checkers and check that it's safe to compile
val firAnalyzerFacade = FirAnalyzerFacade(session, configuration.languageVersionSettings, files)
@@ -1,22 +0,0 @@
/*
* Copyright 2010-2018 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
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
class FirTestModuleInfo(
override val name: Name = Name.identifier("TestModule"),
val dependencies: MutableList<ModuleInfo> = mutableListOf(),
override val platform: TargetPlatform = JvmPlatforms.unspecifiedJvmPlatform,
override val analyzerServices: PlatformDependentAnalyzerServices = JvmPlatformAnalyzerServices
) : ModuleInfo {
override fun dependencies(): List<ModuleInfo> = dependencies
}
@@ -8,42 +8,42 @@ package org.jetbrains.kotlin.fir
import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.session.FirSessionFactory
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.name.Name
fun createSession(
fun createSessionForTests(
environment: KotlinCoreEnvironment,
sourceScope: GlobalSearchScope,
librariesScope: GlobalSearchScope = GlobalSearchScope.notScope(sourceScope),
moduleName: String = "TestModule"
): FirSession = createSession(environment.project, sourceScope, librariesScope, moduleName, environment::createPackagePartProvider)
moduleName: String = "TestModule",
friendPaths: List<String> = emptyList()
): FirSession = createSessionForTests(
environment.project,
sourceScope,
librariesScope,
moduleName,
friendPaths,
environment::createPackagePartProvider
)
fun createSession(
fun createSessionForTests(
project: Project,
sourceScope: GlobalSearchScope,
librariesScope: GlobalSearchScope,
moduleName: String = "TestModule",
friendPaths: List<String> = emptyList(),
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider
): FirSession {
val moduleInfo = FirTestModuleInfo(name = Name.identifier(moduleName))
val provider = FirProjectSessionProvider()
return FirSessionFactory.createJavaModuleBasedSession(moduleInfo, provider, sourceScope, project).also {
createSessionForDependencies(project, provider, moduleInfo, librariesScope, packagePartProvider)
}
}
private fun createSessionForDependencies(
project: Project,
provider: FirProjectSessionProvider,
moduleInfo: FirTestModuleInfo,
librariesScope: GlobalSearchScope,
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider
) {
val dependenciesInfo = FirTestModuleInfo(name = Name.identifier(moduleInfo.name.identifier + ".dependencies"))
moduleInfo.dependencies.add(dependenciesInfo)
FirSessionFactory.createLibrarySession(
dependenciesInfo, provider, librariesScope, project, packagePartProvider(librariesScope)
return createSessionWithDependencies(
Name.identifier(moduleName),
friendPaths,
outputDirectory = null,
project,
languageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
sourceScope,
librariesScope,
packagePartProvider
)
}