Clean and fix new scripting API

This commit is contained in:
Ilya Chernikov
2018-07-13 19:05:37 +02:00
parent f2a8e5c248
commit a54675abe7
20 changed files with 111 additions and 95 deletions
@@ -9,8 +9,8 @@ interface ScriptCompiler {
suspend fun compile(
script: ScriptSource,
configurator: ScriptCompilationConfigurator? = null,
additionalConfiguration: ScriptCompileConfiguration? = null // overrides parameters from configurator.defaultConfiguration
scriptDefinition: ScriptDefinition,
additionalConfiguration: ScriptCompileConfiguration? = null // overrides properties from definition and configurator.defaultConfiguration
): ResultWithDiagnostics<CompiledScript<*>>
}
@@ -17,7 +17,7 @@ typealias ProcessedScriptData = ChainedPropertyBag
interface ScriptCompilationConfigurator {
// constructor(environment: ScriptingEnvironment) // the constructor is expected from implementations
// constructor(properties: ScriptDefinitionPropertiesBag) // the constructor is expected from implementations
val defaultConfiguration: ScriptCompileConfiguration
@@ -13,7 +13,7 @@ object ScriptCompileConfigurationProperties {
val sourceFragments by typedKey<List<ScriptSourceNamedFragment>>()
val baseClass = ScriptingEnvironmentProperties.baseClass
val baseClass = ScriptDefinitionProperties.baseClass
val scriptBodyTarget by typedKey<ScriptBodyTarget>()
@@ -7,6 +7,7 @@
package kotlin.script.experimental.api
import kotlin.reflect.KClass
import kotlin.script.experimental.util.ChainedPropertyBag
import kotlin.script.experimental.util.typedKey
@@ -18,7 +19,7 @@ interface ScriptDefinition {
val properties: ScriptDefinitionPropertiesBag
val compilationConfigurator: ScriptCompilationConfigurator
val compilationConfigurator: ScriptCompilationConfigurator?
val evaluator: ScriptEvaluator<*>?
}
@@ -28,4 +29,12 @@ object ScriptDefinitionProperties {
val name by typedKey<String>() // Name of the script type, by default "Kotlin script"
val fileExtension by typedKey<String>() // default: "kts"
}
val baseClass by typedKey<KotlinType>() // script base class
}
fun ScriptDefinitionPropertiesBag.getScriptBaseClass(contextClass: KClass<*>): KClass<*> =
getScriptingClass(get(ScriptDefinitionProperties.baseClass), contextClass)
fun ScriptDefinitionPropertiesBag.getScriptBaseClass(context: Any): KClass<*> =
getScriptingClass(get(ScriptDefinitionProperties.baseClass), context::class)
@@ -27,7 +27,7 @@ data class EvaluationResult(val returnValue: Any?, val environment: ScriptEvalua
// NOTE: name inconsistency: run vs evaluate
interface ScriptEvaluator<in ScriptBase : Any> {
// constructor(environment: ScriptingEnvironment) // the constructor is expected from implementations
// constructor(properties: ScriptDefinitionPropertiesBag) // the constructor is expected from implementations
suspend fun eval(
compiledScript: CompiledScript<ScriptBase>,
@@ -13,9 +13,6 @@ typealias ScriptingEnvironment = ChainedPropertyBag
object ScriptingEnvironmentProperties {
// required by definitions that extract data from script base class annotations
val baseClass by typedKey<KotlinType>()
// should contain all dependencies needed for baseClass and compilationConfigurator
val configurationDependencies by typedKey<List<ScriptDependency>>()
@@ -40,8 +37,3 @@ fun ScriptingEnvironment.getScriptingClass(type: KotlinType, contextClass: KClas
fun ScriptingEnvironment.getScriptingClass(type: KotlinType, context: Any): KClass<*> = getScriptingClass(type, context::class)
fun ScriptingEnvironment.getScriptBaseClass(contextClass: KClass<*>): KClass<*> =
getScriptingClass(get(ScriptingEnvironmentProperties.baseClass), contextClass)
fun ScriptingEnvironment.getScriptBaseClass(context: Any): KClass<*> =
getScriptingClass(get(ScriptingEnvironmentProperties.baseClass), context::class)