mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-08-16 08:15:50 +00:00
cleanup script engine
This commit is contained in:
parent
768e569400
commit
2885a39299
@ -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!!,
|
||||||
|
@ -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")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user