Implement simplified property bag dsl:

move it to the separate jar,
use property bag chaining
This commit is contained in:
Ilya Chernikov
2018-03-27 23:49:07 +02:00
parent 495c75c48e
commit 2ddcc280a9
20 changed files with 124 additions and 119 deletions
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.script.examples.jvm.resolve.maven.host
import org.jetbrains.kotlin.script.examples.jvm.resolve.maven.MyScriptWithMavenDeps
import org.jetbrains.kotlin.script.examples.jvm.resolve.maven.myJvmConfig
import org.jetbrains.kotlin.script.examples.jvm.resolve.maven.myJvmConfigParams
import java.io.File
import kotlin.script.experimental.api.*
import kotlin.script.experimental.definitions.ScriptDefinitionFromAnnotatedBaseClass
@@ -28,7 +28,7 @@ fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> {
scriptDefinition.evaluator
)
return host.eval(scriptFile.toScriptSource(), myJvmConfig(), ScriptEvaluationEnvironment())
return host.eval(scriptFile.toScriptSource(), ChainedPropertyBag(null, myJvmConfigParams), ScriptEvaluationEnvironment())
}
fun main(vararg args: String) {
@@ -18,6 +18,7 @@ import kotlin.script.experimental.annotations.KotlinScriptEvaluator
import kotlin.script.experimental.api.*
import kotlin.script.experimental.jvm.*
import kotlin.script.experimental.jvm.runners.BasicJvmScriptEvaluator
import kotlin.script.experimental.misc.*
@KotlinScript
@KotlinScriptCompilationConfigurator(MyConfigurator::class)
@@ -26,32 +27,30 @@ abstract class MyScriptWithMavenDeps {
// abstract fun body(vararg args: String): Int
}
inline fun myJvmConfig(
from: ChainedPropertyBag = ChainedPropertyBag(),
crossinline body: JvmScriptCompileConfigurationParams.Builder.() -> Unit = {}
) = jvmConfigWithJavaHome(from) {
signature<MyScriptWithMavenDeps>()
ScriptCompileConfigurationParams.importedPackages(listOf(DependsOn::class.qualifiedName!!, Repository::class.qualifiedName!!))
dependencies(
scriptCompilationClasspathFromContext(
"script", // script library jar name
"kotlin-script-util" // DependsOn annotation is taken from script-util
)
val myJvmConfigParams = jvmJavaHomeParams + with(ScriptCompileConfigurationParams) {
listOf(
scriptSignature to ScriptSignature(MyScriptWithMavenDeps::class, ProvidedDeclarations()),
importedPackages(DependsOn::class.qualifiedName!!, Repository::class.qualifiedName!!),
dependencies(
JvmDependency(
scriptCompilationClasspathFromContext(
"script", // script library jar name
"kotlin-script-util" // DependsOn annotation is taken from script-util
)
)
),
updateConfigurationOnAnnotations(DependsOn::class, Repository::class)
)
ScriptCompileConfigurationParams.updateConfigurationOnAnnotations(listOf(DependsOn::class, Repository::class))
body()
}
class MyConfigurator(val environment: ChainedPropertyBag) : ScriptCompilationConfigurator {
private val resolver = FilesAndMavenResolver()
override val defaultConfiguration = myJvmConfig {
add(ScriptCompileConfigurationParams.baseClass to environment[ScriptingEnvironmentProperties.baseClass])
}
override val defaultConfiguration = ChainedPropertyBag(environment, myJvmConfigParams)
override suspend fun baseConfiguration(scriptSource: ScriptSource): ResultWithDiagnostics<ScriptCompileConfiguration> =
myJvmConfig(defaultConfiguration) { add(scriptSource.toConfigEntry()) }.asSuccess()
defaultConfiguration.asSuccess()
override suspend fun refineConfiguration(
configuration: ScriptCompileConfiguration,
@@ -76,7 +75,7 @@ class MyConfigurator(val environment: ChainedPropertyBag) : ScriptCompilationCon
val newDependency = JvmDependency(resolvedClasspath)
val updatedDeps =
configuration.getOrNull(ScriptCompileConfigurationParams.dependencies)?.plus(newDependency) ?: listOf(newDependency)
configuration.cloneWith(ScriptCompileConfigurationParams.dependencies to updatedDeps).asSuccess(diagnostics)
ChainedPropertyBag(configuration, ScriptCompileConfigurationParams.dependencies(updatedDeps)).asSuccess(diagnostics)
} catch (e: Throwable) {
ResultWithDiagnostics.Failure(*diagnostics.toTypedArray(), e.asDiagnostics())
}
@@ -1 +1 @@
import org.jetbrains.kotlin.gradle.dsl.Coroutines
import org.jetbrains.kotlin.gradle.dsl.Coroutines
@@ -13,14 +13,13 @@ import kotlin.script.experimental.definitions.ScriptDefinitionFromAnnotatedBaseC
import kotlin.script.experimental.host.toScriptSource
import kotlin.script.experimental.jvm.*
import kotlin.script.experimental.jvmhost.impl.KJVMCompilerImpl
import kotlin.script.experimental.misc.*
inline fun myJvmConfig(
from: ChainedPropertyBag = ChainedPropertyBag(),
crossinline body: JvmScriptCompileConfigurationParams.Builder.() -> Unit = {}
) = jvmConfigWithJavaHome(from) {
signature<MyScript>()
dependencies(scriptCompilationClasspathFromContext("script" /* script library jar name */))
body()
val myJvmConfigParams = jvmJavaHomeParams + with(ScriptCompileConfigurationParams) {
listOf(
scriptSignature to ScriptSignature(MyScript::class, ProvidedDeclarations()),
dependencies(JvmDependency(scriptCompilationClasspathFromContext("script" /* script library jar name */)))
)
}
fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> {
@@ -35,7 +34,7 @@ fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> {
scriptDefinition.evaluator
)
return host.eval(scriptFile.toScriptSource(), myJvmConfig(), ScriptEvaluationEnvironment())
return host.eval(scriptFile.toScriptSource(), ChainedPropertyBag(null, myJvmConfigParams), ScriptEvaluationEnvironment())
}
fun main(vararg args: String) {