From 3fb3aa5ad18757f7eae9800fb042a9f635b776eb Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Mon, 23 Jul 2018 16:05:49 +0200 Subject: [PATCH] Setup props once, fix initialization problem --- .../script/examples/jvm/resolve/maven/scriptDef.kt | 2 +- .../src/kotlin/script/experimental/api/propertiesDsl.kt | 9 +++++++-- .../experimental/definitions/definitionFromAnnotation.kt | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) 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 906c4da99ca..94240cf3c93 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 @@ -27,7 +27,7 @@ abstract class MyScriptWithMavenDeps { // abstract fun body(vararg args: String): Int } -object MyScriptProperties : ScriptingProperties() { +class MyScriptProperties : ScriptingProperties() { override fun setup() { scriptDefinition { defaultImports() diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/propertiesDsl.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/propertiesDsl.kt index 5ced4a76186..0c32d9cdfeb 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/propertiesDsl.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/propertiesDsl.kt @@ -33,7 +33,12 @@ open class ScriptingProperties(body: ScriptingProperties.() -> Unit = {}) { init { body() - setup() // TODO: does it work? + setupOnce() // TODO: does it work? + } + + private var isSetUp = false + fun setupOnce() { + if (!isSetUp) setup() } open fun setup() {} @@ -78,7 +83,7 @@ open class ScriptingProperties(body: ScriptingProperties.() -> Unit = {}) { // inclusion: fun include(props: ScriptingProperties) { - props.setup() + props.setupOnce() data.putAll(props.data) } 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 60b63db0428..5a58b8c3899 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/definitions/definitionFromAnnotation.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/definitions/definitionFromAnnotation.kt @@ -61,7 +61,7 @@ fun createScriptDefinitionFromAnnotatedBaseClass( } fun scriptingPropsInstance(kclass: KClass): ScriptingProperties = try { - kclass.objectInstance ?: kclass.createInstance().also { it.setup() } + kclass.objectInstance ?: kclass.createInstance().also { it.setupOnce() } } catch (e: Throwable) { throw IllegalArgumentException(ILLEGAL_CONFIG_ANN_ARG, e) }