Provide a method to update script definitions after loading into IDE

also documenting ScriptDefinitionsProvider
This commit is contained in:
Ilya Chernikov
2020-05-14 14:51:54 +02:00
parent 4b032a14af
commit d92e4d28f5
3 changed files with 62 additions and 14 deletions
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.idea.core.script.loadDefinitionsFromTemplates
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsFromClasspathDiscoverySource
import kotlin.script.experimental.api.ScriptDiagnostic
import kotlin.script.experimental.api.ScriptEvaluationConfiguration
import kotlin.script.experimental.intellij.ScriptDefinitionsProvider
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
@@ -25,19 +26,28 @@ class BridgeScriptDefinitionsContributor(private val project: Project) : ScriptD
return extensions.asSequence().flatMap { provider ->
val explicitClasses = provider.getDefinitionClasses().toList()
val classPath = provider.getDefinitionsClassPath().toList()
val hostConfiguration = defaultJvmScriptingHostConfiguration
val baseHostConfiguration = defaultJvmScriptingHostConfiguration
// TODO: rewrite load and discovery to return kotlin.script.experimental.host.ScriptDefinition to avoid unnecessary conversions
val explicitDefinitions =
if (explicitClasses.isEmpty()) emptySequence()
else loadDefinitionsFromTemplates(explicitClasses, classPath, hostConfiguration).asSequence()
else loadDefinitionsFromTemplates(explicitClasses, classPath, baseHostConfiguration).asSequence()
val discoveredDefinitions =
if (provider.useDiscovery())
ScriptDefinitionsFromClasspathDiscoverySource(
classPath,
hostConfiguration,
baseHostConfiguration,
::loggingReporter
).definitions
else emptySequence()
explicitDefinitions + discoveredDefinitions
val loadedDefinitions = (explicitDefinitions + discoveredDefinitions).map {
kotlin.script.experimental.host.ScriptDefinition(
it.compilationConfiguration,
it.evaluationConfiguration ?: ScriptEvaluationConfiguration.Default
)
}.toList()
provider.provideDefinitions(baseHostConfiguration, loadedDefinitions).map {
ScriptDefinition.FromNewDefinition(baseHostConfiguration, it)
}.asSequence()
}
}
}