diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/FirScriptingCompilerExtensionIdeRegistrar.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/FirScriptingCompilerExtensionIdeRegistrar.kt index cd0b93f5dc2..c2f9dc2142b 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/FirScriptingCompilerExtensionIdeRegistrar.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/FirScriptingCompilerExtensionIdeRegistrar.kt @@ -5,11 +5,14 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions +import com.intellij.openapi.project.Project import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.scripting.compiler.plugin.services.FirScriptConfiguratorExtensionImpl import org.jetbrains.kotlin.scripting.compiler.plugin.services.FirScriptDefinitionProviderService import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition +import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsSource +import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider import kotlin.script.experimental.host.ScriptingHostConfiguration /** @@ -18,6 +21,7 @@ import kotlin.script.experimental.host.ScriptingHostConfiguration * [org.jetbrains.kotlin.config.CompilerConfiguration] replaced with a pair of explicit [scriptDefinitionSources] and [scriptDefinitions]. */ internal class FirScriptingCompilerExtensionIdeRegistrar( + private val project: Project, private val hostConfiguration: ScriptingHostConfiguration, private val scriptDefinitionSources: List, private val scriptDefinitions: List @@ -27,7 +31,11 @@ internal class FirScriptingCompilerExtensionIdeRegistrar( val definitionSources = scriptDefinitionSources val definitions = scriptDefinitions if (definitionSources.isNotEmpty() || definitions.isNotEmpty()) { - +FirScriptDefinitionProviderService.getFactory(definitions, definitionSources) + +FirScriptDefinitionProviderService.getFactory( + definitions, definitionSources, + ScriptDefinitionProvider.getInstance(project), + ScriptDependenciesProvider.getInstance(project) + ) } +FirScriptConfiguratorExtensionImpl.getFactory(hostConfiguration) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirAbstractSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirAbstractSessionFactory.kt index 5dae10a2a8f..152633a4231 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirAbstractSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirAbstractSessionFactory.kt @@ -128,6 +128,7 @@ internal abstract class LLFirAbstractSessionFactory(protected val project: Proje ?: error("Cannot load script definition for ${module.file.virtualFilePath}") val extensionRegistrar = FirScriptingCompilerExtensionIdeRegistrar( + project, hostConfiguration, scriptDefinitionSources = emptyList(), scriptDefinitions = listOf(scriptDefinition) diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/services/FirScriptDefinitionProviderService.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/services/FirScriptDefinitionProviderService.kt index d96d64251d5..614c1362c40 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/services/FirScriptDefinitionProviderService.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/services/FirScriptDefinitionProviderService.kt @@ -44,23 +44,25 @@ class FirScriptDefinitionProviderService( companion object { fun getFactory( definitions: List, - definitionSources: List + definitionSources: List, + definitionProvider: ScriptDefinitionProvider? = null, + configurationProvider: ScriptDependenciesProvider? = null ): Factory { - return Factory { session -> - FirScriptDefinitionProviderService( - session, - makeDefaultDefinitionProvider = { - CliScriptDefinitionProvider().also { - it.setScriptDefinitionsSources(definitionSources) - it.setScriptDefinitions(definitions) - } - }, - makeDefaultConfigurationProvider = { - // TODO: check if memory can leak in MockProject (probably not too important, since currently the providers are set externaly in important cases) - CliScriptDependenciesProvider(MockProject(null, Disposer.newDisposable())) + val makeDefinitionsProvider = definitionProvider?.let { { it } } + ?: { + CliScriptDefinitionProvider().also { + it.setScriptDefinitionsSources(definitionSources) + it.setScriptDefinitions(definitions) } - ) - } + } + + val makeConfigurationProvider = configurationProvider?.let { { it } } + ?: { + // TODO: check if memory can leak in MockProject (probably not too important, since currently the providers are set externaly in important cases) + CliScriptDependenciesProvider(MockProject(null, Disposer.newDisposable())) + } + + return Factory { session -> FirScriptDefinitionProviderService(session, makeDefinitionsProvider, makeConfigurationProvider) } } } }