diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/GetterSetter.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/GetterSetter.kt index 10de8c854..9c7953444 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/GetterSetter.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/GetterSetter.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.core import java.util.function.Consumer import java.util.function.Supplier +import kotlin.properties.ReadWriteProperty import kotlin.reflect.KMutableProperty0 import kotlin.reflect.KProperty @@ -9,17 +10,15 @@ inline var GetterSetter.value: V get() = get() set(value) { accept(value) } -@Suppress("nothing_to_inline") -inline operator fun GetterSetter.getValue(thisRef: Any, property: KProperty<*>): V { - return get() -} +interface GetterSetter : Supplier, Consumer, ReadWriteProperty { + override fun setValue(thisRef: Any?, property: KProperty<*>, value: V) { + accept(value) + } -@Suppress("nothing_to_inline") -inline operator fun GetterSetter.setValue(thisRef: Any, property: KProperty<*>, value: V) { - accept(value) -} + override fun getValue(thisRef: Any?, property: KProperty<*>): V { + return get() + } -interface GetterSetter : Supplier, Consumer { companion object { fun of(getter: Supplier, setter: Consumer): GetterSetter { return object : GetterSetter { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/network/FieldSynchronizer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/network/FieldSynchronizer.kt index 99282374e..d8ab2bca4 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/network/FieldSynchronizer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/network/FieldSynchronizer.kt @@ -62,7 +62,7 @@ fun interface FieldSetter { fun invoke(value: V, access: FieldAccess, setByRemote: Boolean) } -sealed interface IField : ReadOnlyProperty, Supplier, () -> V { +sealed interface IField : ReadOnlyProperty, Supplier, () -> V { fun observe(): Boolean fun markDirty() fun markDirty(endpoint: FieldSynchronizer.Endpoint) @@ -76,7 +76,7 @@ sealed interface IField : ReadOnlyProperty, Supplier, () -> V { fun read(stream: DataInputStream) - override fun getValue(thisRef: Any, property: KProperty<*>): V { + override fun getValue(thisRef: Any?, property: KProperty<*>): V { return this.value } @@ -89,20 +89,16 @@ sealed interface IField : ReadOnlyProperty, Supplier, () -> V { } } -sealed interface IMutableField : IField, ReadWriteProperty, GetterSetter { - override var value: V - - override fun setValue(thisRef: Any, property: KProperty<*>, value: V) { - this.value = value +sealed interface IMutableField : IField, GetterSetter { + override fun getValue(thisRef: Any?, property: KProperty<*>): V { + return this.value } + override var value: V + override fun accept(t: V) { value = t } - - override fun getValue(thisRef: Any, property: KProperty<*>): V { - return super.getValue(thisRef, property) - } } data class MapChangeset(