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
|
||||
|
||||
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<ScriptDefinitionsSource>,
|
||||
private val scriptDefinitions: List<ScriptDefinition>
|
||||
@@ -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)
|
||||
|
||||
+1
@@ -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)
|
||||
|
||||
+17
-15
@@ -44,23 +44,25 @@ class FirScriptDefinitionProviderService(
|
||||
companion object {
|
||||
fun getFactory(
|
||||
definitions: List<ScriptDefinition>,
|
||||
definitionSources: List<ScriptDefinitionsSource>
|
||||
definitionSources: List<ScriptDefinitionsSource>,
|
||||
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) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user