Add appropriate script extension to the source name, if not provided

#KT-31704 fixed
This commit is contained in:
Ilya Chernikov
2019-09-05 17:30:17 +02:00
parent 92778cc5b5
commit 45f5c42a53
4 changed files with 50 additions and 11 deletions
@@ -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"}"