KT-60171 K2-scripting: CLI specific providers are used in IDE context
^KT-60171 fixed Merge-request: KT-MR-10987 Merged-by: Andrei Klunnyi <andrei.klunnyi@jetbrains.com>
This commit is contained in:
committed by
Space Team
parent
19ccb23088
commit
527d20c7be
+9
-1
@@ -5,11 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions
|
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.fir.extensions.FirExtensionRegistrar
|
||||||
import org.jetbrains.kotlin.scripting.compiler.plugin.services.FirScriptConfiguratorExtensionImpl
|
import org.jetbrains.kotlin.scripting.compiler.plugin.services.FirScriptConfiguratorExtensionImpl
|
||||||
import org.jetbrains.kotlin.scripting.compiler.plugin.services.FirScriptDefinitionProviderService
|
import org.jetbrains.kotlin.scripting.compiler.plugin.services.FirScriptDefinitionProviderService
|
||||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
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.ScriptDefinitionsSource
|
||||||
|
import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
|
||||||
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
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].
|
* [org.jetbrains.kotlin.config.CompilerConfiguration] replaced with a pair of explicit [scriptDefinitionSources] and [scriptDefinitions].
|
||||||
*/
|
*/
|
||||||
internal class FirScriptingCompilerExtensionIdeRegistrar(
|
internal class FirScriptingCompilerExtensionIdeRegistrar(
|
||||||
|
private val project: Project,
|
||||||
private val hostConfiguration: ScriptingHostConfiguration,
|
private val hostConfiguration: ScriptingHostConfiguration,
|
||||||
private val scriptDefinitionSources: List<ScriptDefinitionsSource>,
|
private val scriptDefinitionSources: List<ScriptDefinitionsSource>,
|
||||||
private val scriptDefinitions: List<ScriptDefinition>
|
private val scriptDefinitions: List<ScriptDefinition>
|
||||||
@@ -27,7 +31,11 @@ internal class FirScriptingCompilerExtensionIdeRegistrar(
|
|||||||
val definitionSources = scriptDefinitionSources
|
val definitionSources = scriptDefinitionSources
|
||||||
val definitions = scriptDefinitions
|
val definitions = scriptDefinitions
|
||||||
if (definitionSources.isNotEmpty() || definitions.isNotEmpty()) {
|
if (definitionSources.isNotEmpty() || definitions.isNotEmpty()) {
|
||||||
+FirScriptDefinitionProviderService.getFactory(definitions, definitionSources)
|
+FirScriptDefinitionProviderService.getFactory(
|
||||||
|
definitions, definitionSources,
|
||||||
|
ScriptDefinitionProvider.getInstance(project),
|
||||||
|
ScriptDependenciesProvider.getInstance(project)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
+FirScriptConfiguratorExtensionImpl.getFactory(hostConfiguration)
|
+FirScriptConfiguratorExtensionImpl.getFactory(hostConfiguration)
|
||||||
|
|||||||
+1
@@ -128,6 +128,7 @@ internal abstract class LLFirAbstractSessionFactory(protected val project: Proje
|
|||||||
?: error("Cannot load script definition for ${module.file.virtualFilePath}")
|
?: error("Cannot load script definition for ${module.file.virtualFilePath}")
|
||||||
|
|
||||||
val extensionRegistrar = FirScriptingCompilerExtensionIdeRegistrar(
|
val extensionRegistrar = FirScriptingCompilerExtensionIdeRegistrar(
|
||||||
|
project,
|
||||||
hostConfiguration,
|
hostConfiguration,
|
||||||
scriptDefinitionSources = emptyList(),
|
scriptDefinitionSources = emptyList(),
|
||||||
scriptDefinitions = listOf(scriptDefinition)
|
scriptDefinitions = listOf(scriptDefinition)
|
||||||
|
|||||||
+17
-15
@@ -44,23 +44,25 @@ class FirScriptDefinitionProviderService(
|
|||||||
companion object {
|
companion object {
|
||||||
fun getFactory(
|
fun getFactory(
|
||||||
definitions: List<ScriptDefinition>,
|
definitions: List<ScriptDefinition>,
|
||||||
definitionSources: List<ScriptDefinitionsSource>
|
definitionSources: List<ScriptDefinitionsSource>,
|
||||||
|
definitionProvider: ScriptDefinitionProvider? = null,
|
||||||
|
configurationProvider: ScriptDependenciesProvider? = null
|
||||||
): Factory {
|
): Factory {
|
||||||
return Factory { session ->
|
val makeDefinitionsProvider = definitionProvider?.let { { it } }
|
||||||
FirScriptDefinitionProviderService(
|
?: {
|
||||||
session,
|
CliScriptDefinitionProvider().also {
|
||||||
makeDefaultDefinitionProvider = {
|
it.setScriptDefinitionsSources(definitionSources)
|
||||||
CliScriptDefinitionProvider().also {
|
it.setScriptDefinitions(definitions)
|
||||||
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 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) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user