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 daa362e6f69..4fd94e94113 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 @@ -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 { scriptDefinition.evaluator ) - return host.eval(scriptFile.toScriptSource(), myJvmConfig(), ScriptEvaluationEnvironment()) + return host.eval(scriptFile.toScriptSource(), ChainedPropertyBag(null, myJvmConfigParams), ScriptEvaluationEnvironment()) } fun main(vararg args: String) { diff --git a/libraries/examples/scripting/jvm-maven-deps/script/build.gradle.kts b/libraries/examples/scripting/jvm-maven-deps/script/build.gradle.kts index 0a5677efbeb..bb8991bf685 100644 --- a/libraries/examples/scripting/jvm-maven-deps/script/build.gradle.kts +++ b/libraries/examples/scripting/jvm-maven-deps/script/build.gradle.kts @@ -1 +1 @@ - plugins { kotlin("jvm") } dependencies { compile(project(":kotlin-scripting-jvm")) compile(project(":kotlin-script-util")) runtime("com.jcabi:jcabi-aether:0.10.1") runtime("org.sonatype.aether:aether-api:1.13.1") runtime("org.apache.maven:maven-core:3.0.3") } sourceSets { "main" { projectDefault() } "test" { } } \ No newline at end of file + plugins { kotlin("jvm") } dependencies { compile(project(":kotlin-scripting-jvm")) compile(project(":kotlin-scripting-misc")) compile(project(":kotlin-script-util")) runtime("com.jcabi:jcabi-aether:0.10.1") runtime("org.sonatype.aether:aether-api:1.13.1") runtime("org.apache.maven:maven-core:3.0.3") } sourceSets { "main" { projectDefault() } "test" { } } \ No newline at end of file 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 bc5991416f5..c70ea30d61f 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 @@ -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() - 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 = - 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()) } diff --git a/libraries/examples/scripting/jvm-simple-script/host/build.gradle.kts b/libraries/examples/scripting/jvm-simple-script/host/build.gradle.kts index 04661df7fb9..4986dedb9b8 100644 --- a/libraries/examples/scripting/jvm-simple-script/host/build.gradle.kts +++ b/libraries/examples/scripting/jvm-simple-script/host/build.gradle.kts @@ -1 +1 @@ -import org.jetbrains.kotlin.gradle.dsl.Coroutines plugins { kotlin("jvm") } dependencies { compile(project(":examples:scripting-jvm-simple-script:script")) compile(project(":kotlin-scripting-jvm-host")) compile(project(":kotlin-script-util")) runtime(projectDist(":kotlin-compiler")) testCompile(commonDep("junit")) } sourceSets { "main" { projectDefault() } "test" { projectDefault() } } kotlin { experimental.coroutines = Coroutines.ENABLE } \ No newline at end of file +import org.jetbrains.kotlin.gradle.dsl.Coroutines plugins { kotlin("jvm") } dependencies { compile(project(":examples:scripting-jvm-simple-script:script")) compile(project(":kotlin-scripting-jvm-host")) compile(project(":kotlin-scripting-misc")) compile(project(":kotlin-script-util")) runtime(projectDist(":kotlin-compiler")) testCompile(commonDep("junit")) } sourceSets { "main" { projectDefault() } "test" { projectDefault() } } kotlin { experimental.coroutines = Coroutines.ENABLE } \ No newline at end of file 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 651d6ff1566..cdaec6321f2 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 @@ -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() - 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 { @@ -35,7 +34,7 @@ fun evalFile(scriptFile: File): ResultWithDiagnostics { scriptDefinition.evaluator ) - return host.eval(scriptFile.toScriptSource(), myJvmConfig(), ScriptEvaluationEnvironment()) + return host.eval(scriptFile.toScriptSource(), ChainedPropertyBag(null, myJvmConfigParams), ScriptEvaluationEnvironment()) } fun main(vararg args: String) { diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptConfigurationParams.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptConfigurationParams.kt index 02ac0a5e0b3..0ddf49aa995 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptConfigurationParams.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptConfigurationParams.kt @@ -30,11 +30,5 @@ object ScriptCompileConfigurationParams { val updateConfigurationOnAnnotations by typedKey>>() val updateConfigurationOnSections by typedKey>() - - open class Builder(parentBuilder: PropertyBagBuilder? = null) : PropertyBagBuilder(parentBuilder) { - inline fun signature(providedDeclarations: ProvidedDeclarations = ProvidedDeclarations.Empty) { - add(scriptSignature to ScriptSignature(T::class, providedDeclarations)) - } - } } diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptDefinitionProperties.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptDefinitionProperties.kt index 712f50cb70d..0205fb7d068 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptDefinitionProperties.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptDefinitionProperties.kt @@ -7,12 +7,10 @@ package kotlin.script.experimental.api -object ScriptDefinitionProperties : PropertiesBase() { +object ScriptDefinitionProperties { val name by typedKey() val fileExtension by typedKey() - - open class Builder(parentBuilder: PropertyBagBuilder? = null) : PropertyBagBuilder(parentBuilder) } 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 22c770f602a..bb924ed5957 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptEvaluation.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptEvaluation.kt @@ -7,21 +7,16 @@ package kotlin.script.experimental.api -open class ScriptEvaluationEnvironmentParams : PropertyBagBuilder() { - companion object { - val implicitReceivers by typedKey>() +object ScriptEvaluationEnvironmentParams { + val implicitReceivers by typedKey>() - val contextVariables by typedKey>() // external variables + val contextVariables by typedKey>() // external variables - val constructorArgs by typedKey>() + val constructorArgs by typedKey>() - val runArgs by typedKey>() - } + val runArgs by typedKey>() } -inline fun scriptEvaluationEnvironment(from: ChainedPropertyBag = ChainedPropertyBag(), body: ScriptEvaluationEnvironmentParams.() -> Unit) = - ScriptEvaluationEnvironmentParams().build(from, body) - typealias ScriptEvaluationEnvironment = ChainedPropertyBag data class EvaluationResult(val returnValue: Any?, val environment: ScriptEvaluationEnvironment) diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptProcessedDataParams.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptProcessedDataParams.kt index 4885ba5a4e2..463afb63830 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptProcessedDataParams.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptProcessedDataParams.kt @@ -5,13 +5,8 @@ package kotlin.script.experimental.api -class ProcessedScriptDataParams : PropertyBagBuilder() { - companion object { - val annotations by typedKey>() +object ProcessedScriptDataParams { + val annotations by typedKey>() - val fragments by typedKey>() - } + val fragments by typedKey>() } - -inline fun processedScriptData(from: ChainedPropertyBag = ChainedPropertyBag(), body: ProcessedScriptDataParams.() -> Unit) = - ProcessedScriptDataParams().build(from, body) \ No newline at end of file diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptUtil.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptUtil.kt index aab02c62b88..8aff1b3bc0a 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptUtil.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptUtil.kt @@ -6,7 +6,6 @@ package kotlin.script.experimental.api import kotlin.reflect.KProperty -import kotlin.reflect.full.primaryConstructor data class TypedKey(val name: String) @@ -16,41 +15,23 @@ class TypedKeyDelegate { fun typedKey() = TypedKeyDelegate() -class ChainedPropertyBag(private val parent: ChainedPropertyBag? = null, private val data: Map, Any?> = hashMapOf()) { - constructor(data: Map, Any?>) : this(null, data) - constructor(parent: ChainedPropertyBag?, pairs: Iterable, Any?>>) : this( - parent, - HashMap, Any?>().also { - it.putAll(pairs) - }) +class ChainedPropertyBag(private val parent: ChainedPropertyBag? = null, pairs: Iterable, Any?>>) { + constructor(parent: ChainedPropertyBag, vararg pairs: Pair, Any?>) : this(parent, pairs.asIterable()) + constructor(vararg pairs: Pair, Any?>) : this(null, pairs.asIterable()) - constructor(parent: ChainedPropertyBag?, vararg pairs: Pair, Any?>) : this(parent, hashMapOf(*pairs)) + private val data = HashMap, Any?>().also { it.putAll(pairs) } - operator fun get(key: TypedKey): T = + inline operator fun get(key: TypedKey): T = getUnchecked(key) as T + + fun getUnchecked(key: TypedKey): Any? = when { - data.containsKey(key) -> data[key] as T - parent != null -> parent[key] + data.containsKey(key) -> data[key] + parent != null -> parent.getUnchecked(key) else -> throw IllegalArgumentException("Unknown key $key") } - fun getOrNull(key: TypedKey): T? = data[key] as T? ?: parent?.getOrNull(key) + inline fun getOrNull(key: TypedKey): T? = getOrNullUnchecked(key)?.let { it as T } + + fun getOrNullUnchecked(key: TypedKey): Any? = data[key] ?: parent?.getOrNullUnchecked(key) } -open class PropertyBagBuilder(private val parentBuilder: PropertyBagBuilder? = null) { - val pairs: MutableList, Any?>> = arrayListOf() - - open operator fun TypedKey.invoke(v: T) { - pairs.add(this to v) - } - - fun add(pair: Pair, Any?>) { - pairs.add(pair) - } - - fun getAllPairs() = if (parentBuilder == null) pairs else parentBuilder.pairs + pairs -} - -inline fun T.build(parent: ChainedPropertyBag? = null, body: T.() -> Unit): ChainedPropertyBag { - body() - return ChainedPropertyBag(parent, getAllPairs()) -} diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptingEnvironment.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptingEnvironment.kt index 3a233777ea5..4cc564dc69e 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptingEnvironment.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptingEnvironment.kt @@ -11,7 +11,5 @@ object ScriptingEnvironmentProperties { // required by definitions that extract data from script base class annotations val baseClass by typedKey>() - - open class Builder(parentBuilder: PropertyBagBuilder? = null) : PropertyBagBuilder(parentBuilder) } diff --git a/libraries/scripting/common/src/kotlin/script/experimental/definitions/scriptDefinitions.kt b/libraries/scripting/common/src/kotlin/script/experimental/definitions/scriptDefinitions.kt index 7d07b76389c..e195857d553 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/definitions/scriptDefinitions.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/definitions/scriptDefinitions.kt @@ -35,7 +35,7 @@ open class ScriptDefinitionFromAnnotatedBaseClass(val environment: ChainedProper if (properties.getOrNull(ScriptDefinitionProperties.name) == null) { toAdd += ScriptDefinitionProperties.name to baseClass.simpleName!! } - properties.cloneWith(toAdd) + ChainedPropertyBag(properties, toAdd) } override val compilationConfigurator = diff --git a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJVMCompilerImpl.kt b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJVMCompilerImpl.kt index 91ddc76541d..b7dc14588eb 100644 --- a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJVMCompilerImpl.kt +++ b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/impl/KJVMCompilerImpl.kt @@ -87,7 +87,8 @@ class KJVMCompilerImpl : KJVMCompilerProxy { val updatedDeps = updatedScriptCompileConfiguration.getOrNull(ScriptCompileConfigurationParams.dependencies)?.plus( JvmDependency(classpath) ) ?: listOf(JvmDependency(classpath)) - updatedScriptCompileConfiguration = updatedScriptCompileConfiguration.cloneWith( + updatedScriptCompileConfiguration = ChainedPropertyBag( + updatedScriptCompileConfiguration, ScriptCompileConfigurationParams.dependencies to updatedDeps ) } diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt index 3ac61b66c65..f9cb5a63c76 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/impl/BridgeDependenciesResolver.kt @@ -38,7 +38,8 @@ class BridgeDependenciesResolver( val processedScriptData = ProcessedScriptData(ProcessedScriptDataParams.annotations to scriptContents.annotations) - val scriptCompilerConfiguration = baseScriptCompilerConfiguration.cloneWith( + val scriptCompilerConfiguration = ChainedPropertyBag( + baseScriptCompilerConfiguration, ScriptCompileConfigurationParams.scriptSourceFragments to scriptContents.toScriptSourceFragments() ) diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptConfiguration.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptConfiguration.kt index 52d5236d281..e4ac6c44307 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptConfiguration.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptConfiguration.kt @@ -8,16 +8,10 @@ package kotlin.script.experimental.jvm import kotlinx.coroutines.experimental.runBlocking import kotlin.script.experimental.api.* import java.io.File -import kotlin.script.experimental.jvm.JvmScriptCompileConfigurationParams.javaHomeDir -inline fun jvmConfigWithJavaHome( - from: ChainedPropertyBag = ChainedPropertyBag(), - crossinline body: JvmScriptCompileConfigurationParams.Builder.() -> Unit = {} -) = - jvmScriptConfiguration(from) { - javaHomeDir(File(System.getProperty("java.home"))) - body() - } +val jvmJavaHomeParams = with(JvmScriptCompileConfigurationParams) { + listOf(javaHomeDir to File(System.getProperty("java.home"))) +} val ScriptCompilationConfigurator?.defaultConfiguration: ScriptCompileConfiguration get() = this?.let { runBlocking { defaultConfiguration } } ?: ScriptCompileConfiguration() \ No newline at end of file diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptData.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptData.kt index 8faf8e7c952..f09ae218fe8 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptData.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptData.kt @@ -6,19 +6,12 @@ package kotlin.script.experimental.jvm import java.io.File -import kotlin.script.experimental.api.* +import kotlin.script.experimental.api.ScriptDependency +import kotlin.script.experimental.api.typedKey object JvmScriptCompileConfigurationParams { val javaHomeDir by typedKey() - - open class Builder : ScriptCompileConfigurationParams.Builder() { - fun dependencies(vararg classpath: Iterable) = - add(ScriptCompileConfigurationParams.dependencies to classpath.map(::JvmDependency)) - } } -inline fun jvmScriptConfiguration(from: ChainedPropertyBag = ChainedPropertyBag(), body: JvmScriptCompileConfigurationParams.Builder.() -> Unit) = - JvmScriptCompileConfigurationParams.Builder().build(from, body) - class JvmDependency(val classpath: Iterable) : ScriptDependency 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 8026bf844a1..f8e42dcc9d0 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptEvaluation.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/jvmScriptEvaluation.kt @@ -7,7 +7,9 @@ package kotlin.script.experimental.jvm -import kotlin.script.experimental.api.* +import kotlin.script.experimental.api.ScriptCompilationConfigurator +import kotlin.script.experimental.api.ScriptEvaluator +import kotlin.script.experimental.api.typedKey import kotlin.script.experimental.host.BasicScriptingHost open class JvmBasicScriptingHost( @@ -16,11 +18,6 @@ open class JvmBasicScriptingHost( evaluator: ScriptEvaluator ) : BasicScriptingHost(configurationExtractor, compiler, evaluator) -class JvmScriptEvaluationEnvironmentParams : ScriptEvaluationEnvironmentParams() { - companion object { - val baseClassLoader by typedKey() - } +object JvmScriptEvaluationEnvironmentParams { + val baseClassLoader by typedKey() } - -inline fun jvmScriptEvaluationEnvironment(from: ChainedPropertyBag = ChainedPropertyBag(), body: JvmScriptEvaluationEnvironmentParams.() -> Unit) = - JvmScriptEvaluationEnvironmentParams().build(from, body) diff --git a/libraries/scripting/misc/build.gradle.kts b/libraries/scripting/misc/build.gradle.kts new file mode 100644 index 00000000000..cd0d0ea74fd --- /dev/null +++ b/libraries/scripting/misc/build.gradle.kts @@ -0,0 +1,28 @@ +import org.jetbrains.kotlin.gradle.dsl.Coroutines + +plugins { + kotlin("jvm") +} + +jvmTarget = "1.6" + +dependencies { + compile(project(":kotlin-script-runtime")) + compile(projectDist(":kotlin-stdlib")) + compile(project(":kotlin-scripting-common")) +} + +sourceSets { + "main" { projectDefault() } + "test" {} +} + +kotlin.experimental.coroutines = Coroutines.ENABLE + +dist() + +ideaPlugin() + +standardPublicJars() + +publish() diff --git a/libraries/scripting/misc/src/kotlin/script/experimental/misc/propertiesDsl.kt b/libraries/scripting/misc/src/kotlin/script/experimental/misc/propertiesDsl.kt new file mode 100644 index 00000000000..b0dde13958b --- /dev/null +++ b/libraries/scripting/misc/src/kotlin/script/experimental/misc/propertiesDsl.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2010-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.misc + +import kotlin.reflect.KClass +import kotlin.script.experimental.api.TypedKey + + +inline operator fun TypedKey.invoke(v: T): Pair, T> = this to v + +inline operator fun TypedKey>.invoke(): Pair>, KClass<*>> = this to K::class + +inline operator fun TypedKey>.invoke(vararg vs: E): Pair>, List> = this to vs.toList() + +@JvmName("invokeIterable") +inline operator fun TypedKey>.invoke(vararg vs: E): Pair>, Iterable> = this to vs.toList() + +// TODO: make tests from examples below +/* +val x = with(kotlin.script.experimental.api.ScriptingEnvironmentProperties) { + baseClass() +} + +val y = with(kotlin.script.experimental.api.ScriptCompileConfigurationParams) { + importedPackages("a1", "a2") +} +*/ \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index cc7b7cbb933..b7f7e2f13a4 100644 --- a/settings.gradle +++ b/settings.gradle @@ -151,6 +151,7 @@ include ":kotlin-build-common", ":kotlin-annotations-jvm", ":kotlin-annotations-android", ":kotlin-scripting-common", + ":kotlin-scripting-misc", ":kotlin-scripting-jvm", ":kotlin-scripting-jvm-host", ":kotlin-scripting-compiler", @@ -255,6 +256,7 @@ project(':examples:kotlin-jsr223-daemon-local-eval-example').projectDir = "$root project(':kotlin-annotations-jvm').projectDir = "$rootDir/libraries/tools/kotlin-annotations-jvm" as File project(':kotlin-annotations-android').projectDir = "$rootDir/libraries/tools/kotlin-annotations-android" as File project(':kotlin-scripting-common').projectDir = "$rootDir/libraries/scripting/common" as File +project(':kotlin-scripting-misc').projectDir = "$rootDir/libraries/scripting/misc" as File project(':kotlin-scripting-jvm').projectDir = "$rootDir/libraries/scripting/jvm" as File project(':kotlin-scripting-jvm-host').projectDir = "$rootDir/libraries/scripting/jvm-host" as File project(':kotlin-scripting-compiler').projectDir = "$rootDir/plugins/scripting/scripting-cli" as File