Core interfaces and data structures for Kotlin script compilation, evaluation, and IDE integration
npx @tessl/cli install tessl/maven-org-jetbrains-kotlin--kotlin-scripting-common@2.2.0Kotlin Scripting Common provides the foundational API for Kotlin's experimental scripting infrastructure. It contains core interfaces and data structures used across the entire Kotlin scripting ecosystem, including source code representation, script compilation configuration, evaluation context management, REPL functionality, comprehensive error handling, and IDE integration support.
implementation("org.jetbrains.kotlin:kotlin-scripting-common:2.2.0")import kotlin.script.experimental.annotations.KotlinScript
import kotlin.script.experimental.api.*
import kotlin.script.experimental.host.*import kotlin.script.experimental.api.*
import kotlin.script.experimental.host.*
// Create a simple script source
val source = "println(\"Hello, Kotlin Scripting!\")".toScriptSource()
// Create script compilation configuration
val compilationConfig = ScriptCompilationConfiguration {
// Configuration options here
}
// Create script evaluation configuration
val evaluationConfig = ScriptEvaluationConfiguration {
// Evaluation options here
}Kotlin Scripting Common is organized around several key components:
Script definition system using annotations to configure script compilation and evaluation behavior.
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class KotlinScript(
val displayName: String = "",
val fileExtension: String = "kts",
val filePathPattern: String = "",
val compilationConfiguration: KClass<out ScriptCompilationConfiguration> = ScriptCompilationConfiguration::class,
val evaluationConfiguration: KClass<out ScriptEvaluationConfiguration> = ScriptEvaluationConfiguration::class,
val hostConfiguration: KClass<out ScriptingHostConfiguration> = ScriptingHostConfiguration::class
)Core interfaces for representing script source code with location information and external source support.
interface SourceCode {
val text: String
val name: String?
val locationId: String?
}
interface ExternalSourceCode : SourceCode {
val externalLocation: URL
}Complete compilation system with configuration, compiler interfaces, and compiled script representation.
interface ScriptCompiler {
suspend operator fun invoke(
script: SourceCode,
configuration: ScriptCompilationConfiguration
): ResultWithDiagnostics<CompiledScript>
}
interface CompiledScript {
val sourceLocationId: String?
val compilationConfiguration: ScriptCompilationConfiguration
val resultField: Pair<String, KotlinType>?
suspend fun getClass(scriptEvaluationConfiguration: ScriptEvaluationConfiguration?): ResultWithDiagnostics<KClass<*>>
}Evaluation system for executing compiled scripts with configuration and result handling.
interface ScriptEvaluator {
suspend operator fun invoke(
compiledScript: CompiledScript,
scriptEvaluationConfiguration: ScriptEvaluationConfiguration = ScriptEvaluationConfiguration.Default
): ResultWithDiagnostics<EvaluationResult>
}
sealed class ResultValue(val scriptClass: KClass<*>? = null, val scriptInstance: Any? = null) {
class Value(val name: String, val value: Any?, val type: String, scriptClass: KClass<*>?, scriptInstance: Any?) : ResultValue(scriptClass, scriptInstance)
class Unit(scriptClass: KClass<*>, scriptInstance: Any?) : ResultValue(scriptClass, scriptInstance)
class Error(val error: Throwable, val wrappingException: Throwable? = null, scriptClass: KClass<*>? = null) : ResultValue(scriptClass)
object NotEvaluated : ResultValue()
}Specialized interfaces for interactive Read-Eval-Print Loop functionality with snippet management and analysis.
interface ReplCompiler<CompiledSnippetT : Any> {
suspend fun compile(
snippet: SourceCode,
configuration: ScriptCompilationConfiguration
): ResultWithDiagnostics<CompiledSnippetT>
}
interface ReplEvaluator<CompiledSnippetT : Any, EvaluatedSnippetT : Any> {
suspend fun eval(
snippet: CompiledSnippetT,
configuration: ScriptEvaluationConfiguration
): ResultWithDiagnostics<EvaluatedSnippetT>
}Comprehensive error handling with diagnostic reporting and result wrapper types.
sealed class ResultWithDiagnostics<out R> {
abstract val reports: List<ScriptDiagnostic>
data class Success<out R>(
val value: R,
override val reports: List<ScriptDiagnostic> = emptyList()
) : ResultWithDiagnostics<R>()
data class Failure(
override val reports: List<ScriptDiagnostic>
) : ResultWithDiagnostics<Nothing>()
}
data class ScriptDiagnostic(
val code: Int,
val message: String,
val severity: Severity = Severity.ERROR,
val sourcePath: String? = null,
val location: SourceCode.Location? = null,
val exception: Throwable? = null
) {
enum class Severity { DEBUG, INFO, WARNING, ERROR, FATAL }
}Host system utilities for integrating Kotlin scripting into applications with script source implementations.
abstract class BasicScriptingHost {
open suspend fun runInCoroutineContext(body: suspend () -> Unit) = body()
suspend fun eval(
script: SourceCode,
compilationConfiguration: ScriptCompilationConfiguration,
evaluationConfiguration: ScriptEvaluationConfiguration? = null
): ResultWithDiagnostics<EvaluationResult>
}
data class ScriptDefinition(
val compilationConfiguration: ScriptCompilationConfiguration,
val evaluationConfiguration: ScriptEvaluationConfiguration
)Type representation and handling for Kotlin types within the scripting system.
class KotlinType private constructor(
val typeName: String,
@Transient val fromClass: KClass<*>?,
val isNullable: Boolean
) {
@JvmOverloads
constructor(qualifiedTypeName: String, isNullable: Boolean = false)
@JvmOverloads
constructor(kclass: KClass<*>, isNullable: Boolean = false)
constructor(type: KType)
fun withNullability(isNullable: Boolean): KotlinType
}abstract class PropertiesCollection {
abstract class Key<T>(val name: String)
class TransientKey<T>(name: String) : Key<T>(name)
class CopiedKey<T>(name: String) : Key<T>(name)
class Builder : PropertiesCollection()
}