diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/errorHandling.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/errorHandling.kt index 904af5e5604..3bf2ea3479a 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/errorHandling.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/errorHandling.kt @@ -10,7 +10,7 @@ package kotlin.script.experimental.api data class ScriptDiagnostic( val message: String, val severity: Severity = Severity.ERROR, - val location: ScriptSource.Location? = null, + val location: SourceCode.Location? = null, val exception: Throwable? = null ) { enum class Severity { FATAL, ERROR, WARNING, INFO, DEBUG } @@ -56,10 +56,10 @@ operator fun List.plus(res: ResultWithDiagnostics): Res fun R.asSuccess(reports: List = listOf()): ResultWithDiagnostics.Success = ResultWithDiagnostics.Success(this, reports) -fun Throwable.asDiagnostics(customMessage: String? = null, location: ScriptSource.Location? = null): ScriptDiagnostic = +fun Throwable.asDiagnostics(customMessage: String? = null, location: SourceCode.Location? = null): ScriptDiagnostic = ScriptDiagnostic(customMessage ?: message ?: "$this", ScriptDiagnostic.Severity.ERROR, location, this) -fun String.asErrorDiagnostics(location: ScriptSource.Location? = null): ScriptDiagnostic = +fun String.asErrorDiagnostics(location: SourceCode.Location? = null): ScriptDiagnostic = ScriptDiagnostic(this, ScriptDiagnostic.Severity.ERROR, location) fun ResultWithDiagnostics.resultOrNull(): R? = when (this) { diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt index 91297e4f959..cb597239b0d 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt @@ -120,7 +120,7 @@ class RefineConfigurationOnSectionsData( interface ScriptCompiler { suspend operator fun invoke( - script: ScriptSource, + script: SourceCode, scriptCompilationConfiguration: ScriptCompilationConfiguration ): ResultWithDiagnostics> } diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptData.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptData.kt index d1bc185b40d..8c7426501ef 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptData.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptData.kt @@ -10,16 +10,19 @@ package kotlin.script.experimental.api import java.net.URL import kotlin.script.experimental.util.PropertiesCollection -interface ScriptSource { - val location: URL? - val text: String? +interface SourceCode { + val text: String data class Position(val line: Int, val col: Int, val absolutePos: Int? = null) data class Range(val start: Position, val end: Position) data class Location(val start: Position, val end: Position? = null) } -data class ScriptSourceNamedFragment(val name: String?, val range: ScriptSource.Range) +interface ExternalSourceCode : SourceCode { + val externalLocation: URL +} + +data class ScriptSourceNamedFragment(val name: String?, val range: SourceCode.Range) enum class ScriptBodyTarget { Constructor, @@ -53,7 +56,7 @@ val ScriptCollectedDataKeys.foundAnnotations by PropertiesCollection.key>() class ScriptConfigurationRefinementContext( - val source: ScriptSource, + val script: SourceCode, val compilationConfiguration: ScriptCompilationConfiguration, val collectedData: ScriptCollectedData? = null ) diff --git a/libraries/scripting/common/src/kotlin/script/experimental/host/BasicScriptingHost.kt b/libraries/scripting/common/src/kotlin/script/experimental/host/BasicScriptingHost.kt index 458d563f998..522f6313ac8 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/host/BasicScriptingHost.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/host/BasicScriptingHost.kt @@ -29,7 +29,7 @@ abstract class BasicScriptingHost( open fun runInCoroutineContext(block: suspend CoroutineScope.() -> T): T = runBlocking { block() } open fun eval( - script: ScriptSource, + script: SourceCode, scriptCompilationConfiguration: ScriptCompilationConfiguration, configuration: ScriptEvaluationConfiguration? ): ResultWithDiagnostics = diff --git a/libraries/scripting/common/src/kotlin/script/experimental/host/scriptHostUtil.kt b/libraries/scripting/common/src/kotlin/script/experimental/host/scriptHostUtil.kt index 13cde9f8ed6..a5e29e2e27d 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/host/scriptHostUtil.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/host/scriptHostUtil.kt @@ -9,15 +9,8 @@ import java.io.File import java.net.URL import kotlin.script.experimental.api.* -fun ScriptSource.getScriptText(): String = when { - text != null -> text!! - location != null -> - location!!.openStream().bufferedReader().readText() - else -> throw RuntimeException("unable to get text from null script") -} - -fun getMergedScriptText(script: ScriptSource, configuration: ScriptCompilationConfiguration?): String { - val originalScriptText = script.getScriptText() +fun getMergedScriptText(script: SourceCode, configuration: ScriptCompilationConfiguration?): String { + val originalScriptText = script.text val sourceFragments = configuration?.get(ScriptCompilationConfiguration.sourceFragments) return if (sourceFragments == null || sourceFragments.isEmpty()) { originalScriptText @@ -45,16 +38,15 @@ fun getMergedScriptText(script: ScriptSource, configuration: ScriptCompilationCo } } -open class FileScriptSource(val file: File) : ScriptSource { - override val location: URL? get() = file.toURI().toURL() - override val text: String? get() = null +open class FileScriptSource(val file: File) : ExternalSourceCode { + override val externalLocation: URL get() = file.toURI().toURL() + override val text: String by lazy { file.readText() } } -fun File.toScriptSource(): ScriptSource = FileScriptSource(this) +fun File.toScriptSource(): SourceCode = FileScriptSource(this) -open class StringScriptSource(val source: String) : ScriptSource { - override val location: URL? get() = null - override val text: String? get() = source +open class StringScriptSource(val source: String) : SourceCode { + override val text: String get() = source } -fun String.toScriptSource(): ScriptSource = StringScriptSource(this) +fun String.toScriptSource(): SourceCode = StringScriptSource(this) diff --git a/libraries/scripting/common/src/kotlin/script/experimental/repl/replData.kt b/libraries/scripting/common/src/kotlin/script/experimental/repl/replData.kt index 9295eebf7a4..17404016d42 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/repl/replData.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/repl/replData.kt @@ -5,7 +5,7 @@ package kotlin.script.experimental.repl -import kotlin.script.experimental.api.ScriptSource +import kotlin.script.experimental.api.SourceCode -interface ReplSnippetSource : ScriptSource, ReplSnippetId +interface ReplSnippetSource : SourceCode, ReplSnippetId diff --git a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJVMCompilerImpl.kt b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJVMCompilerImpl.kt index 2f85bb7ef71..19b737409d9 100644 --- a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJVMCompilerImpl.kt +++ b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJVMCompilerImpl.kt @@ -78,7 +78,7 @@ class KJvmCompiledScript( class KJvmCompilerImpl(val hostConfiguration: ScriptingHostConfiguration) : KJvmCompilerProxy { override fun compile( - script: ScriptSource, + script: SourceCode, scriptCompilationConfiguration: ScriptCompilationConfiguration ): ResultWithDiagnostics> { val messageCollector = ScriptDiagnosticsMessageCollector() @@ -229,7 +229,7 @@ class ScriptDiagnosticsMessageCollector : MessageCollector { } if (mappedSeverity != null) { val mappedLocation = location?.let { - ScriptSource.Location(ScriptSource.Position(it.line, it.column)) + SourceCode.Location(SourceCode.Position(it.line, it.column)) } _diagnostics.add(ScriptDiagnostic(message, mappedSeverity, mappedLocation)) } diff --git a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptCompilation.kt b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptCompilation.kt index b6e9dc44e40..ec6f82e9988 100644 --- a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptCompilation.kt +++ b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptCompilation.kt @@ -14,16 +14,16 @@ import kotlin.script.experimental.jvmhost.impl.KJvmCompilerImpl import kotlin.script.experimental.jvmhost.impl.withDefaults interface CompiledJvmScriptsCache { - fun get(script: ScriptSource, scriptCompilationConfiguration: ScriptCompilationConfiguration): CompiledScript<*>? - fun store(compiledScript: CompiledScript<*>, script: ScriptSource, scriptCompilationConfiguration: ScriptCompilationConfiguration) + fun get(script: SourceCode, scriptCompilationConfiguration: ScriptCompilationConfiguration): CompiledScript<*>? + fun store(compiledScript: CompiledScript<*>, script: SourceCode, scriptCompilationConfiguration: ScriptCompilationConfiguration) object NoCache : CompiledJvmScriptsCache { override fun get( - script: ScriptSource, scriptCompilationConfiguration: ScriptCompilationConfiguration + script: SourceCode, scriptCompilationConfiguration: ScriptCompilationConfiguration ): CompiledScript<*>? = null override fun store( - compiledScript: CompiledScript<*>, script: ScriptSource, scriptCompilationConfiguration: ScriptCompilationConfiguration + compiledScript: CompiledScript<*>, script: SourceCode, scriptCompilationConfiguration: ScriptCompilationConfiguration ) { } } @@ -36,7 +36,7 @@ open class JvmScriptCompiler( ) : ScriptCompiler { override suspend operator fun invoke( - script: ScriptSource, + script: SourceCode, scriptCompilationConfiguration: ScriptCompilationConfiguration ): ResultWithDiagnostics> { val refineConfigurationFn = scriptCompilationConfiguration[ScriptCompilationConfiguration.refineConfigurationBeforeParsing] @@ -61,7 +61,7 @@ open class JvmScriptCompiler( interface KJvmCompilerProxy { fun compile( - script: ScriptSource, + script: SourceCode, scriptCompilationConfiguration: ScriptCompilationConfiguration ): ResultWithDiagnostics> } diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/compat/diagnosticsUtil.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/compat/diagnosticsUtil.kt index f427d5ab3d1..059f6a5dbce 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/compat/diagnosticsUtil.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/compat/diagnosticsUtil.kt @@ -9,7 +9,7 @@ package kotlin.script.experimental.jvm.compat import kotlin.script.dependencies.ScriptContents import kotlin.script.dependencies.ScriptDependenciesResolver import kotlin.script.experimental.api.ScriptDiagnostic -import kotlin.script.experimental.api.ScriptSource +import kotlin.script.experimental.api.SourceCode import kotlin.script.experimental.dependencies.ScriptReport fun mapLegacyDiagnosticSeverity(severity: ScriptDependenciesResolver.ReportSeverity): ScriptDiagnostic.Severity = when (severity) { @@ -28,8 +28,8 @@ fun mapToLegacyScriptReportSeverity(severity: ScriptDiagnostic.Severity): Script ScriptDiagnostic.Severity.DEBUG -> ScriptReport.Severity.DEBUG } -fun mapLegacyScriptPosition(pos: ScriptContents.Position?): ScriptSource.Location? = - pos?.let { ScriptSource.Location(ScriptSource.Position(pos.line, pos.col)) } +fun mapLegacyScriptPosition(pos: ScriptContents.Position?): SourceCode.Location? = + pos?.let { SourceCode.Location(SourceCode.Position(pos.line, pos.col)) } -fun mapToLegacyScriptReportPosition(pos: ScriptSource.Location?): ScriptReport.Position? = +fun mapToLegacyScriptReportPosition(pos: SourceCode.Location?): ScriptReport.Position? = pos?.let { ScriptReport.Position(pos.start.line, pos.start.col) } diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt index 62aba7f394b..77cacb34e5e 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt @@ -84,7 +84,7 @@ class BridgeDependenciesResolver( internal fun List.mapScriptReportsToDiagnostics() = map { ScriptReport(it.message, mapToLegacyScriptReportSeverity(it.severity), mapToLegacyScriptReportPosition(it.location)) } -internal fun ScriptContents.toScriptSource(): ScriptSource = when { +internal fun ScriptContents.toScriptSource(): SourceCode = when { text != null -> text!!.toString().toScriptSource() file != null -> file!!.toScriptSource() else -> throw IllegalArgumentException("Unable to convert script contents $this into script source")