Make definition a part of the basic hosts, simplify usages

This commit is contained in:
Ilya Chernikov
2018-07-23 15:33:17 +02:00
parent 70ec004aaa
commit c41717d03b
4 changed files with 33 additions and 24 deletions
@@ -7,22 +7,18 @@ package org.jetbrains.kotlin.script.examples.jvm.resolve.maven.host
import org.jetbrains.kotlin.script.examples.jvm.resolve.maven.MyScriptWithMavenDeps
import java.io.File
import kotlin.script.experimental.api.*
import kotlin.script.experimental.definitions.createScriptDefinitionFromAnnotatedBaseClass
import kotlin.script.experimental.api.EvaluationResult
import kotlin.script.experimental.api.ResultWithDiagnostics
import kotlin.script.experimental.api.ScriptCompileConfiguration
import kotlin.script.experimental.api.ScriptEvaluationEnvironment
import kotlin.script.experimental.host.toScriptSource
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost
import kotlin.script.experimental.jvmhost.makeBasicHostFromAnnotatedScriptBaseClass
fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> {
val scriptDefinition = createScriptDefinitionFromAnnotatedBaseClass(
KotlinType(MyScriptWithMavenDeps::class),
defaultJvmScriptingEnvironment
)
val host = BasicJvmScriptingHost()
val host = makeBasicHostFromAnnotatedScriptBaseClass<MyScriptWithMavenDeps>()
return host.eval(
scriptFile.toScriptSource(), scriptDefinition, ScriptCompileConfiguration(), ScriptEvaluationEnvironment()
scriptFile.toScriptSource(), ScriptCompileConfiguration(), ScriptEvaluationEnvironment()
)
}
@@ -7,28 +7,25 @@ package org.jetbrains.kotlin.script.examples.jvm.simple.host
import org.jetbrains.kotlin.script.examples.jvm.simple.MyScript
import java.io.File
import kotlin.script.experimental.api.*
import kotlin.script.experimental.definitions.createScriptDefinitionFromAnnotatedBaseClass
import kotlin.script.experimental.api.EvaluationResult
import kotlin.script.experimental.api.ResultWithDiagnostics
import kotlin.script.experimental.api.ScriptEvaluationEnvironment
import kotlin.script.experimental.api.buildScriptingProperties
import kotlin.script.experimental.host.toScriptSource
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
import kotlin.script.experimental.jvm.jvmDependenciesFromCurrentContext
import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost
import kotlin.script.experimental.jvmhost.makeBasicHostFromAnnotatedScriptBaseClass
fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> {
val scriptDefinition = createScriptDefinitionFromAnnotatedBaseClass(
KotlinType(MyScript::class),
defaultJvmScriptingEnvironment
)
val additionalCompilationProperties = buildScriptingProperties {
jvmDependenciesFromCurrentContext(
"scripting-jvm-simple-script" /* script library jar name */
)
}
val host = BasicJvmScriptingHost()
val host = makeBasicHostFromAnnotatedScriptBaseClass<MyScript>()
return host.eval(
scriptFile.toScriptSource(), scriptDefinition, additionalCompilationProperties, ScriptEvaluationEnvironment()
scriptFile.toScriptSource(), additionalCompilationProperties, ScriptEvaluationEnvironment()
)
}
@@ -23,6 +23,7 @@ import kotlinx.coroutines.experimental.runBlocking
import kotlin.script.experimental.api.*
abstract class BasicScriptingHost(
val scriptDefinition: ScriptDefinition,
val compiler: ScriptCompiler,
val evaluator: ScriptEvaluator
) {
@@ -30,7 +31,6 @@ abstract class BasicScriptingHost(
open fun eval(
script: ScriptSource,
scriptDefinition: ScriptDefinition,
compileConfiguration: ScriptCompileConfiguration,
environment: ScriptEvaluationEnvironment
): ResultWithDiagnostics<EvaluationResult> =
@@ -5,10 +5,26 @@
package kotlin.script.experimental.jvmhost
import kotlin.script.experimental.api.KotlinType
import kotlin.script.experimental.api.ScriptDefinition
import kotlin.script.experimental.api.ScriptEvaluator
import kotlin.script.experimental.api.ScriptingEnvironment
import kotlin.script.experimental.definitions.createScriptDefinitionFromAnnotatedBaseClass
import kotlin.script.experimental.host.BasicScriptingHost
import kotlin.script.experimental.jvm.defaultJvmScriptingEnvironment
open class BasicJvmScriptingHost(
compiler: JvmScriptCompiler = JvmScriptCompiler(),
scriptDefinition: ScriptDefinition,
hostEnvironment: ScriptingEnvironment = defaultJvmScriptingEnvironment,
compiler: JvmScriptCompiler = JvmScriptCompiler(hostEnvironment),
evaluator: ScriptEvaluator = BasicJvmScriptEvaluator()
) : BasicScriptingHost(compiler, evaluator)
) : BasicScriptingHost(scriptDefinition, compiler, evaluator)
inline fun <reified T : Any> makeBasicHostFromAnnotatedScriptBaseClass(
hostEnvironment: ScriptingEnvironment = defaultJvmScriptingEnvironment
) =
BasicJvmScriptingHost(
createScriptDefinitionFromAnnotatedBaseClass(KotlinType(T::class), hostEnvironment),
hostEnvironment
)