From 96b2ba36fe13d76d449001f5919e1763443903ad Mon Sep 17 00:00:00 2001 From: Edwin Jakobs Date: Sat, 8 Feb 2020 17:24:54 +0100 Subject: [PATCH] Add alternate scripting host (non jsr-223) to orx-olive --- orx-olive/build.gradle | 13 +++++++ orx-olive/src/main/kotlin/Olive.kt | 2 +- .../src/main/kotlin/ScriptObjectLoaderKSH.kt | 34 +++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 orx-olive/src/main/kotlin/ScriptObjectLoaderKSH.kt diff --git a/orx-olive/build.gradle b/orx-olive/build.gradle index 566a9de4..64043e6a 100644 --- a/orx-olive/build.gradle +++ b/orx-olive/build.gradle @@ -1,4 +1,17 @@ dependencies { compile project(":orx-file-watcher") + + // -- JSR 223, old style script loader compile "org.jetbrains.kotlin:kotlin-scripting-jsr223:$kotlinVersion" + + compile "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion" + compile "org.jetbrains.kotlin:kotlin-scripting-jvm-host-embeddable:$kotlinVersion" + compile "org.jetbrains.kotlin:kotlin-scripting-common:$kotlinVersion" + compile "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:$kotlinVersion" + compile "org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlinVersion" + compile "org.jetbrains.kotlin:kotlin-compiler:$kotlinVersion" +// compile "org.jetbrains.kotlin:kotlin-script-util:$kotlinVersion" +// compile "org.jetbrains.kotlin:kotlin-main-kts:$kotlinVersion" + // compile "org.jetbrains.kotlin:kotlin-scripting-dependencies:$kotlinVersion" + } \ No newline at end of file diff --git a/orx-olive/src/main/kotlin/Olive.kt b/orx-olive/src/main/kotlin/Olive.kt index a39eb50d..6645ca92 100644 --- a/orx-olive/src/main/kotlin/Olive.kt +++ b/orx-olive/src/main/kotlin/Olive.kt @@ -98,7 +98,7 @@ class Olive

(val resources: Resources? = null) : Extension { try { val futureFunc = GlobalScope.async { val start = System.currentTimeMillis() - val f = loadFromScript Unit>(it) + val f = loadFromScriptKSH Unit>(it) val end = System.currentTimeMillis() logger.info { "loading script took ${end - start}ms" } f diff --git a/orx-olive/src/main/kotlin/ScriptObjectLoaderKSH.kt b/orx-olive/src/main/kotlin/ScriptObjectLoaderKSH.kt new file mode 100644 index 00000000..796f776c --- /dev/null +++ b/orx-olive/src/main/kotlin/ScriptObjectLoaderKSH.kt @@ -0,0 +1,34 @@ +package org.openrndr.extra.olive + +import java.io.File +import kotlin.script.experimental.api.* +import kotlin.script.experimental.host.BasicScriptingHost +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 +import kotlin.script.templates.standard.SimpleScriptTemplate + +internal fun evalScriptWithConfiguration( + script: String, + host: BasicScriptingHost = BasicJvmScriptingHost(), + body: ScriptCompilationConfiguration.Builder.() -> Unit = {} +): ResultWithDiagnostics { + val compilationConfiguration = createJvmCompilationConfigurationFromTemplate(body = body) + return host.eval(script.toScriptSource(), compilationConfiguration, null) +} + +fun loadFromScriptKSH( + script: File, + host: BasicScriptingHost = BasicJvmScriptingHost(), + body: ScriptCompilationConfiguration.Builder.() -> Unit = { + + jvm { + dependenciesFromCurrentContext(wholeClasspath = true) + } + + } +): T = (evalScriptWithConfiguration(script.readText(), host, body).valueOrThrow().returnValue as ResultValue.Value).value as T + +