Advertisement
Guest User

Untitled

a guest
Aug 26th, 2019
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.21 KB | None | 0 0
  1. package com.example
  2.  
  3. import kotlin.script.experimental.annotations.KotlinScript
  4. import kotlin.script.experimental.api.EvaluationResult
  5. import kotlin.script.experimental.api.ResultValue
  6. import kotlin.script.experimental.api.ResultWithDiagnostics
  7. import kotlin.script.experimental.host.toScriptSource
  8. import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
  9. import kotlin.script.experimental.jvm.jvm
  10. import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost
  11. import kotlin.script.experimental.jvmhost.createJvmCompilationConfigurationFromTemplate
  12.  
  13. @KotlinScript(fileExtension = "config.kts")
  14. abstract class ConfigurationScript {
  15.     var aString = ""
  16.     var anInt = 0
  17. }
  18.  
  19. val compilationConfiguration = createJvmCompilationConfigurationFromTemplate<ConfigurationScript> {
  20.     jvm {
  21.         dependenciesFromCurrentContext(
  22.             // TODO: You should put the name of the libraries that you want to be accessible from
  23.             //  the scripts here instead of using the whole classpath.
  24.             wholeClasspath = true
  25.         )
  26.     }
  27. }
  28.  
  29. fun BasicJvmScriptingHost.evalScript(script: String): ResultWithDiagnostics<EvaluationResult> {
  30.     return eval(script.toScriptSource("script.config.kts"), compilationConfiguration, null)
  31. }
  32.  
  33. fun main() {
  34.     val host = BasicJvmScriptingHost()
  35.  
  36.     println("Executing script...")
  37.     val result = host.evalScript("""
  38.     aString = "Hello World"
  39.     anInt = 42
  40.   """.trimIndent())
  41.     println("Executed script")
  42.  
  43.     // Print reports.
  44.     result.reports.forEach { report ->
  45.         println("[${report.severity}] ${report.message}" + (report.exception?.let { ": $it" } ?: ""))
  46.     }
  47.  
  48.     // Retrieve script instance.
  49.     val instance = when (result) {
  50.         is ResultWithDiagnostics.Success -> when (val value = result.value.returnValue) {
  51.             is ResultValue.Value -> value.scriptInstance
  52.             is ResultValue.UnitValue -> value.scriptInstance
  53.             ResultValue.Unit -> null
  54.         }
  55.         is ResultWithDiagnostics.Failure -> null
  56.     } as? ConfigurationScript
  57.  
  58.     instance?.let {
  59.         println("aString = ${it.aString}") // should print "Hello World"
  60.         println("anInt = ${it.anInt}") // should print 42
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement