Hot-fix for scheme initialization
This commit is contained in:
parent
196b394278
commit
66ce15ae6d
@ -8,7 +8,7 @@ plugins {
|
|||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
group = "space.kscience"
|
group = "space.kscience"
|
||||||
version = "0.8.0"
|
version = "0.8.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
subprojects {
|
subprojects {
|
||||||
|
@ -42,7 +42,7 @@ internal class ActionsTest {
|
|||||||
source.wrap(it.toString(), it)
|
source.wrap(it.toString(), it)
|
||||||
}
|
}
|
||||||
|
|
||||||
delay(10)
|
delay(20)
|
||||||
|
|
||||||
source.close()
|
source.close()
|
||||||
result.awaitClose()
|
result.awaitClose()
|
||||||
|
@ -433,6 +433,7 @@ public final class space/kscience/dataforge/meta/MutableMetaDelegateKt {
|
|||||||
public final class space/kscience/dataforge/meta/MutableMetaKt {
|
public final class space/kscience/dataforge/meta/MutableMetaKt {
|
||||||
public static final fun ObservableMutableMeta ()Lspace/kscience/dataforge/meta/ObservableMutableMeta;
|
public static final fun ObservableMutableMeta ()Lspace/kscience/dataforge/meta/ObservableMutableMeta;
|
||||||
public static final fun ObservableMutableMeta (Lkotlin/jvm/functions/Function1;)Lspace/kscience/dataforge/meta/ObservableMutableMeta;
|
public static final fun ObservableMutableMeta (Lkotlin/jvm/functions/Function1;)Lspace/kscience/dataforge/meta/ObservableMutableMeta;
|
||||||
|
public static final fun ObservableMutableMeta (Lspace/kscience/dataforge/meta/Meta;)Lspace/kscience/dataforge/meta/ObservableMutableMeta;
|
||||||
public static synthetic fun ObservableMutableMeta$default (Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/dataforge/meta/ObservableMutableMeta;
|
public static synthetic fun ObservableMutableMeta$default (Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/dataforge/meta/ObservableMutableMeta;
|
||||||
public static final fun append (Lspace/kscience/dataforge/meta/MutableMeta;Ljava/lang/String;Lspace/kscience/dataforge/meta/Meta;)V
|
public static final fun append (Lspace/kscience/dataforge/meta/MutableMeta;Ljava/lang/String;Lspace/kscience/dataforge/meta/Meta;)V
|
||||||
public static final fun append (Lspace/kscience/dataforge/meta/MutableMeta;Ljava/lang/String;Lspace/kscience/dataforge/meta/Value;)V
|
public static final fun append (Lspace/kscience/dataforge/meta/MutableMeta;Ljava/lang/String;Lspace/kscience/dataforge/meta/Value;)V
|
||||||
@ -538,6 +539,8 @@ public final class space/kscience/dataforge/meta/RegexItemTransformationRule : s
|
|||||||
|
|
||||||
public class space/kscience/dataforge/meta/Scheme : space/kscience/dataforge/meta/Configurable, space/kscience/dataforge/meta/MetaRepr, space/kscience/dataforge/meta/MutableMetaProvider, space/kscience/dataforge/meta/descriptors/Described {
|
public class space/kscience/dataforge/meta/Scheme : space/kscience/dataforge/meta/Configurable, space/kscience/dataforge/meta/MetaRepr, space/kscience/dataforge/meta/MutableMetaProvider, space/kscience/dataforge/meta/descriptors/Described {
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
|
public fun <init> (Lspace/kscience/dataforge/meta/Meta;Lspace/kscience/dataforge/meta/descriptors/MetaDescriptor;)V
|
||||||
|
public synthetic fun <init> (Lspace/kscience/dataforge/meta/Meta;Lspace/kscience/dataforge/meta/descriptors/MetaDescriptor;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||||
public synthetic fun get (Lspace/kscience/dataforge/names/Name;)Lspace/kscience/dataforge/meta/Meta;
|
public synthetic fun get (Lspace/kscience/dataforge/names/Name;)Lspace/kscience/dataforge/meta/Meta;
|
||||||
public fun get (Lspace/kscience/dataforge/names/Name;)Lspace/kscience/dataforge/meta/MutableMeta;
|
public fun get (Lspace/kscience/dataforge/names/Name;)Lspace/kscience/dataforge/meta/MutableMeta;
|
||||||
public final fun getDescriptor ()Lspace/kscience/dataforge/meta/descriptors/MetaDescriptor;
|
public final fun getDescriptor ()Lspace/kscience/dataforge/meta/descriptors/MetaDescriptor;
|
||||||
@ -555,6 +558,10 @@ public final class space/kscience/dataforge/meta/SchemeKt {
|
|||||||
public static final fun copy (Lspace/kscience/dataforge/meta/Scheme;Lspace/kscience/dataforge/meta/SchemeSpec;Lkotlin/jvm/functions/Function1;)Lspace/kscience/dataforge/meta/Scheme;
|
public static final fun copy (Lspace/kscience/dataforge/meta/Scheme;Lspace/kscience/dataforge/meta/SchemeSpec;Lkotlin/jvm/functions/Function1;)Lspace/kscience/dataforge/meta/Scheme;
|
||||||
public static synthetic fun copy$default (Lspace/kscience/dataforge/meta/Scheme;Lspace/kscience/dataforge/meta/SchemeSpec;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/dataforge/meta/Scheme;
|
public static synthetic fun copy$default (Lspace/kscience/dataforge/meta/Scheme;Lspace/kscience/dataforge/meta/SchemeSpec;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/dataforge/meta/Scheme;
|
||||||
public static final fun invoke (Lspace/kscience/dataforge/meta/Scheme;Lkotlin/jvm/functions/Function1;)Lspace/kscience/dataforge/meta/Scheme;
|
public static final fun invoke (Lspace/kscience/dataforge/meta/Scheme;Lkotlin/jvm/functions/Function1;)Lspace/kscience/dataforge/meta/Scheme;
|
||||||
|
public static final fun listOfScheme (Lspace/kscience/dataforge/meta/MutableMeta;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;)Lkotlin/properties/ReadWriteProperty;
|
||||||
|
public static final fun listOfScheme (Lspace/kscience/dataforge/meta/Scheme;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;)Lkotlin/properties/ReadWriteProperty;
|
||||||
|
public static synthetic fun listOfScheme$default (Lspace/kscience/dataforge/meta/MutableMeta;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;ILjava/lang/Object;)Lkotlin/properties/ReadWriteProperty;
|
||||||
|
public static synthetic fun listOfScheme$default (Lspace/kscience/dataforge/meta/Scheme;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;ILjava/lang/Object;)Lkotlin/properties/ReadWriteProperty;
|
||||||
public static final fun scheme (Lspace/kscience/dataforge/meta/MutableMeta;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;)Lkotlin/properties/ReadWriteProperty;
|
public static final fun scheme (Lspace/kscience/dataforge/meta/MutableMeta;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;)Lkotlin/properties/ReadWriteProperty;
|
||||||
public static final fun scheme (Lspace/kscience/dataforge/meta/Scheme;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;)Lkotlin/properties/ReadWriteProperty;
|
public static final fun scheme (Lspace/kscience/dataforge/meta/Scheme;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;)Lkotlin/properties/ReadWriteProperty;
|
||||||
public static synthetic fun scheme$default (Lspace/kscience/dataforge/meta/MutableMeta;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;ILjava/lang/Object;)Lkotlin/properties/ReadWriteProperty;
|
public static synthetic fun scheme$default (Lspace/kscience/dataforge/meta/MutableMeta;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;ILjava/lang/Object;)Lkotlin/properties/ReadWriteProperty;
|
||||||
@ -837,7 +844,6 @@ public final class space/kscience/dataforge/meta/descriptors/MetaDescriptorBuild
|
|||||||
public final fun getDefault ()Lspace/kscience/dataforge/meta/Value;
|
public final fun getDefault ()Lspace/kscience/dataforge/meta/Value;
|
||||||
public final fun getDescription ()Ljava/lang/String;
|
public final fun getDescription ()Ljava/lang/String;
|
||||||
public final fun getIndexKey ()Ljava/lang/String;
|
public final fun getIndexKey ()Ljava/lang/String;
|
||||||
public final fun getInfo ()Ljava/lang/String;
|
|
||||||
public final fun getMultiple ()Z
|
public final fun getMultiple ()Z
|
||||||
public final fun getValueRestriction ()Lspace/kscience/dataforge/meta/descriptors/ValueRestriction;
|
public final fun getValueRestriction ()Lspace/kscience/dataforge/meta/descriptors/ValueRestriction;
|
||||||
public final fun getValueTypes ()Ljava/util/List;
|
public final fun getValueTypes ()Ljava/util/List;
|
||||||
@ -847,7 +853,6 @@ public final class space/kscience/dataforge/meta/descriptors/MetaDescriptorBuild
|
|||||||
public final fun setDefault (Lspace/kscience/dataforge/meta/Value;)V
|
public final fun setDefault (Lspace/kscience/dataforge/meta/Value;)V
|
||||||
public final fun setDescription (Ljava/lang/String;)V
|
public final fun setDescription (Ljava/lang/String;)V
|
||||||
public final fun setIndexKey (Ljava/lang/String;)V
|
public final fun setIndexKey (Ljava/lang/String;)V
|
||||||
public final fun setInfo (Ljava/lang/String;)V
|
|
||||||
public final fun setMultiple (Z)V
|
public final fun setMultiple (Z)V
|
||||||
public final fun setValueRestriction (Lspace/kscience/dataforge/meta/descriptors/ValueRestriction;)V
|
public final fun setValueRestriction (Lspace/kscience/dataforge/meta/descriptors/ValueRestriction;)V
|
||||||
public final fun setValueTypes (Ljava/util/List;)V
|
public final fun setValueTypes (Ljava/util/List;)V
|
||||||
|
@ -378,6 +378,11 @@ public fun Meta.asMutableMeta(): MutableMeta = (this as? MutableMeta) ?: toMutab
|
|||||||
@JsName("newObservableMutableMeta")
|
@JsName("newObservableMutableMeta")
|
||||||
public fun ObservableMutableMeta(): ObservableMutableMeta = MutableMetaImpl(null)
|
public fun ObservableMutableMeta(): ObservableMutableMeta = MutableMetaImpl(null)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a pre-filled [ObservableMutableMeta]
|
||||||
|
*/
|
||||||
|
public fun ObservableMutableMeta(content: Meta): ObservableMutableMeta = ObservableMutableMeta { update(content) }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build a [MutableMeta] using given transformation
|
* Build a [MutableMeta] using given transformation
|
||||||
*/
|
*/
|
||||||
|
@ -13,32 +13,28 @@ import kotlin.reflect.KProperty1
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A base for delegate-based or descriptor-based scheme. [Scheme] has an empty constructor to simplify usage from [MetaSpec].
|
* A base for delegate-based or descriptor-based scheme. [Scheme] has an empty constructor to simplify usage from [MetaSpec].
|
||||||
* Default item provider and [MetaDescriptor] are optional
|
*
|
||||||
|
* @param prototype default values provided by this scheme
|
||||||
*/
|
*/
|
||||||
public open class Scheme : Described, MetaRepr, MutableMetaProvider, Configurable {
|
public open class Scheme(
|
||||||
|
private var prototype: Meta? = null,
|
||||||
|
descriptor: MetaDescriptor? = null
|
||||||
|
) : Described, MetaRepr, MutableMetaProvider, Configurable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Meta to be mutated by this scheme
|
* Meta to be mutated by this scheme
|
||||||
*/
|
*/
|
||||||
private var target: MutableMeta? = null
|
internal var target: MutableMeta = MutableMeta()
|
||||||
get() {
|
|
||||||
// automatic initialization of target if it is missing
|
|
||||||
if (field == null) {
|
|
||||||
field = MutableMeta()
|
|
||||||
}
|
|
||||||
return field
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default values provided by this scheme
|
* A descriptor of this scheme
|
||||||
*/
|
*/
|
||||||
private var prototype: Meta? = null
|
final override var descriptor: MetaDescriptor? = descriptor
|
||||||
|
private set
|
||||||
|
|
||||||
|
|
||||||
final override val meta: ObservableMutableMeta = SchemeMeta(Name.EMPTY)
|
final override val meta: ObservableMutableMeta = SchemeMeta(Name.EMPTY)
|
||||||
|
|
||||||
final override var descriptor: MetaDescriptor? = null
|
|
||||||
private set
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method must be called before the scheme could be used
|
* This method must be called before the scheme could be used
|
||||||
*/
|
*/
|
||||||
@ -90,7 +86,7 @@ public open class Scheme : Described, MetaRepr, MutableMetaProvider, Configurabl
|
|||||||
?: descriptor?.get(pathName)?.defaultValue
|
?: descriptor?.get(pathName)?.defaultValue
|
||||||
set(value) {
|
set(value) {
|
||||||
val oldValue = target[pathName]?.value
|
val oldValue = target[pathName]?.value
|
||||||
target!![pathName] = value
|
target[pathName] = value
|
||||||
if (oldValue != value) {
|
if (oldValue != value) {
|
||||||
invalidate(Name.EMPTY)
|
invalidate(Name.EMPTY)
|
||||||
}
|
}
|
||||||
@ -126,7 +122,7 @@ public open class Scheme : Described, MetaRepr, MutableMetaProvider, Configurabl
|
|||||||
override fun hashCode(): Int = Meta.hashCode(this)
|
override fun hashCode(): Int = Meta.hashCode(this)
|
||||||
|
|
||||||
override fun set(name: Name, node: Meta?) {
|
override fun set(name: Name, node: Meta?) {
|
||||||
target!![name] = node
|
target[name] = node
|
||||||
invalidate(name)
|
invalidate(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,15 +172,19 @@ public open class SchemeSpec<T : Scheme>(
|
|||||||
it.initialize(MutableMeta(), source, descriptor)
|
it.initialize(MutableMeta(), source, descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write changes made to the [Scheme] to target [MutableMeta]. If the empty [Scheme] contains any data it is copied to the target.
|
||||||
|
*/
|
||||||
public fun write(target: MutableMeta): T = empty().also {
|
public fun write(target: MutableMeta): T = empty().also {
|
||||||
|
target.update(it.meta)
|
||||||
it.initialize(target, Meta.EMPTY, descriptor)
|
it.initialize(target, Meta.EMPTY, descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate an empty object
|
* Generate a blank object. The object could contain some elements if they are defined in a constructor
|
||||||
*/
|
*/
|
||||||
public fun empty(): T = builder().also {
|
public fun empty(): T = builder().also {
|
||||||
it.initialize(MutableMeta(), Meta.EMPTY, descriptor)
|
it.initialize(MutableMeta(), it.target, descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun convert(obj: T): Meta = obj.meta
|
override fun convert(obj: T): Meta = obj.meta
|
||||||
@ -269,7 +269,6 @@ public fun <T : Scheme> Scheme.schemeOrNull(
|
|||||||
* If children are mutable, the changes in list elements are reflected on them.
|
* If children are mutable, the changes in list elements are reflected on them.
|
||||||
* The list is a snapshot of children state, so change in structure is not reflected on its composition.
|
* The list is a snapshot of children state, so change in structure is not reflected on its composition.
|
||||||
*/
|
*/
|
||||||
@DFExperimental
|
|
||||||
public fun <T : Scheme> MutableMeta.listOfScheme(
|
public fun <T : Scheme> MutableMeta.listOfScheme(
|
||||||
spec: SchemeSpec<T>,
|
spec: SchemeSpec<T>,
|
||||||
key: Name? = null,
|
key: Name? = null,
|
||||||
@ -286,7 +285,6 @@ public fun <T : Scheme> MutableMeta.listOfScheme(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@DFExperimental
|
|
||||||
public fun <T : Scheme> Scheme.listOfScheme(
|
public fun <T : Scheme> Scheme.listOfScheme(
|
||||||
spec: SchemeSpec<T>,
|
spec: SchemeSpec<T>,
|
||||||
key: Name? = null,
|
key: Name? = null,
|
||||||
|
@ -11,9 +11,6 @@ import kotlin.collections.set
|
|||||||
public class MetaDescriptorBuilder @PublishedApi internal constructor() {
|
public class MetaDescriptorBuilder @PublishedApi internal constructor() {
|
||||||
public var description: String? = null
|
public var description: String? = null
|
||||||
|
|
||||||
@Deprecated("Replace by description", ReplaceWith("description"))
|
|
||||||
public var info: String? by ::description
|
|
||||||
|
|
||||||
public var children: MutableMap<String, MetaDescriptorBuilder> = linkedMapOf()
|
public var children: MutableMap<String, MetaDescriptorBuilder> = linkedMapOf()
|
||||||
public var multiple: Boolean = false
|
public var multiple: Boolean = false
|
||||||
public var valueRestriction: ValueRestriction = ValueRestriction.NONE
|
public var valueRestriction: ValueRestriction = ValueRestriction.NONE
|
||||||
|
@ -3,11 +3,12 @@ package space.kscience.dataforge.meta.descriptors
|
|||||||
import space.kscience.dataforge.meta.Scheme
|
import space.kscience.dataforge.meta.Scheme
|
||||||
import space.kscience.dataforge.meta.SchemeSpec
|
import space.kscience.dataforge.meta.SchemeSpec
|
||||||
import space.kscience.dataforge.meta.ValueType
|
import space.kscience.dataforge.meta.ValueType
|
||||||
import space.kscience.dataforge.misc.DFExperimental
|
|
||||||
import kotlin.reflect.KProperty1
|
import kotlin.reflect.KProperty1
|
||||||
import kotlin.reflect.typeOf
|
import kotlin.reflect.typeOf
|
||||||
|
|
||||||
@DFExperimental
|
/**
|
||||||
|
* Add a value item to a [MetaDescriptor] inferring some of its properties from the type
|
||||||
|
*/
|
||||||
public inline fun <S : Scheme, reified T> MetaDescriptorBuilder.value(
|
public inline fun <S : Scheme, reified T> MetaDescriptorBuilder.value(
|
||||||
property: KProperty1<S, T>,
|
property: KProperty1<S, T>,
|
||||||
noinline block: MetaDescriptorBuilder.() -> Unit = {},
|
noinline block: MetaDescriptorBuilder.() -> Unit = {},
|
||||||
@ -39,7 +40,9 @@ public inline fun <S : Scheme, reified T> MetaDescriptorBuilder.value(
|
|||||||
else -> node(property.name, block)
|
else -> node(property.name, block)
|
||||||
}
|
}
|
||||||
|
|
||||||
@DFExperimental
|
/**
|
||||||
|
* Add a schem-based branch to a [MetaDescriptor]
|
||||||
|
*/
|
||||||
public inline fun <S : Scheme, reified T : Scheme> MetaDescriptorBuilder.scheme(
|
public inline fun <S : Scheme, reified T : Scheme> MetaDescriptorBuilder.scheme(
|
||||||
property: KProperty1<S, T>,
|
property: KProperty1<S, T>,
|
||||||
spec: SchemeSpec<T>,
|
spec: SchemeSpec<T>,
|
||||||
|
@ -5,7 +5,18 @@ import kotlin.test.Test
|
|||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
import kotlin.test.assertNotNull
|
import kotlin.test.assertNotNull
|
||||||
|
|
||||||
@DFExperimental
|
|
||||||
|
private class SchemeWithInit: Scheme(){
|
||||||
|
init {
|
||||||
|
set("initial", "initialValue")
|
||||||
|
}
|
||||||
|
|
||||||
|
var initial by string()
|
||||||
|
companion object: SchemeSpec<SchemeWithInit>(::SchemeWithInit)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SchemeTest {
|
class SchemeTest {
|
||||||
@Test
|
@Test
|
||||||
fun testSchemeWrappingBeforeEdit() {
|
fun testSchemeWrappingBeforeEdit() {
|
||||||
@ -15,6 +26,7 @@ class SchemeTest {
|
|||||||
assertEquals(29, config["a"].int)
|
assertEquals(29, config["a"].int)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(DFExperimental::class)
|
||||||
@Test
|
@Test
|
||||||
fun testSchemeWrappingAfterEdit() {
|
fun testSchemeWrappingAfterEdit() {
|
||||||
val scheme = TestScheme.empty()
|
val scheme = TestScheme.empty()
|
||||||
@ -46,4 +58,13 @@ class SchemeTest {
|
|||||||
scheme.v = ListValue(1.0, 2.0, 3.0)
|
scheme.v = ListValue(1.0, 2.0, 3.0)
|
||||||
assertNotNull(value)
|
assertNotNull(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testSchemeWithInit(){
|
||||||
|
val scheme = SchemeWithInit()
|
||||||
|
assertEquals("initialValue", scheme.initial)
|
||||||
|
scheme.initial = "none"
|
||||||
|
assertEquals("none", scheme.initial)
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user