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.toScriptSource
|
||||
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
|
||||
import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
|
||||
import kotlin.script.experimental.jvm.impl.KJvmCompiledScript
|
||||
import kotlin.script.experimental.jvm.jvm
|
||||
import kotlin.script.experimental.jvm.updateClasspath
|
||||
import kotlin.script.experimental.jvm.util.KotlinJars
|
||||
import kotlin.script.experimental.jvm.util.classpathFromClass
|
||||
@@ -54,6 +56,24 @@ class ScriptingHostTest : TestCase() {
|
||||
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
|
||||
fun testValueResult() {
|
||||
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.scripting.definitions.KotlinScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.withCorrectExtension
|
||||
import java.io.File
|
||||
import java.net.URL
|
||||
import kotlin.reflect.KClass
|
||||
@@ -290,7 +291,7 @@ fun SourceCode.getVirtualFile(definition: ScriptDefinition): VirtualFile {
|
||||
val vFile = LocalFileSystem.getInstance().findFileByIoFile(file)
|
||||
if (vFile != null) return vFile
|
||||
}
|
||||
val scriptName = name ?: "script.${definition.fileExtension}"
|
||||
val scriptName = withCorrectExtension(name ?: "script", definition.fileExtension)
|
||||
val scriptPath = when (this) {
|
||||
is FileScriptSource -> file.path
|
||||
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.scripting.compiler.plugin.dependencies.ScriptsCompilationDependencies
|
||||
import org.jetbrains.kotlin.scripting.resolve.ScriptLightVirtualFile
|
||||
import org.jetbrains.kotlin.scripting.scriptFileName
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
import java.util.*
|
||||
import kotlin.script.experimental.api.*
|
||||
@@ -32,16 +33,6 @@ internal fun makeCompiledModule(generationState: GenerationState) =
|
||||
.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(
|
||||
script: SourceCode? = null,
|
||||
parentMessageCollector: MessageCollector? = null,
|
||||
|
||||
Reference in New Issue
Block a user