Skip to content

Commit

Permalink
Experimental | Fix Kotlin Evaluate
Browse files Browse the repository at this point in the history
  • Loading branch information
TheFloodDragon committed Jul 15, 2024
1 parent 1212d85 commit 39dce8e
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -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)
Original file line number Diff line number Diff line change
@@ -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

/**
Expand All @@ -17,11 +17,13 @@ import kotlin.script.experimental.jvmhost.jsr223.KotlinJsr223ScriptEngineImpl
@Suppress("unused")
class KotlinJsr223DefaultScriptEngineFactory : KotlinJsr223JvmScriptEngineFactoryBase() {

val scriptDefinition = createJvmScriptDefinitionFromTemplate<KotlinJsr223DefaultScript>()

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)) }

}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -19,27 +18,30 @@ 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)
}
ide {
acceptedLocations(ScriptAcceptedLocation.Everywhere)
}
}) {
private fun readResolve(): Any = Compilation
}

/**
* [ScriptEvaluationConfiguration]
*/
val evaluation = ScriptEvaluationConfiguration {
object Evaluation : ScriptEvaluationConfiguration({
refineConfigurationBeforeEvaluate(::configureProvidedPropertiesFromJsr223Context)
}) {
private fun readResolve(): Any = Evaluation
}

}

0 comments on commit 39dce8e

Please sign in to comment.