Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example
- import kotlin.script.experimental.annotations.KotlinScript
- import kotlin.script.experimental.api.EvaluationResult
- import kotlin.script.experimental.api.ResultValue
- import kotlin.script.experimental.api.ResultWithDiagnostics
- import kotlin.script.experimental.host.toScriptSource
- import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
- import kotlin.script.experimental.jvm.jvm
- import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost
- import kotlin.script.experimental.jvmhost.createJvmCompilationConfigurationFromTemplate
- @KotlinScript(fileExtension = "config.kts")
- abstract class ConfigurationScript {
- var aString = ""
- var anInt = 0
- }
- val compilationConfiguration = createJvmCompilationConfigurationFromTemplate<ConfigurationScript> {
- jvm {
- dependenciesFromCurrentContext(
- // TODO: You should put the name of the libraries that you want to be accessible from
- // the scripts here instead of using the whole classpath.
- wholeClasspath = true
- )
- }
- }
- fun BasicJvmScriptingHost.evalScript(script: String): ResultWithDiagnostics<EvaluationResult> {
- return eval(script.toScriptSource("script.config.kts"), compilationConfiguration, null)
- }
- fun main() {
- val host = BasicJvmScriptingHost()
- println("Executing script...")
- val result = host.evalScript("""
- aString = "Hello World"
- anInt = 42
- """.trimIndent())
- println("Executed script")
- // Print reports.
- result.reports.forEach { report ->
- println("[${report.severity}] ${report.message}" + (report.exception?.let { ": $it" } ?: ""))
- }
- // Retrieve script instance.
- val instance = when (result) {
- is ResultWithDiagnostics.Success -> when (val value = result.value.returnValue) {
- is ResultValue.Value -> value.scriptInstance
- is ResultValue.UnitValue -> value.scriptInstance
- ResultValue.Unit -> null
- }
- is ResultWithDiagnostics.Failure -> null
- } as? ConfigurationScript
- instance?.let {
- println("aString = ${it.aString}") // should print "Hello World"
- println("anInt = ${it.anInt}") // should print 42
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement