From 874a253292bfa01138b9938ec36bc06f13a8673e Mon Sep 17 00:00:00 2001 From: Alexander Nozik Date: Wed, 7 Apr 2021 15:34:27 +0300 Subject: [PATCH] Fix property usage for ObservableItemProvider --- build.gradle.kts | 2 +- dataforge-meta/api/dataforge-meta.api | 3 +-- .../dataforge/meta/ObservableItemProvider.kt | 14 ++++++++++++-- .../space/kscience/dataforge/meta/SchemeTest.kt | 4 +++- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 741293ae..98a941bb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { allprojects { group = "space.kscience" - version = "0.4.0-dev-6" + version = "0.4.0-dev-7" } subprojects { diff --git a/dataforge-meta/api/dataforge-meta.api b/dataforge-meta/api/dataforge-meta.api index ad2d9612..47b38de5 100644 --- a/dataforge-meta/api/dataforge-meta.api +++ b/dataforge-meta/api/dataforge-meta.api @@ -414,8 +414,7 @@ public abstract interface class space/kscience/dataforge/meta/ObservableItemProv } public final class space/kscience/dataforge/meta/ObservableItemProviderKt { - public static final fun onChange (Lspace/kscience/dataforge/meta/ObservableItemProvider;Lkotlin/reflect/KProperty1;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V - public static synthetic fun onChange$default (Lspace/kscience/dataforge/meta/ObservableItemProvider;Lkotlin/reflect/KProperty1;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V + public static synthetic fun useProperty$default (Lspace/kscience/dataforge/meta/ObservableItemProvider;Lkotlin/reflect/KProperty1;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V } public abstract interface class space/kscience/dataforge/meta/ReadOnlySpecification { diff --git a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/ObservableItemProvider.kt b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/ObservableItemProvider.kt index 1a11441b..5d455d17 100644 --- a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/ObservableItemProvider.kt +++ b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/ObservableItemProvider.kt @@ -1,5 +1,6 @@ package space.kscience.dataforge.meta +import space.kscience.dataforge.misc.DFExperimental import space.kscience.dataforge.names.Name import space.kscience.dataforge.names.toName import kotlin.reflect.KProperty1 @@ -18,12 +19,21 @@ public interface ObservableItemProvider : ItemProvider { public interface ItemPropertyProvider: ObservableItemProvider, MutableItemProvider -public fun O.onChange( +/** + * Use the value of the property in a [callBack]. + * The callback is called once immediately after subscription to pass the initial value. + * + * Optional [owner] property is used for + */ +@DFExperimental +public fun O.useProperty( property: KProperty1, owner: Any? = null, callBack: O.(T?) -> Unit, ) { - onChange(null) { name, oldItem, newItem -> + //Pass initial value. + callBack(property.get(this)) + onChange(owner) { name, oldItem, newItem -> if (name == property.name.toName() && oldItem != newItem) { callBack(property.get(this)) } diff --git a/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/SchemeTest.kt b/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/SchemeTest.kt index d2407bb4..2b55658e 100644 --- a/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/SchemeTest.kt +++ b/dataforge-meta/src/commonTest/kotlin/space/kscience/dataforge/meta/SchemeTest.kt @@ -1,8 +1,10 @@ package space.kscience.dataforge.meta +import space.kscience.dataforge.misc.DFExperimental import kotlin.test.Test import kotlin.test.assertEquals +@DFExperimental class SchemeTest { @Test fun testSchemeWrappingBeforeEdit(){ @@ -25,7 +27,7 @@ class SchemeTest { fun testSchemeSubscription(){ val scheme = TestScheme.empty() var flag: Int? = null - scheme.onChange(TestScheme::a){a-> + scheme.useProperty(TestScheme::a){a-> flag = a } scheme.a = 2