From 91e6c0b77cfa0b1626a5f480382dc593217f639d Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Sun, 15 Jul 2018 20:54:20 +0200 Subject: [PATCH] Remove evaluator from script definition, simplify interface --- .../examples/jvm/resolve/maven/host/host.kt | 10 ++++++---- .../examples/jvm/resolve/maven/scriptDef.kt | 10 +++++----- .../script/examples/jvm/simple/host/host.kt | 10 ++++++---- .../script/examples/jvm/simple/scriptDef.kt | 3 --- .../annotations/scriptAnnotations.kt | 7 ------- .../script/experimental/api/scriptDefinition.kt | 2 -- .../script/experimental/api/scriptEvaluation.kt | 5 ++--- .../script/experimental/basic/basicScript.kt | 17 ----------------- .../definitions/definitionFromAnnotation.kt | 11 ++++------- .../experimental/host/BasicScriptingHost.kt | 7 +++---- .../experimental/jvm/jvmScriptEvaluation.kt | 6 +++--- .../jvm/runners/BasicJvmScriptEvaluator.kt | 4 ++-- .../LazyScriptDefinitionFromDiscoveredClass.kt | 1 - 13 files changed, 31 insertions(+), 62 deletions(-) delete mode 100644 libraries/scripting/common/src/kotlin/script/experimental/basic/basicScript.kt diff --git a/libraries/examples/scripting/jvm-maven-deps/host/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/host/host.kt b/libraries/examples/scripting/jvm-maven-deps/host/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/host/host.kt index 9b3c0920e5a..e797d1fccc7 100644 --- a/libraries/examples/scripting/jvm-maven-deps/host/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/host/host.kt +++ b/libraries/examples/scripting/jvm-maven-deps/host/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/host/host.kt @@ -14,19 +14,21 @@ import kotlin.script.experimental.jvm.DummyCompiledJvmScriptCache import kotlin.script.experimental.jvm.JvmBasicScriptingHost import kotlin.script.experimental.jvm.JvmGetScriptingClass import kotlin.script.experimental.jvm.JvmScriptCompiler +import kotlin.script.experimental.jvm.runners.BasicJvmScriptEvaluator import kotlin.script.experimental.jvmhost.impl.KJVMCompilerImpl import kotlin.script.experimental.misc.invoke fun evalFile(scriptFile: File): ResultWithDiagnostics { val scriptCompiler = JvmScriptCompiler(KJVMCompilerImpl(), DummyCompiledJvmScriptCache()) + val environment = ScriptingEnvironment( + ScriptingEnvironmentProperties.getScriptingClass(JvmGetScriptingClass()) + ) val scriptDefinition = ScriptDefinitionFromAnnotatedBaseClass( KotlinType(MyScriptWithMavenDeps::class), - ScriptingEnvironment( - ScriptingEnvironmentProperties.getScriptingClass(JvmGetScriptingClass()) - ) + environment ) - val host = JvmBasicScriptingHost(scriptCompiler, scriptDefinition.evaluator) + val host = JvmBasicScriptingHost(scriptCompiler, BasicJvmScriptEvaluator()) return host.eval( scriptFile.toScriptSource(), scriptDefinition, ScriptCompileConfiguration(), ScriptEvaluationEnvironment() diff --git a/libraries/examples/scripting/jvm-maven-deps/script/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/scriptDef.kt b/libraries/examples/scripting/jvm-maven-deps/script/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/scriptDef.kt index f00043f39f1..bce35be04ce 100644 --- a/libraries/examples/scripting/jvm-maven-deps/script/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/scriptDef.kt +++ b/libraries/examples/scripting/jvm-maven-deps/script/src/org/jetbrains/kotlin/script/examples/jvm/resolve/maven/scriptDef.kt @@ -14,18 +14,18 @@ import kotlin.script.dependencies.ScriptContents import kotlin.script.dependencies.ScriptDependenciesResolver import kotlin.script.experimental.annotations.KotlinScript import kotlin.script.experimental.annotations.KotlinScriptDefaultCompilationConfiguration -import kotlin.script.experimental.annotations.KotlinScriptEvaluator import kotlin.script.experimental.annotations.KotlinScriptFileExtension import kotlin.script.experimental.api.* -import kotlin.script.experimental.jvm.* -import kotlin.script.experimental.jvm.runners.BasicJvmScriptEvaluator -import kotlin.script.experimental.misc.* +import kotlin.script.experimental.jvm.JvmDependency +import kotlin.script.experimental.jvm.jvmJavaHomeParams +import kotlin.script.experimental.jvm.mapLegacyDiagnosticSeverity +import kotlin.script.experimental.jvm.mapLegacyScriptPosition +import kotlin.script.experimental.misc.invoke import kotlin.script.experimental.util.TypedKey @KotlinScript @KotlinScriptFileExtension("scriptwithdeps.kts") @KotlinScriptDefaultCompilationConfiguration(MyConfiguration::class) -@KotlinScriptEvaluator(BasicJvmScriptEvaluator::class) abstract class MyScriptWithMavenDeps { // abstract fun body(vararg args: String): Int } diff --git a/libraries/examples/scripting/jvm-simple-script/host/src/org/jetbrains/kotlin/script/examples/jvm/simple/host/host.kt b/libraries/examples/scripting/jvm-simple-script/host/src/org/jetbrains/kotlin/script/examples/jvm/simple/host/host.kt index 4f77c7aeffc..3217e0d9ec0 100644 --- a/libraries/examples/scripting/jvm-simple-script/host/src/org/jetbrains/kotlin/script/examples/jvm/simple/host/host.kt +++ b/libraries/examples/scripting/jvm-simple-script/host/src/org/jetbrains/kotlin/script/examples/jvm/simple/host/host.kt @@ -12,6 +12,7 @@ import kotlin.script.experimental.api.* import kotlin.script.experimental.definitions.ScriptDefinitionFromAnnotatedBaseClass import kotlin.script.experimental.host.toScriptSource import kotlin.script.experimental.jvm.* +import kotlin.script.experimental.jvm.runners.BasicJvmScriptEvaluator import kotlin.script.experimental.jvmhost.impl.KJVMCompilerImpl import kotlin.script.experimental.misc.* @@ -24,14 +25,15 @@ val myJvmConfigParams = jvmJavaHomeParams + with(ScriptCompileConfigurationPrope fun evalFile(scriptFile: File): ResultWithDiagnostics { val scriptCompiler = JvmScriptCompiler(KJVMCompilerImpl(), DummyCompiledJvmScriptCache()) + val environment = ScriptingEnvironment( + ScriptingEnvironmentProperties.getScriptingClass(JvmGetScriptingClass()) + ) val scriptDefinition = ScriptDefinitionFromAnnotatedBaseClass( KotlinType(MyScript::class), - ScriptingEnvironment( - ScriptingEnvironmentProperties.getScriptingClass(JvmGetScriptingClass()) - ) + environment ) - val host = JvmBasicScriptingHost(scriptCompiler, scriptDefinition.evaluator) + val host = JvmBasicScriptingHost(scriptCompiler, BasicJvmScriptEvaluator()) return host.eval( scriptFile.toScriptSource(), scriptDefinition, ScriptCompileConfiguration(myJvmConfigParams), ScriptEvaluationEnvironment() diff --git a/libraries/examples/scripting/jvm-simple-script/script/src/org/jetbrains/kotlin/script/examples/jvm/simple/scriptDef.kt b/libraries/examples/scripting/jvm-simple-script/script/src/org/jetbrains/kotlin/script/examples/jvm/simple/scriptDef.kt index 5b62314265b..f321356d5d7 100644 --- a/libraries/examples/scripting/jvm-simple-script/script/src/org/jetbrains/kotlin/script/examples/jvm/simple/scriptDef.kt +++ b/libraries/examples/scripting/jvm-simple-script/script/src/org/jetbrains/kotlin/script/examples/jvm/simple/scriptDef.kt @@ -6,12 +6,9 @@ package org.jetbrains.kotlin.script.examples.jvm.simple import kotlin.script.experimental.annotations.KotlinScript -import kotlin.script.experimental.annotations.KotlinScriptEvaluator import kotlin.script.experimental.annotations.KotlinScriptFileExtension -import kotlin.script.experimental.jvm.runners.BasicJvmScriptEvaluator @KotlinScript -@KotlinScriptEvaluator(BasicJvmScriptEvaluator::class) @KotlinScriptFileExtension("simplescript.kts") abstract class MyScript { // abstract fun body(vararg args: String): Int diff --git a/libraries/scripting/common/src/kotlin/script/experimental/annotations/scriptAnnotations.kt b/libraries/scripting/common/src/kotlin/script/experimental/annotations/scriptAnnotations.kt index e249d4898e4..34ffa3289dd 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/annotations/scriptAnnotations.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/annotations/scriptAnnotations.kt @@ -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> -) - @Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.RUNTIME) annotation class KotlinScriptDefaultCompilationConfiguration( diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptDefinition.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptDefinition.kt index 01c3af0695d..eb12bb54835 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptDefinition.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptDefinition.kt @@ -18,8 +18,6 @@ interface ScriptDefinition { // constructor(environment: ScriptingEnvironment) // the constructor is expected from implementations val properties: ScriptDefinitionPropertiesBag - - val evaluator: ScriptEvaluator<*>? } object ScriptDefinitionProperties { diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptEvaluation.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptEvaluation.kt index f6989f9c13c..b9a4f2fb536 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptEvaluation.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptEvaluation.kt @@ -24,13 +24,12 @@ typealias ScriptEvaluationEnvironment = ChainedPropertyBag data class EvaluationResult(val returnValue: Any?, val environment: ScriptEvaluationEnvironment) -// NOTE: name inconsistency: run vs evaluate -interface ScriptEvaluator { +interface ScriptEvaluator { // constructor(properties: ScriptDefinitionPropertiesBag) // the constructor is expected from implementations suspend fun eval( - compiledScript: CompiledScript, + compiledScript: CompiledScript<*>, scriptEvaluationEnvironment: ScriptEvaluationEnvironment ): ResultWithDiagnostics } diff --git a/libraries/scripting/common/src/kotlin/script/experimental/basic/basicScript.kt b/libraries/scripting/common/src/kotlin/script/experimental/basic/basicScript.kt deleted file mode 100644 index d7346582cad..00000000000 --- a/libraries/scripting/common/src/kotlin/script/experimental/basic/basicScript.kt +++ /dev/null @@ -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(val environment: ScriptingEnvironment) : ScriptEvaluator { - override suspend fun eval( - compiledScript: CompiledScript, - scriptEvaluationEnvironment: ScriptEvaluationEnvironment - ): ResultWithDiagnostics = - ResultWithDiagnostics.Failure("not implemented".asErrorDiagnostics()) -} - diff --git a/libraries/scripting/common/src/kotlin/script/experimental/definitions/definitionFromAnnotation.kt b/libraries/scripting/common/src/kotlin/script/experimental/definitions/definitionFromAnnotation.kt index f8e9efc76b3..5938f7480d0 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/definitions/definitionFromAnnotation.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/definitions/definitionFromAnnotation.kt @@ -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()?.evaluator?.instantiateScriptHandler() - ?: explicitDefinition?.evaluator - ?: DummyEvaluator::class.instantiateScriptHandler() - private fun KClass.instantiateScriptHandler(): T { val klass: KClass = try { getScriptingClass(KotlinType(this), this@ScriptDefinitionFromAnnotatedBaseClass::class, environment) as KClass diff --git a/libraries/scripting/common/src/kotlin/script/experimental/host/BasicScriptingHost.kt b/libraries/scripting/common/src/kotlin/script/experimental/host/BasicScriptingHost.kt index 97057b063d9..07c4b66d0b8 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/host/BasicScriptingHost.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/host/BasicScriptingHost.kt @@ -22,10 +22,10 @@ import kotlinx.coroutines.experimental.CoroutineScope import kotlinx.coroutines.experimental.runBlocking import kotlin.script.experimental.api.* -abstract class BasicScriptingHost( +abstract class BasicScriptingHost( val compiler: ScriptCompiler, // TODO: does it belong here or to the definition? - val evaluator: ScriptEvaluator + val evaluator: ScriptEvaluator ) { open fun runInCoroutineContext(block: suspend CoroutineScope.() -> T): T = runBlocking { block() } @@ -40,8 +40,7 @@ abstract class BasicScriptingHost( when (compiled) { is ResultWithDiagnostics.Failure -> compiled is ResultWithDiagnostics.Success -> { - val compiledScript = compiled.value!! as CompiledScript - evaluator.eval(compiledScript, environment) + evaluator.eval(compiled.value, environment) } } } diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptEvaluation.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptEvaluation.kt index 088e0662501..ec35f01cbf8 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptEvaluation.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptEvaluation.kt @@ -11,10 +11,10 @@ import kotlin.script.experimental.api.ScriptEvaluator import kotlin.script.experimental.host.BasicScriptingHost import kotlin.script.experimental.util.typedKey -open class JvmBasicScriptingHost( +open class JvmBasicScriptingHost( compiler: JvmScriptCompiler, - evaluator: ScriptEvaluator -) : BasicScriptingHost(compiler, evaluator) + evaluator: ScriptEvaluator +) : BasicScriptingHost(compiler, evaluator) object JvmScriptEvaluationEnvironmentProperties { val baseClassLoader by typedKey() diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/runners/BasicJvmScriptEvaluator.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/runners/BasicJvmScriptEvaluator.kt index 9dbdb8b021b..f93de6d3d23 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/runners/BasicJvmScriptEvaluator.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/runners/BasicJvmScriptEvaluator.kt @@ -7,10 +7,10 @@ package kotlin.script.experimental.jvm.runners import kotlin.script.experimental.api.* -open class BasicJvmScriptEvaluator(val environment: ScriptingEnvironment) : ScriptEvaluator { +open class BasicJvmScriptEvaluator() : ScriptEvaluator { override suspend fun eval( - compiledScript: CompiledScript, + compiledScript: CompiledScript<*>, scriptEvaluationEnvironment: ScriptEvaluationEnvironment ): ResultWithDiagnostics = try { diff --git a/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/LazyScriptDefinitionFromDiscoveredClass.kt b/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/LazyScriptDefinitionFromDiscoveredClass.kt index 915ad6208b3..87b4186999d 100644 --- a/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/LazyScriptDefinitionFromDiscoveredClass.kt +++ b/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/LazyScriptDefinitionFromDiscoveredClass.kt @@ -75,6 +75,5 @@ class LazyScriptDefinitionFromDiscoveredClass internal constructor( object InvalidScriptDefinition : ScriptDefinition { override val properties: ScriptDefinitionPropertiesBag = ScriptDefinitionPropertiesBag() - override val evaluator: ScriptEvaluator<*>? = null }