Hot-fix for scheme initialization
This commit is contained in:
parent
196b394278
commit
66ce15ae6d
@ -8,7 +8,7 @@ plugins {
|
||||
|
||||
allprojects {
|
||||
group = "space.kscience"
|
||||
version = "0.8.0"
|
||||
version = "0.8.1"
|
||||
}
|
||||
|
||||
subprojects {
|
||||
|
@ -42,7 +42,7 @@ internal class ActionsTest {
|
||||
source.wrap(it.toString(), it)
|
||||
}
|
||||
|
||||
delay(10)
|
||||
delay(20)
|
||||
|
||||
source.close()
|
||||
result.awaitClose()
|
||||
|
@ -433,6 +433,7 @@ public final class space/kscience/dataforge/meta/MutableMetaDelegateKt {
|
||||
public final class space/kscience/dataforge/meta/MutableMetaKt {
|
||||
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 (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 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
|
||||
@ -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 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 fun get (Lspace/kscience/dataforge/names/Name;)Lspace/kscience/dataforge/meta/MutableMeta;
|
||||
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 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 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/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;
|
||||
@ -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 getDescription ()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 getValueRestriction ()Lspace/kscience/dataforge/meta/descriptors/ValueRestriction;
|
||||
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 setDescription (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 setValueRestriction (Lspace/kscience/dataforge/meta/descriptors/ValueRestriction;)V
|
||||
public final fun setValueTypes (Ljava/util/List;)V
|
||||
|
@ -378,6 +378,11 @@ public fun Meta.asMutableMeta(): MutableMeta = (this as? MutableMeta) ?: toMutab
|
||||
@JsName("newObservableMutableMeta")
|
||||
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
|
||||
*/
|
||||
|
@ -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].
|
||||
* 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
|
||||
*/
|
||||
private var target: MutableMeta? = null
|
||||
get() {
|
||||
// automatic initialization of target if it is missing
|
||||
if (field == null) {
|
||||
field = MutableMeta()
|
||||
}
|
||||
return field
|
||||
}
|
||||
internal var target: MutableMeta = MutableMeta()
|
||||
|
||||
/**
|
||||
* 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 var descriptor: MetaDescriptor? = null
|
||||
private set
|
||||
|
||||
/**
|
||||
* 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
|
||||
set(value) {
|
||||
val oldValue = target[pathName]?.value
|
||||
target!![pathName] = value
|
||||
target[pathName] = value
|
||||
if (oldValue != value) {
|
||||
invalidate(Name.EMPTY)
|
||||
}
|
||||
@ -126,7 +122,7 @@ public open class Scheme : Described, MetaRepr, MutableMetaProvider, Configurabl
|
||||
override fun hashCode(): Int = Meta.hashCode(this)
|
||||
|
||||
override fun set(name: Name, node: Meta?) {
|
||||
target!![name] = node
|
||||
target[name] = node
|
||||
invalidate(name)
|
||||
}
|
||||
|
||||
@ -176,15 +172,19 @@ public open class SchemeSpec<T : Scheme>(
|
||||
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 {
|
||||
target.update(it.meta)
|
||||
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 {
|
||||
it.initialize(MutableMeta(), Meta.EMPTY, descriptor)
|
||||
it.initialize(MutableMeta(), it.target, descriptor)
|
||||
}
|
||||
|
||||
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.
|
||||
* 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(
|
||||
spec: SchemeSpec<T>,
|
||||
key: Name? = null,
|
||||
@ -286,7 +285,6 @@ public fun <T : Scheme> MutableMeta.listOfScheme(
|
||||
}
|
||||
|
||||
|
||||
@DFExperimental
|
||||
public fun <T : Scheme> Scheme.listOfScheme(
|
||||
spec: SchemeSpec<T>,
|
||||
key: Name? = null,
|
||||
|
@ -11,9 +11,6 @@ import kotlin.collections.set
|
||||
public class MetaDescriptorBuilder @PublishedApi internal constructor() {
|
||||
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 multiple: Boolean = false
|
||||
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.SchemeSpec
|
||||
import space.kscience.dataforge.meta.ValueType
|
||||
import space.kscience.dataforge.misc.DFExperimental
|
||||
import kotlin.reflect.KProperty1
|
||||
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(
|
||||
property: KProperty1<S, T>,
|
||||
noinline block: MetaDescriptorBuilder.() -> Unit = {},
|
||||
@ -39,7 +40,9 @@ public inline fun <S : Scheme, reified T> MetaDescriptorBuilder.value(
|
||||
else -> node(property.name, block)
|
||||
}
|
||||
|
||||
@DFExperimental
|
||||
/**
|
||||
* Add a schem-based branch to a [MetaDescriptor]
|
||||
*/
|
||||
public inline fun <S : Scheme, reified T : Scheme> MetaDescriptorBuilder.scheme(
|
||||
property: KProperty1<S, T>,
|
||||
spec: SchemeSpec<T>,
|
||||
|
@ -5,7 +5,18 @@ import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNotNull
|
||||
|
||||
@DFExperimental
|
||||
|
||||
private class SchemeWithInit: Scheme(){
|
||||
init {
|
||||
set("initial", "initialValue")
|
||||
}
|
||||
|
||||
var initial by string()
|
||||
companion object: SchemeSpec<SchemeWithInit>(::SchemeWithInit)
|
||||
}
|
||||
|
||||
|
||||
|
||||
class SchemeTest {
|
||||
@Test
|
||||
fun testSchemeWrappingBeforeEdit() {
|
||||
@ -15,6 +26,7 @@ class SchemeTest {
|
||||
assertEquals(29, config["a"].int)
|
||||
}
|
||||
|
||||
@OptIn(DFExperimental::class)
|
||||
@Test
|
||||
fun testSchemeWrappingAfterEdit() {
|
||||
val scheme = TestScheme.empty()
|
||||
@ -46,4 +58,13 @@ class SchemeTest {
|
||||
scheme.v = ListValue(1.0, 2.0, 3.0)
|
||||
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