diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt index 646dcd32e96..23f8d1808f6 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt @@ -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, diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/cliCompilerUtils.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/cliCompilerUtils.kt index 76ff72b6a75..7ac6c9dd41b 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/cliCompilerUtils.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/cliCompilerUtils.kt @@ -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, + 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 +} + diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt index 4cf2544ac86..2db7bf158b1 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt @@ -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, diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/ScriptJvmCompilerImpls.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/ScriptJvmCompilerImpls.kt index 870525835a8..c077fb22e35 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/ScriptJvmCompilerImpls.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/ScriptJvmCompilerImpls.kt @@ -31,8 +31,10 @@ import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider import org.jetbrains.kotlin.fir.pipeline.* +import org.jetbrains.kotlin.fir.session.FirJvmSessionFactory import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil import org.jetbrains.kotlin.modules.TargetId +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.CommonPlatforms import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.psi.KtFile @@ -50,8 +52,6 @@ import kotlin.script.experimental.jvm.JvmDependencyFromClassLoader import kotlin.script.experimental.jvm.compilationCache import kotlin.script.experimental.jvm.impl.KJvmCompiledScript import kotlin.script.experimental.jvm.jvm -import org.jetbrains.kotlin.fir.session.FirJvmSessionFactory -import org.jetbrains.kotlin.name.Name class ScriptJvmCompilerIsolated(val hostConfiguration: ScriptingHostConfiguration) : ScriptCompilerProxy { @@ -359,7 +359,15 @@ private fun doCompileWithK2( )?.also { (_, _, precompiledBinariesFileScope) -> precompiledBinariesFileScope?.let { librariesScope -= it } } - val libraryList = createLibraryListAndSession(targetId.name, kotlinCompilerConfiguration, projectEnvironment, librariesScope, sessionProvider) + val libraryList = createFirLibraryListAndSession( + targetId.name, + kotlinCompilerConfiguration, + projectEnvironment, + scope = projectEnvironment.getSearchScopeForProjectLibraries(), + librariesScope = librariesScope, + friendPaths = emptyList(), + sessionProvider + ) val moduleData = FirModuleDataImpl( Name.identifier(targetId.name), libraryList.regularDependencies,