Add appropriate script extension to the source name, if not provided
#KT-31704 fixed
This commit is contained in:
+20
@@ -27,7 +27,9 @@ import kotlin.script.experimental.host.BasicScriptingHost
|
|||||||
import kotlin.script.experimental.host.FileBasedScriptSource
|
import kotlin.script.experimental.host.FileBasedScriptSource
|
||||||
import kotlin.script.experimental.host.toScriptSource
|
import kotlin.script.experimental.host.toScriptSource
|
||||||
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
|
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
|
||||||
|
import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
|
||||||
import kotlin.script.experimental.jvm.impl.KJvmCompiledScript
|
import kotlin.script.experimental.jvm.impl.KJvmCompiledScript
|
||||||
|
import kotlin.script.experimental.jvm.jvm
|
||||||
import kotlin.script.experimental.jvm.updateClasspath
|
import kotlin.script.experimental.jvm.updateClasspath
|
||||||
import kotlin.script.experimental.jvm.util.KotlinJars
|
import kotlin.script.experimental.jvm.util.KotlinJars
|
||||||
import kotlin.script.experimental.jvm.util.classpathFromClass
|
import kotlin.script.experimental.jvm.util.classpathFromClass
|
||||||
@@ -54,6 +56,24 @@ class ScriptingHostTest : TestCase() {
|
|||||||
Assert.assertEquals(greeting, output2)
|
Assert.assertEquals(greeting, output2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testSourceWithName() {
|
||||||
|
val greeting = "Hello from script!"
|
||||||
|
val output = captureOut {
|
||||||
|
val basicJvmScriptingHost = BasicJvmScriptingHost()
|
||||||
|
basicJvmScriptingHost.eval(
|
||||||
|
"println(\"$greeting\")".toScriptSource("name"),
|
||||||
|
createJvmCompilationConfigurationFromTemplate<SimpleScript>(basicJvmScriptingHost.hostConfiguration) {
|
||||||
|
jvm {
|
||||||
|
dependenciesFromCurrentContext(wholeClasspath = true)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
createJvmEvaluationConfigurationFromTemplate<SimpleScript>(basicJvmScriptingHost.hostConfiguration)
|
||||||
|
).throwOnFailure()
|
||||||
|
}
|
||||||
|
Assert.assertEquals(greeting, output)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testValueResult() {
|
fun testValueResult() {
|
||||||
val resVal = evalScriptWithResult("42") as ResultValue.Value
|
val resVal = evalScriptWithResult("42") as ResultValue.Value
|
||||||
|
|||||||
+2
-1
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
|||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
|
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
|
||||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||||
|
import org.jetbrains.kotlin.scripting.withCorrectExtension
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
@@ -290,7 +291,7 @@ fun SourceCode.getVirtualFile(definition: ScriptDefinition): VirtualFile {
|
|||||||
val vFile = LocalFileSystem.getInstance().findFileByIoFile(file)
|
val vFile = LocalFileSystem.getInstance().findFileByIoFile(file)
|
||||||
if (vFile != null) return vFile
|
if (vFile != null) return vFile
|
||||||
}
|
}
|
||||||
val scriptName = name ?: "script.${definition.fileExtension}"
|
val scriptName = withCorrectExtension(name ?: "script", definition.fileExtension)
|
||||||
val scriptPath = when (this) {
|
val scriptPath = when (this) {
|
||||||
is FileScriptSource -> file.path
|
is FileScriptSource -> file.path
|
||||||
is ExternalSourceCode -> externalLocation.toString()
|
is ExternalSourceCode -> externalLocation.toString()
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.scripting
|
||||||
|
|
||||||
|
import kotlin.script.experimental.api.ScriptCompilationConfiguration
|
||||||
|
import kotlin.script.experimental.api.SourceCode
|
||||||
|
import kotlin.script.experimental.api.fileExtension
|
||||||
|
|
||||||
|
fun SourceCode.scriptFileName(
|
||||||
|
mainScript: SourceCode,
|
||||||
|
scriptCompilationConfiguration: ScriptCompilationConfiguration
|
||||||
|
): String {
|
||||||
|
val mainExtension = scriptCompilationConfiguration[ScriptCompilationConfiguration.fileExtension]
|
||||||
|
return when {
|
||||||
|
name != null -> withCorrectExtension(name!!, mainExtension)
|
||||||
|
mainScript == this -> withCorrectExtension("script", mainExtension)
|
||||||
|
else -> throw Exception("Unexpected script without name: $this")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun withCorrectExtension(name: String, mainExtension: String?): String =
|
||||||
|
// TODO: consider checking for all registered extensions
|
||||||
|
if ((mainExtension != null && name.endsWith(".$mainExtension")) || name.endsWith(".kts")) name else "$name.${mainExtension ?: "kts"}"
|
||||||
|
|
||||||
+1
-10
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.psi.KtScript
|
|||||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||||
import org.jetbrains.kotlin.scripting.compiler.plugin.dependencies.ScriptsCompilationDependencies
|
import org.jetbrains.kotlin.scripting.compiler.plugin.dependencies.ScriptsCompilationDependencies
|
||||||
import org.jetbrains.kotlin.scripting.resolve.ScriptLightVirtualFile
|
import org.jetbrains.kotlin.scripting.resolve.ScriptLightVirtualFile
|
||||||
|
import org.jetbrains.kotlin.scripting.scriptFileName
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.script.experimental.api.*
|
import kotlin.script.experimental.api.*
|
||||||
@@ -32,16 +33,6 @@ internal fun makeCompiledModule(generationState: GenerationState) =
|
|||||||
.associateTo(sortedMapOf<String, ByteArray>()) { it.relativePath to it.asByteArray() }
|
.associateTo(sortedMapOf<String, ByteArray>()) { it.relativePath to it.asByteArray() }
|
||||||
)
|
)
|
||||||
|
|
||||||
internal fun SourceCode.scriptFileName(
|
|
||||||
mainScript: SourceCode,
|
|
||||||
scriptCompilationConfiguration: ScriptCompilationConfiguration
|
|
||||||
): String =
|
|
||||||
when {
|
|
||||||
name != null -> name!!
|
|
||||||
mainScript == this -> "script.${scriptCompilationConfiguration[ScriptCompilationConfiguration.fileExtension]}"
|
|
||||||
else -> throw Exception("Unexpected script without name: $this")
|
|
||||||
}
|
|
||||||
|
|
||||||
internal inline fun <T> withMessageCollectorAndDisposable(
|
internal inline fun <T> withMessageCollectorAndDisposable(
|
||||||
script: SourceCode? = null,
|
script: SourceCode? = null,
|
||||||
parentMessageCollector: MessageCollector? = null,
|
parentMessageCollector: MessageCollector? = null,
|
||||||
|
|||||||
Reference in New Issue
Block a user