[FIR] Extract createFirLibraryListAndSession to cliCompilerUtils
Use it in compilerPipeline and FirKotlinToJvmBytecodeCompiler
This commit is contained in:
committed by
Space Team
parent
1edc9f0a1d
commit
5f1ed56554
+4
-33
@@ -20,8 +20,6 @@ import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.STRONG_WARNING
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
|
||||
import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots
|
||||
import org.jetbrains.kotlin.codegen.ClassBuilderFactories
|
||||
import org.jetbrains.kotlin.codegen.CodegenFactory
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
@@ -211,7 +209,10 @@ object FirKotlinToJvmBytecodeCompiler {
|
||||
val sessionProvider = FirProjectSessionProvider()
|
||||
|
||||
val moduleName = module.getModuleName()
|
||||
val libraryList = createLibraryListAndSession(moduleName, sessionProvider, librariesScope, languageVersionSettings)
|
||||
val libraryList = createFirLibraryListAndSession(
|
||||
moduleName, moduleConfiguration, projectEnvironment,
|
||||
scope = librariesScope, librariesScope = librariesScope, friendPaths = module.getFriendPaths(), sessionProvider
|
||||
)
|
||||
|
||||
val commonModuleData = runIf(isMppEnabled) {
|
||||
FirModuleDataImpl(
|
||||
@@ -293,36 +294,6 @@ object FirKotlinToJvmBytecodeCompiler {
|
||||
return if (syntaxErrors || diagnosticsReporter.hasErrors) null else FirResult(platformOutput, commonOutput)
|
||||
}
|
||||
|
||||
private fun CompilationContext.createLibraryListAndSession(
|
||||
moduleName: String,
|
||||
sessionProvider: FirProjectSessionProvider,
|
||||
librariesScope: AbstractProjectFileSearchScope,
|
||||
languageVersionSettings: LanguageVersionSettings
|
||||
): DependencyListForCliModule {
|
||||
val binaryModuleData = BinaryModuleData.initialize(
|
||||
Name.identifier(moduleName),
|
||||
JvmPlatforms.unspecifiedJvmPlatform,
|
||||
JvmPlatformAnalyzerServices
|
||||
)
|
||||
val libraryList = DependencyListForCliModule.build(binaryModuleData) {
|
||||
dependencies(moduleConfiguration.jvmClasspathRoots.map { it.toPath() })
|
||||
dependencies(moduleConfiguration.jvmModularRoots.map { it.toPath() })
|
||||
friendDependencies(moduleConfiguration[JVMConfigurationKeys.FRIEND_PATHS] ?: emptyList())
|
||||
friendDependencies(module.getFriendPaths())
|
||||
}
|
||||
FirJvmSessionFactory.createLibrarySession(
|
||||
Name.identifier(moduleName),
|
||||
sessionProvider,
|
||||
libraryList.moduleDataProvider,
|
||||
projectEnvironment,
|
||||
librariesScope,
|
||||
projectEnvironment.getPackagePartProvider(librariesScope),
|
||||
languageVersionSettings,
|
||||
registerExtraComponents = {},
|
||||
)
|
||||
return libraryList
|
||||
}
|
||||
|
||||
private fun buildResolveAndCheckFir(
|
||||
session: FirSession,
|
||||
ktFiles: List<KtFile>,
|
||||
|
||||
@@ -19,18 +19,30 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil
|
||||
import org.jetbrains.kotlin.cli.common.modules.ModuleBuilder
|
||||
import org.jetbrains.kotlin.cli.common.output.writeAll
|
||||
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
|
||||
import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationStateEventCallback
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.BinaryModuleData
|
||||
import org.jetbrains.kotlin.fir.DependencyListForCliModule
|
||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||
import org.jetbrains.kotlin.fir.session.FirJvmSessionFactory
|
||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
|
||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
|
||||
import org.jetbrains.kotlin.javac.JavacWrapper
|
||||
import org.jetbrains.kotlin.modules.JavaRootPath
|
||||
import org.jetbrains.kotlin.modules.Module
|
||||
import org.jetbrains.kotlin.modules.TargetId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||
import java.io.File
|
||||
|
||||
fun Module.getSourceFiles(
|
||||
@@ -184,3 +196,36 @@ fun ModuleBuilder.configureFromArgs(args: K2JVMCompilerArguments) {
|
||||
}
|
||||
}
|
||||
|
||||
fun createFirLibraryListAndSession(
|
||||
moduleName: String,
|
||||
configuration: CompilerConfiguration,
|
||||
projectEnvironment: AbstractProjectEnvironment,
|
||||
scope: AbstractProjectFileSearchScope,
|
||||
librariesScope: AbstractProjectFileSearchScope,
|
||||
friendPaths: List<String>,
|
||||
sessionProvider: FirProjectSessionProvider
|
||||
): DependencyListForCliModule {
|
||||
val binaryModuleData = BinaryModuleData.initialize(
|
||||
Name.identifier(moduleName),
|
||||
JvmPlatforms.unspecifiedJvmPlatform,
|
||||
JvmPlatformAnalyzerServices
|
||||
)
|
||||
val libraryList = DependencyListForCliModule.build(binaryModuleData) {
|
||||
dependencies(configuration.jvmClasspathRoots.map { it.toPath() })
|
||||
dependencies(configuration.jvmModularRoots.map { it.toPath() })
|
||||
friendDependencies(configuration[JVMConfigurationKeys.FRIEND_PATHS] ?: emptyList())
|
||||
friendDependencies(friendPaths)
|
||||
}
|
||||
FirJvmSessionFactory.createLibrarySession(
|
||||
Name.identifier(moduleName),
|
||||
sessionProvider,
|
||||
libraryList.moduleDataProvider,
|
||||
projectEnvironment,
|
||||
scope,
|
||||
projectEnvironment.getPackagePartProvider(librariesScope),
|
||||
configuration.languageVersionSettings,
|
||||
registerExtraComponents = {},
|
||||
)
|
||||
return libraryList
|
||||
}
|
||||
|
||||
|
||||
+7
-33
@@ -43,8 +43,6 @@ import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.config.*
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
||||
import org.jetbrains.kotlin.fir.BinaryModuleData
|
||||
import org.jetbrains.kotlin.fir.DependencyListForCliModule
|
||||
import org.jetbrains.kotlin.fir.FirModuleDataImpl
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
|
||||
@@ -338,7 +336,13 @@ fun compileModuleToAnalyzedFir(
|
||||
val sessionProvider = FirProjectSessionProvider()
|
||||
val moduleName = input.targetId.name
|
||||
|
||||
val libraryList = createLibraryListAndSession(moduleName, input.configuration, projectEnvironment, librariesScope, sessionProvider)
|
||||
val libraryList = createFirLibraryListAndSession(
|
||||
moduleName, input.configuration, projectEnvironment,
|
||||
scope = projectEnvironment.getSearchScopeForProjectLibraries(),
|
||||
librariesScope = librariesScope,
|
||||
friendPaths = emptyList(),
|
||||
sessionProvider
|
||||
)
|
||||
|
||||
val commonModuleData = runIf(isMppEnabled) {
|
||||
FirModuleDataImpl(
|
||||
@@ -409,36 +413,6 @@ fun compileModuleToAnalyzedFir(
|
||||
return FirResult(platformOutput, commonOutput)
|
||||
}
|
||||
|
||||
fun createLibraryListAndSession(
|
||||
moduleName: String,
|
||||
configuration: CompilerConfiguration,
|
||||
projectEnvironment: AbstractProjectEnvironment,
|
||||
librariesScope: AbstractProjectFileSearchScope,
|
||||
sessionProvider: FirProjectSessionProvider
|
||||
): DependencyListForCliModule {
|
||||
val binaryModuleData = BinaryModuleData.initialize(
|
||||
Name.identifier(moduleName),
|
||||
JvmPlatforms.unspecifiedJvmPlatform,
|
||||
JvmPlatformAnalyzerServices
|
||||
)
|
||||
val libraryList = DependencyListForCliModule.build(binaryModuleData) {
|
||||
dependencies(configuration.jvmClasspathRoots.map { it.toPath() })
|
||||
dependencies(configuration.jvmModularRoots.map { it.toPath() })
|
||||
friendDependencies(configuration[JVMConfigurationKeys.FRIEND_PATHS] ?: emptyList())
|
||||
}
|
||||
FirJvmSessionFactory.createLibrarySession(
|
||||
Name.identifier(moduleName),
|
||||
sessionProvider,
|
||||
libraryList.moduleDataProvider,
|
||||
projectEnvironment,
|
||||
projectEnvironment.getSearchScopeForProjectLibraries(),
|
||||
projectEnvironment.getPackagePartProvider(librariesScope),
|
||||
configuration.languageVersionSettings,
|
||||
registerExtraComponents = {},
|
||||
)
|
||||
return libraryList
|
||||
}
|
||||
|
||||
private fun buildResolveAndCheckFir(
|
||||
session: FirSession,
|
||||
ktFiles: Collection<KtSourceFile>,
|
||||
|
||||
Reference in New Issue
Block a user