diff --git a/project/module-script/src/main/kotlin/cn/fd/ratziel/script/internal/jsr223/KotlinJsr223DefaultScript.kt b/project/module-script/src/main/kotlin/cn/fd/ratziel/script/internal/jsr223/KotlinJsr223DefaultScript.kt new file mode 100644 index 00000000..dac0c525 --- /dev/null +++ b/project/module-script/src/main/kotlin/cn/fd/ratziel/script/internal/jsr223/KotlinJsr223DefaultScript.kt @@ -0,0 +1,18 @@ +package cn.fd.ratziel.script.internal.jsr223 + +import cn.fd.ratziel.script.kts.KotlinScriptConfiguration +import javax.script.Bindings +import kotlin.script.experimental.annotations.KotlinScript +import kotlin.script.templates.standard.ScriptTemplateWithBindings + +/** + * KotlinJsr223DefaultScript + * + * @author TheFloodDragon + * @since 2024/7/16 00:15 + */ +@KotlinScript( + compilationConfiguration = KotlinScriptConfiguration.Compilation::class, + evaluationConfiguration = KotlinScriptConfiguration.Evaluation::class +) +abstract class KotlinJsr223DefaultScript(bindings: Bindings) : ScriptTemplateWithBindings(bindings) \ No newline at end of file diff --git a/project/module-script/src/main/kotlin/cn/fd/ratziel/script/internal/jsr223/KotlinJsr223DefaultScriptEngineFactory.kt b/project/module-script/src/main/kotlin/cn/fd/ratziel/script/internal/jsr223/KotlinJsr223DefaultScriptEngineFactory.kt index b2d68e5d..31468734 100644 --- a/project/module-script/src/main/kotlin/cn/fd/ratziel/script/internal/jsr223/KotlinJsr223DefaultScriptEngineFactory.kt +++ b/project/module-script/src/main/kotlin/cn/fd/ratziel/script/internal/jsr223/KotlinJsr223DefaultScriptEngineFactory.kt @@ -1,11 +1,11 @@ package cn.fd.ratziel.script.internal.jsr223 -import cn.fd.ratziel.script.kts.KotlinScriptConfiguration import org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineFactoryBase import org.jetbrains.kotlin.cli.common.repl.ScriptArgsWithTypes import javax.script.Bindings import javax.script.ScriptContext import javax.script.ScriptEngine +import kotlin.script.experimental.jvmhost.createJvmScriptDefinitionFromTemplate import kotlin.script.experimental.jvmhost.jsr223.KotlinJsr223ScriptEngineImpl /** @@ -17,11 +17,13 @@ import kotlin.script.experimental.jvmhost.jsr223.KotlinJsr223ScriptEngineImpl @Suppress("unused") class KotlinJsr223DefaultScriptEngineFactory : KotlinJsr223JvmScriptEngineFactoryBase() { + val scriptDefinition = createJvmScriptDefinitionFromTemplate() + override fun getScriptEngine(): ScriptEngine = KotlinJsr223ScriptEngineImpl( this, - KotlinScriptConfiguration.compilation, - KotlinScriptConfiguration.evaluation, + scriptDefinition.compilationConfiguration, + scriptDefinition.evaluationConfiguration, ) { ScriptArgsWithTypes(arrayOf(it.getBindings(ScriptContext.ENGINE_SCOPE).orEmpty()), arrayOf(Bindings::class)) } } \ No newline at end of file diff --git a/project/module-script/src/main/kotlin/cn/fd/ratziel/script/kts/KotlinScriptConfiguration.kt b/project/module-script/src/main/kotlin/cn/fd/ratziel/script/kts/KotlinScriptConfiguration.kt index 101d1f2d..628b7097 100644 --- a/project/module-script/src/main/kotlin/cn/fd/ratziel/script/kts/KotlinScriptConfiguration.kt +++ b/project/module-script/src/main/kotlin/cn/fd/ratziel/script/kts/KotlinScriptConfiguration.kt @@ -3,7 +3,6 @@ package cn.fd.ratziel.script.kts import kotlin.script.experimental.api.* import kotlin.script.experimental.jvm.JvmDependencyFromClassLoader import kotlin.script.experimental.jvm.jvm -import kotlin.script.experimental.jvm.jvmTarget import kotlin.script.experimental.jvmhost.jsr223.configureProvidedPropertiesFromJsr223Context import kotlin.script.experimental.jvmhost.jsr223.importAllBindings import kotlin.script.experimental.jvmhost.jsr223.jsr223 @@ -19,13 +18,12 @@ object KotlinScriptConfiguration { /** * [ScriptCompilationConfiguration] */ - val compilation = ScriptCompilationConfiguration { + object Compilation : ScriptCompilationConfiguration({ refineConfiguration { beforeCompiling(::configureProvidedPropertiesFromJsr223Context) } jvm { dependencies(JvmDependencyFromClassLoader { this::class.java.classLoader }) - jvmTarget(System.getProperty("java.specification.version") ?: "1.8") } jsr223 { importAllBindings(true) @@ -33,13 +31,17 @@ object KotlinScriptConfiguration { ide { acceptedLocations(ScriptAcceptedLocation.Everywhere) } + }) { + private fun readResolve(): Any = Compilation } /** * [ScriptEvaluationConfiguration] */ - val evaluation = ScriptEvaluationConfiguration { + object Evaluation : ScriptEvaluationConfiguration({ refineConfigurationBeforeEvaluate(::configureProvidedPropertiesFromJsr223Context) + }) { + private fun readResolve(): Any = Evaluation } } \ No newline at end of file