Remove evaluator from script definition, simplify interface
This commit is contained in:
-7
@@ -14,7 +14,6 @@ package kotlin.script.experimental.annotations
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.script.experimental.api.ScriptDefinition
|
||||
import kotlin.script.experimental.api.ScriptEvaluator
|
||||
import kotlin.script.experimental.definitions.ScriptDefinitionFromAnnotatedBaseClass
|
||||
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@@ -35,12 +34,6 @@ annotation class KotlinScriptFileExtension(
|
||||
val extension: String
|
||||
)
|
||||
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
annotation class KotlinScriptEvaluator(
|
||||
val evaluator: KClass<out ScriptEvaluator<*>>
|
||||
)
|
||||
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
annotation class KotlinScriptDefaultCompilationConfiguration(
|
||||
|
||||
@@ -18,8 +18,6 @@ interface ScriptDefinition {
|
||||
// constructor(environment: ScriptingEnvironment) // the constructor is expected from implementations
|
||||
|
||||
val properties: ScriptDefinitionPropertiesBag
|
||||
|
||||
val evaluator: ScriptEvaluator<*>?
|
||||
}
|
||||
|
||||
object ScriptDefinitionProperties {
|
||||
|
||||
@@ -24,13 +24,12 @@ typealias ScriptEvaluationEnvironment = ChainedPropertyBag
|
||||
|
||||
data class EvaluationResult(val returnValue: Any?, val environment: ScriptEvaluationEnvironment)
|
||||
|
||||
// NOTE: name inconsistency: run vs evaluate
|
||||
interface ScriptEvaluator<in ScriptBase : Any> {
|
||||
interface ScriptEvaluator {
|
||||
|
||||
// constructor(properties: ScriptDefinitionPropertiesBag) // the constructor is expected from implementations
|
||||
|
||||
suspend fun eval(
|
||||
compiledScript: CompiledScript<ScriptBase>,
|
||||
compiledScript: CompiledScript<*>,
|
||||
scriptEvaluationEnvironment: ScriptEvaluationEnvironment
|
||||
): ResultWithDiagnostics<EvaluationResult>
|
||||
}
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package kotlin.script.experimental.basic
|
||||
|
||||
import kotlin.script.experimental.api.*
|
||||
|
||||
class DummyEvaluator<ScriptBase : Any>(val environment: ScriptingEnvironment) : ScriptEvaluator<ScriptBase> {
|
||||
override suspend fun eval(
|
||||
compiledScript: CompiledScript<ScriptBase>,
|
||||
scriptEvaluationEnvironment: ScriptEvaluationEnvironment
|
||||
): ResultWithDiagnostics<EvaluationResult> =
|
||||
ResultWithDiagnostics.Failure("not implemented".asErrorDiagnostics())
|
||||
}
|
||||
|
||||
+4
-7
@@ -9,9 +9,11 @@ import kotlin.reflect.KClass
|
||||
import kotlin.reflect.full.createInstance
|
||||
import kotlin.reflect.full.findAnnotation
|
||||
import kotlin.reflect.full.primaryConstructor
|
||||
import kotlin.script.experimental.annotations.*
|
||||
import kotlin.script.experimental.annotations.KotlinScript
|
||||
import kotlin.script.experimental.annotations.KotlinScriptDefaultCompilationConfiguration
|
||||
import kotlin.script.experimental.annotations.KotlinScriptDefinition
|
||||
import kotlin.script.experimental.annotations.KotlinScriptFileExtension
|
||||
import kotlin.script.experimental.api.*
|
||||
import kotlin.script.experimental.basic.DummyEvaluator
|
||||
import kotlin.script.experimental.util.TypedKey
|
||||
import kotlin.script.experimental.util.chainPropertyBags
|
||||
|
||||
@@ -65,11 +67,6 @@ open class ScriptDefinitionFromAnnotatedBaseClass(
|
||||
ScriptingEnvironment(baseProperties, propertiesData)
|
||||
}
|
||||
|
||||
override val evaluator =
|
||||
baseClass.findAnnotation<KotlinScriptEvaluator>()?.evaluator?.instantiateScriptHandler()
|
||||
?: explicitDefinition?.evaluator
|
||||
?: DummyEvaluator::class.instantiateScriptHandler()
|
||||
|
||||
private fun <T : Any> KClass<T>.instantiateScriptHandler(): T {
|
||||
val klass: KClass<T> = try {
|
||||
getScriptingClass(KotlinType(this), this@ScriptDefinitionFromAnnotatedBaseClass::class, environment) as KClass<T>
|
||||
|
||||
+3
-4
@@ -22,10 +22,10 @@ import kotlinx.coroutines.experimental.CoroutineScope
|
||||
import kotlinx.coroutines.experimental.runBlocking
|
||||
import kotlin.script.experimental.api.*
|
||||
|
||||
abstract class BasicScriptingHost<ScriptBase : Any>(
|
||||
abstract class BasicScriptingHost(
|
||||
val compiler: ScriptCompiler,
|
||||
// TODO: does it belong here or to the definition?
|
||||
val evaluator: ScriptEvaluator<ScriptBase>
|
||||
val evaluator: ScriptEvaluator
|
||||
) {
|
||||
open fun <T> runInCoroutineContext(block: suspend CoroutineScope.() -> T): T = runBlocking { block() }
|
||||
|
||||
@@ -40,8 +40,7 @@ abstract class BasicScriptingHost<ScriptBase : Any>(
|
||||
when (compiled) {
|
||||
is ResultWithDiagnostics.Failure -> compiled
|
||||
is ResultWithDiagnostics.Success -> {
|
||||
val compiledScript = compiled.value!! as CompiledScript<ScriptBase>
|
||||
evaluator.eval(compiledScript, environment)
|
||||
evaluator.eval(compiled.value, environment)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user