Change script definition lookup key from File to ScriptSource
to make it more generic and allow easier implementation fo the non-file based scripts.
This commit is contained in:
+5
-4
@@ -55,7 +55,9 @@ abstract class AbstractScriptEvaluationExtension : ScriptEvaluationExtension {
|
||||
if (messageCollector.hasErrors()) return ExitCode.COMPILATION_ERROR
|
||||
|
||||
val scriptFile = File(sourcePath)
|
||||
if (scriptFile.isDirectory || !scriptDefinitionProvider.isScript(scriptFile)) {
|
||||
val script = scriptFile.toScriptSource()
|
||||
|
||||
if (scriptFile.isDirectory || !scriptDefinitionProvider.isScript(script)) {
|
||||
val extensionHint =
|
||||
if (configuration.get(ScriptingConfigurationKeys.SCRIPT_DEFINITIONS)?.let { it.size == 1 && it.first().isDefault } == true) " (.kts)"
|
||||
else ""
|
||||
@@ -63,9 +65,7 @@ abstract class AbstractScriptEvaluationExtension : ScriptEvaluationExtension {
|
||||
return ExitCode.COMPILATION_ERROR
|
||||
}
|
||||
|
||||
val script = scriptFile.toScriptSource()
|
||||
|
||||
val definition = scriptDefinitionProvider.findDefinition(scriptFile) ?: scriptDefinitionProvider.getDefaultDefinition()
|
||||
val definition = scriptDefinitionProvider.findDefinition(script) ?: scriptDefinitionProvider.getDefaultDefinition()
|
||||
|
||||
val scriptArgs =
|
||||
if (arguments.freeArgs.isNotEmpty()) arguments.freeArgs.subList(1, arguments.freeArgs.size)
|
||||
@@ -134,3 +134,4 @@ private fun ResultValue.Error.renderError(stream: PrintStream) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
-10
@@ -9,12 +9,13 @@ import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptDefinitionProvider
|
||||
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsSource
|
||||
import org.junit.Assert
|
||||
import org.junit.Test
|
||||
import java.io.File
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
import kotlin.script.experimental.api.SourceCode
|
||||
import kotlin.script.experimental.host.toScriptSource
|
||||
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
|
||||
import kotlin.script.templates.standard.ScriptTemplateWithArgs
|
||||
|
||||
@@ -43,43 +44,44 @@ class ScriptProviderTest {
|
||||
|
||||
Assert.assertEquals(0, genDefCounter.get())
|
||||
|
||||
provider.isScript("a.kt").let {
|
||||
provider.isScript(File("a.kt").toScriptSource()).let {
|
||||
Assert.assertFalse(it)
|
||||
Assert.assertEquals(0, genDefCounter.get())
|
||||
}
|
||||
|
||||
provider.isScript("a.y.kts").let {
|
||||
provider.isScript(File("a.y.kts").toScriptSource()).let {
|
||||
Assert.assertTrue(it)
|
||||
Assert.assertEquals(1, genDefCounter.get())
|
||||
}
|
||||
|
||||
provider.isScript("a.x.kts").let {
|
||||
provider.isScript(File("a.x.kts").toScriptSource()).let {
|
||||
Assert.assertTrue(it)
|
||||
Assert.assertEquals(1, genDefCounter.get())
|
||||
Assert.assertEquals(1, shadedDef.matchCounter.get())
|
||||
}
|
||||
|
||||
provider.isScript("a.z.kts").let {
|
||||
provider.isScript(File("a.z.kts").toScriptSource()).let {
|
||||
Assert.assertTrue(it)
|
||||
Assert.assertEquals(2, genDefCounter.get())
|
||||
Assert.assertEquals(1, standardDef.matchCounter.get())
|
||||
}
|
||||
|
||||
provider.isScript("a.ktx").let {
|
||||
provider.isScript(File("a.ktx").toScriptSource()).let {
|
||||
Assert.assertFalse(it)
|
||||
Assert.assertEquals(2, genDefCounter.get())
|
||||
}
|
||||
}
|
||||
|
||||
private fun ScriptDefinitionProvider.isScript(fileName: String) = isScript(File(fileName))
|
||||
}
|
||||
|
||||
private open class FakeScriptDefinition(val suffix: String = ".kts") :
|
||||
ScriptDefinition.FromLegacy(defaultJvmScriptingHostConfiguration, KotlinScriptDefinition(ScriptTemplateWithArgs::class))
|
||||
{
|
||||
val matchCounter = AtomicInteger()
|
||||
override fun isScript(file: File): Boolean = file.name.endsWith(suffix).also {
|
||||
if (it) matchCounter.incrementAndGet()
|
||||
override fun isScript(script: SourceCode): Boolean {
|
||||
val path =script.locationId ?: return false
|
||||
return path.endsWith(suffix).also {
|
||||
if (it) matchCounter.incrementAndGet()
|
||||
}
|
||||
}
|
||||
|
||||
override val isDefault: Boolean
|
||||
|
||||
Reference in New Issue
Block a user