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.annotations.KotlinScript
import kotlin.script.experimental.api.ScriptCompilationConfiguration import kotlin.script.experimental.api.ScriptCompilationConfiguration
import kotlin.script.experimental.api.defaultImports import kotlin.script.experimental.api.defaultImports
import kotlin.script.experimental.api.isStandalone
import kotlin.script.experimental.api.refineConfiguration import kotlin.script.experimental.api.refineConfiguration
import kotlin.script.experimental.dependencies.DependsOn import kotlin.script.experimental.dependencies.DependsOn
import kotlin.script.experimental.dependencies.Repository import kotlin.script.experimental.dependencies.Repository
@ -15,7 +14,6 @@ import kotlin.script.experimental.jvm.jvm
abstract class SimpleScript abstract class SimpleScript
object SimpleScriptDefinition : ScriptCompilationConfiguration({ object SimpleScriptDefinition : ScriptCompilationConfiguration({
isStandalone(false)
defaultImports( defaultImports(
DependsOn::class.qualifiedName!!, DependsOn::class.qualifiedName!!,
Repository::class.qualifiedName!!, Repository::class.qualifiedName!!,

View File

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