cleanup script engine

This commit is contained in:
Julian Krings 2025-08-09 00:00:31 +02:00
parent 768e569400
commit 2885a39299
No known key found for this signature in database
GPG Key ID: 208C6E08C3B718D2
2 changed files with 9 additions and 11 deletions

View File

@ -4,7 +4,6 @@ import com.volmit.iris.core.scripting.kotlin.runner.configureMavenDepsOnAnnotati
import kotlin.script.experimental.annotations.KotlinScript
import kotlin.script.experimental.api.ScriptCompilationConfiguration
import kotlin.script.experimental.api.defaultImports
import kotlin.script.experimental.api.isStandalone
import kotlin.script.experimental.api.refineConfiguration
import kotlin.script.experimental.dependencies.DependsOn
import kotlin.script.experimental.dependencies.Repository
@ -15,7 +14,6 @@ import kotlin.script.experimental.jvm.jvm
abstract class SimpleScript
object SimpleScriptDefinition : ScriptCompilationConfiguration({
isStandalone(false)
defaultImports(
DependsOn::class.qualifiedName!!,
Repository::class.qualifiedName!!,

View File

@ -1,6 +1,6 @@
package com.volmit.iris.core.scripting.kotlin.runner
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater
import java.util.concurrent.locks.ReentrantLock
import kotlin.reflect.KClass
import kotlin.script.experimental.api.*
import kotlin.script.experimental.host.ScriptingHostConfiguration
@ -14,6 +14,7 @@ data class CachedScript(
) : Script, CompiledScript {
private val scripts = base.otherScripts.map { CachedScript(it, host, hostConfig) }
private val evalConfig = createEvaluationConfiguration()
private val lock = ReentrantLock()
@Volatile
private var value: ResultWithDiagnostics<KClass<*>>? = null
@ -32,13 +33,16 @@ data class CachedScript(
override suspend fun getClass(scriptEvaluationConfiguration: ScriptEvaluationConfiguration?) = value ?: run {
val cached = base.getClass(scriptEvaluationConfiguration)
updater.set(this, cached)
return cached
lock.lock()
try {
value ?: base.getClass(scriptEvaluationConfiguration).also { value = it }
} finally {
lock.unlock()
}
}
override fun evaluate(properties: Map<String, Any?>?) = host.runInCoroutineContext {
host.evaluator.invoke(this, createEvaluationConfiguration(properties))
host.evaluator(this, createEvaluationConfiguration(properties))
}
private fun createEvaluationConfiguration(properties: Map<String, Any?>?): ScriptEvaluationConfiguration {
@ -57,8 +61,4 @@ data class CachedScript(
hostConfig,
type)
}
companion object {
private val updater = AtomicReferenceFieldUpdater.newUpdater(CachedScript::class.java, ResultWithDiagnostics::class.java, "value")
}
}