Fix sequence of the script definitions search - explicit ones should be tried first

This commit is contained in:
Ilya Chernikov
2019-02-15 17:57:52 +01:00
parent 196e274929
commit 7c3bdde102
2 changed files with 19 additions and 9 deletions
@@ -10,12 +10,16 @@ import org.jetbrains.kotlin.script.ScriptDefinitionsSource
import org.jetbrains.kotlin.script.StandardScriptDefinition
import kotlin.concurrent.write
class CliScriptDefinitionProvider : LazyScriptDefinitionProvider() {
open class CliScriptDefinitionProvider : LazyScriptDefinitionProvider() {
private val definitionsFromSources: MutableList<Sequence<KotlinScriptDefinition>> = arrayListOf()
private val definitions: MutableList<KotlinScriptDefinition> = arrayListOf(StandardScriptDefinition)
private val definitions: MutableList<KotlinScriptDefinition> = arrayListOf()
private var hasStandardDefinition = true
override val currentDefinitions: Sequence<KotlinScriptDefinition> =
definitionsFromSources.asSequence().flatMap { it } + definitions.asSequence()
override val currentDefinitions: Sequence<KotlinScriptDefinition>
get() {
val base = definitions.asSequence() + definitionsFromSources.asSequence().flatMap { it }
return if (hasStandardDefinition) base + getDefaultScriptDefinition() else base
}
override fun getDefaultScriptDefinition(): KotlinScriptDefinition {
return StandardScriptDefinition
@@ -24,7 +28,9 @@ class CliScriptDefinitionProvider : LazyScriptDefinitionProvider() {
fun setScriptDefinitions(newDefinitions: List<KotlinScriptDefinition>) {
lock.write {
definitions.clear()
definitions.addAll(newDefinitions)
val (withoutStdDef, stdDef) = newDefinitions.partition { it != getDefaultScriptDefinition() }
definitions.addAll(withoutStdDef)
hasStandardDefinition = stdDef.isNotEmpty()
}
}