Extend evaluation API for easier passing of evaluation configuration
refactor helpers accordingly
This commit is contained in:
+26
-5
@@ -5,19 +5,30 @@
|
||||
|
||||
package kotlin.script.experimental.jvmhost
|
||||
|
||||
import kotlin.script.experimental.api.KotlinType
|
||||
import kotlin.script.experimental.api.ScriptCompilationConfiguration
|
||||
import kotlin.script.experimental.api.ScriptEvaluator
|
||||
import kotlin.script.experimental.api.*
|
||||
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
||||
import kotlin.script.experimental.host.createCompilationConfigurationFromTemplate
|
||||
import kotlin.script.experimental.host.BasicScriptingHost
|
||||
import kotlin.script.experimental.host.createEvaluationConfigurationFromTemplate
|
||||
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
|
||||
|
||||
open class BasicJvmScriptingHost(
|
||||
hostConfiguration: ScriptingHostConfiguration = defaultJvmScriptingHostConfiguration,
|
||||
val hostConfiguration: ScriptingHostConfiguration = defaultJvmScriptingHostConfiguration,
|
||||
compiler: JvmScriptCompiler = JvmScriptCompiler(hostConfiguration),
|
||||
evaluator: ScriptEvaluator = BasicJvmScriptEvaluator()
|
||||
) : BasicScriptingHost(compiler, evaluator)
|
||||
) : BasicScriptingHost(compiler, evaluator) {
|
||||
|
||||
inline fun <reified T : Any> evalWithTemplate(
|
||||
script: SourceCode,
|
||||
noinline compilation: ScriptCompilationConfiguration.Builder.() -> Unit = {},
|
||||
noinline evaluation: ScriptEvaluationConfiguration.Builder.() -> Unit = {}
|
||||
): ResultWithDiagnostics<EvaluationResult> =
|
||||
eval(
|
||||
script,
|
||||
createJvmCompilationConfigurationFromTemplate<T>(hostConfiguration, compilation),
|
||||
createJvmEvaluationConfigurationFromTemplate<T>(hostConfiguration, evaluation)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
inline fun <reified T : Any> createJvmCompilationConfigurationFromTemplate(
|
||||
@@ -29,3 +40,13 @@ inline fun <reified T : Any> createJvmCompilationConfigurationFromTemplate(
|
||||
ScriptCompilationConfiguration::class,
|
||||
body
|
||||
)
|
||||
|
||||
inline fun <reified T : Any> createJvmEvaluationConfigurationFromTemplate(
|
||||
hostConfiguration: ScriptingHostConfiguration = defaultJvmScriptingHostConfiguration,
|
||||
noinline body: ScriptEvaluationConfiguration.Builder.() -> Unit = {}
|
||||
): ScriptEvaluationConfiguration = createEvaluationConfigurationFromTemplate(
|
||||
KotlinType(T::class),
|
||||
hostConfiguration,
|
||||
ScriptCompilationConfiguration::class,
|
||||
body
|
||||
)
|
||||
|
||||
+6
-7
@@ -28,11 +28,10 @@ open class BasicJvmScriptEvaluator : ScriptEvaluator {
|
||||
|
||||
override suspend operator fun invoke(
|
||||
compiledScript: CompiledScript<*>,
|
||||
scriptEvaluationConfiguration: ScriptEvaluationConfiguration?
|
||||
scriptEvaluationConfiguration: ScriptEvaluationConfiguration
|
||||
): ResultWithDiagnostics<EvaluationResult> =
|
||||
try {
|
||||
val actualEvalConfiguration = scriptEvaluationConfiguration ?: ScriptEvaluationConfiguration()
|
||||
compiledScript.getClass(actualEvalConfiguration).onSuccess { scriptClass ->
|
||||
compiledScript.getClass(scriptEvaluationConfiguration).onSuccess { scriptClass ->
|
||||
// in the future, when (if) we'll stop to compile everything into constructor
|
||||
// run as SAM
|
||||
// return res
|
||||
@@ -40,14 +39,14 @@ open class BasicJvmScriptEvaluator : ScriptEvaluator {
|
||||
// for other scripts we need evaluation configuration with actualClassloader set,
|
||||
// so they are loaded in the same classloader as the "main" script
|
||||
val updatedEvalConfiguration =
|
||||
if (actualEvalConfiguration.containsKey(ScriptEvaluationConfiguration.jvm.actualClassLoader))
|
||||
actualEvalConfiguration
|
||||
if (scriptEvaluationConfiguration.containsKey(ScriptEvaluationConfiguration.jvm.actualClassLoader))
|
||||
scriptEvaluationConfiguration
|
||||
else
|
||||
ScriptEvaluationConfiguration(actualEvalConfiguration) {
|
||||
ScriptEvaluationConfiguration(scriptEvaluationConfiguration) {
|
||||
ScriptEvaluationConfiguration.jvm.actualClassLoader(scriptClass.java.classLoader)
|
||||
}
|
||||
|
||||
val sharedScripts = actualEvalConfiguration[ScriptEvaluationConfiguration.scriptsInstancesSharingMap]
|
||||
val sharedScripts = scriptEvaluationConfiguration[ScriptEvaluationConfiguration.scriptsInstancesSharingMap]
|
||||
|
||||
sharedScripts?.get(scriptClass)?.asSuccess()
|
||||
?: compiledScript.otherScripts.mapSuccess {
|
||||
|
||||
+2
-2
@@ -20,7 +20,7 @@ open class BasicJvmScriptClassFilesGenerator(val outputDir: File) : ScriptEvalua
|
||||
|
||||
override suspend operator fun invoke(
|
||||
compiledScript: CompiledScript<*>,
|
||||
scriptEvaluationConfiguration: ScriptEvaluationConfiguration?
|
||||
scriptEvaluationConfiguration: ScriptEvaluationConfiguration
|
||||
): ResultWithDiagnostics<EvaluationResult> {
|
||||
try {
|
||||
if (compiledScript !is KJvmCompiledScript<*>)
|
||||
@@ -48,7 +48,7 @@ open class BasicJvmScriptJarGenerator(val outputJar: File) : ScriptEvaluator {
|
||||
|
||||
override suspend operator fun invoke(
|
||||
compiledScript: CompiledScript<*>,
|
||||
scriptEvaluationConfiguration: ScriptEvaluationConfiguration?
|
||||
scriptEvaluationConfiguration: ScriptEvaluationConfiguration
|
||||
): ResultWithDiagnostics<EvaluationResult> {
|
||||
try {
|
||||
if (compiledScript !is KJvmCompiledScript<*>)
|
||||
|
||||
Reference in New Issue
Block a user