From b817e9f290715864f930be7718650261a743c2d6 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sun, 29 Jan 2023 22:24:30 +0700 Subject: [PATCH] Allow to pass nulls as field name to use private next field name --- .../mc/otm/block/entity/RedstoneControl.kt | 3 +- .../mc/otm/network/FieldSynchronizer.kt | 168 +++++++++--------- 2 files changed, 86 insertions(+), 85 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/RedstoneControl.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/RedstoneControl.kt index 8f6e80e88..2fbd9561a 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/RedstoneControl.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/RedstoneControl.kt @@ -65,7 +65,8 @@ class RedstoneControl(private val valueChanges: (new: Boolean, old: Boolean) -> class SynchronizedRedstoneControl( synchronizer: FieldSynchronizer, - private val valueChanges: (new: Boolean, old: Boolean) -> Unit + private val valueChanges: (new: Boolean, old: Boolean) -> Unit, + fieldNamePrefix: String? = null ) : AbstractRedstoneControl() { override var redstoneSetting: RedstoneSetting by synchronizer.enum(RedstoneSetting.LOW, setter = { value, access, setByRemote -> if (setByRemote) { 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 3d2187b5d..f969f2148 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/network/FieldSynchronizer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/network/FieldSynchronizer.kt @@ -158,68 +158,68 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa hasChanges = false } - @JvmOverloads fun byte(getter: () -> Byte, name: String = nextFieldName()) = ComputedField(getter, ByteValueCodec, name) - @JvmOverloads fun bool(getter: () -> Boolean, name: String = nextFieldName()) = ComputedField(getter, BooleanValueCodec, name) - @JvmOverloads fun short(getter: () -> Short, name: String = nextFieldName()) = ComputedField(getter, ShortValueCodec, name) - @JvmOverloads fun long(getter: () -> Long, name: String = nextFieldName()) = ComputedField(getter, VarLongValueCodec, name) - @JvmOverloads fun fixedLong(getter: () -> Long, name: String = nextFieldName()) = ComputedField(getter, LongValueCodec, name) - @JvmOverloads fun float(getter: () -> Float, name: String = nextFieldName()) = ComputedField(getter, FloatValueCodec, name) - @JvmOverloads fun double(getter: () -> Double, name: String = nextFieldName()) = ComputedField(getter, DoubleValueCodec, name) - @JvmOverloads fun uuid(getter: () -> UUID, name: String = nextFieldName()) = ComputedField(getter, UUIDValueCodec, name) - @JvmOverloads fun int(getter: () -> Int, name: String = nextFieldName()) = ComputedField(getter, VarIntValueCodec, name) - @JvmOverloads fun fixedInt(getter: () -> Int, name: String = nextFieldName()) = ComputedField(getter, IntValueCodec, name) - @JvmOverloads fun fraction(getter: () -> Decimal, name: String = nextFieldName()) = ComputedField(getter, ImpreciseFractionValueCodec, name) - @JvmOverloads fun bigDecimal(getter: () -> BigDecimal, name: String = nextFieldName()) = ComputedField(getter, BigDecimalValueCodec, name) - @JvmOverloads fun item(getter: () -> ItemStack, name: String = nextFieldName()) = ComputedField(getter, ItemStackValueCodec, name) - @JvmOverloads fun string(getter: () -> String, name: String = nextFieldName()) = ComputedField(getter, BinaryStringCodec, name) + @JvmOverloads fun byte(getter: () -> Byte, name: String? = nextFieldName()) = ComputedField(getter, ByteValueCodec, name ?: nextFieldName()) + @JvmOverloads fun bool(getter: () -> Boolean, name: String? = nextFieldName()) = ComputedField(getter, BooleanValueCodec, name ?: nextFieldName()) + @JvmOverloads fun short(getter: () -> Short, name: String? = nextFieldName()) = ComputedField(getter, ShortValueCodec, name ?: nextFieldName()) + @JvmOverloads fun long(getter: () -> Long, name: String? = nextFieldName()) = ComputedField(getter, VarLongValueCodec, name ?: nextFieldName()) + @JvmOverloads fun fixedLong(getter: () -> Long, name: String? = nextFieldName()) = ComputedField(getter, LongValueCodec, name ?: nextFieldName()) + @JvmOverloads fun float(getter: () -> Float, name: String? = nextFieldName()) = ComputedField(getter, FloatValueCodec, name ?: nextFieldName()) + @JvmOverloads fun double(getter: () -> Double, name: String? = nextFieldName()) = ComputedField(getter, DoubleValueCodec, name ?: nextFieldName()) + @JvmOverloads fun uuid(getter: () -> UUID, name: String? = nextFieldName()) = ComputedField(getter, UUIDValueCodec, name ?: nextFieldName()) + @JvmOverloads fun int(getter: () -> Int, name: String? = nextFieldName()) = ComputedField(getter, VarIntValueCodec, name ?: nextFieldName()) + @JvmOverloads fun fixedInt(getter: () -> Int, name: String? = nextFieldName()) = ComputedField(getter, IntValueCodec, name ?: nextFieldName()) + @JvmOverloads fun fraction(getter: () -> Decimal, name: String? = nextFieldName()) = ComputedField(getter, ImpreciseFractionValueCodec, name ?: nextFieldName()) + @JvmOverloads fun bigDecimal(getter: () -> BigDecimal, name: String? = nextFieldName()) = ComputedField(getter, BigDecimalValueCodec, name ?: nextFieldName()) + @JvmOverloads fun item(getter: () -> ItemStack, name: String? = nextFieldName()) = ComputedField(getter, ItemStackValueCodec, name ?: nextFieldName()) + @JvmOverloads fun string(getter: () -> String, name: String? = nextFieldName()) = ComputedField(getter, BinaryStringCodec, name ?: nextFieldName()) - @JvmOverloads fun byte(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, ByteValueCodec, name) - @JvmOverloads fun bool(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, BooleanValueCodec, name) - @JvmOverloads fun short(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, ShortValueCodec, name) - @JvmOverloads fun long(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, VarLongValueCodec, name) - @JvmOverloads fun fixedLong(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, LongValueCodec, name) - @JvmOverloads fun float(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, FloatValueCodec, name) - @JvmOverloads fun double(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, DoubleValueCodec, name) - @JvmOverloads fun uuid(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, UUIDValueCodec, name) - @JvmOverloads fun int(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, VarIntValueCodec, name) - @JvmOverloads fun fixedInt(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, IntValueCodec, name) - @JvmOverloads fun fraction(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, ImpreciseFractionValueCodec, name) - @JvmOverloads fun bigDecimal(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, BigDecimalValueCodec, name) - @JvmOverloads fun item(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, ItemStackValueCodec, name) - @JvmOverloads fun string(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, BinaryStringCodec, name) + @JvmOverloads fun byte(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, ByteValueCodec, name ?: nextFieldName()) + @JvmOverloads fun bool(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, BooleanValueCodec, name ?: nextFieldName()) + @JvmOverloads fun short(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, ShortValueCodec, name ?: nextFieldName()) + @JvmOverloads fun long(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, VarLongValueCodec, name ?: nextFieldName()) + @JvmOverloads fun fixedLong(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, LongValueCodec, name ?: nextFieldName()) + @JvmOverloads fun float(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, FloatValueCodec, name ?: nextFieldName()) + @JvmOverloads fun double(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, DoubleValueCodec, name ?: nextFieldName()) + @JvmOverloads fun uuid(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, UUIDValueCodec, name ?: nextFieldName()) + @JvmOverloads fun int(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, VarIntValueCodec, name ?: nextFieldName()) + @JvmOverloads fun fixedInt(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, IntValueCodec, name ?: nextFieldName()) + @JvmOverloads fun fraction(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, ImpreciseFractionValueCodec, name ?: nextFieldName()) + @JvmOverloads fun bigDecimal(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, BigDecimalValueCodec, name ?: nextFieldName()) + @JvmOverloads fun item(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, ItemStackValueCodec, name ?: nextFieldName()) + @JvmOverloads fun string(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, BinaryStringCodec, name ?: nextFieldName()) - @JvmOverloads fun byte(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, ByteValueCodec, name) - @JvmOverloads fun bool(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, BooleanValueCodec, name) - @JvmOverloads fun short(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, ShortValueCodec, name) - @JvmOverloads fun long(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, VarLongValueCodec, name) - @JvmOverloads fun fixedLong(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, LongValueCodec, name) - @JvmOverloads fun float(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, FloatValueCodec, name) - @JvmOverloads fun double(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, DoubleValueCodec, name) - @JvmOverloads fun uuid(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, UUIDValueCodec, name) - @JvmOverloads fun int(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, VarIntValueCodec, name) - @JvmOverloads fun fixedInt(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, IntValueCodec, name) - @JvmOverloads fun fraction(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, ImpreciseFractionValueCodec, name) - @JvmOverloads fun bigDecimal(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, BigDecimalValueCodec, name) - @JvmOverloads fun item(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, ItemStackValueCodec, name) - @JvmOverloads fun string(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, BinaryStringCodec, name) + @JvmOverloads fun byte(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, ByteValueCodec, name ?: nextFieldName()) + @JvmOverloads fun bool(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, BooleanValueCodec, name ?: nextFieldName()) + @JvmOverloads fun short(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, ShortValueCodec, name ?: nextFieldName()) + @JvmOverloads fun long(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, VarLongValueCodec, name ?: nextFieldName()) + @JvmOverloads fun fixedLong(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, LongValueCodec, name ?: nextFieldName()) + @JvmOverloads fun float(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, FloatValueCodec, name ?: nextFieldName()) + @JvmOverloads fun double(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, DoubleValueCodec, name ?: nextFieldName()) + @JvmOverloads fun uuid(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, UUIDValueCodec, name ?: nextFieldName()) + @JvmOverloads fun int(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, VarIntValueCodec, name ?: nextFieldName()) + @JvmOverloads fun fixedInt(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, IntValueCodec, name ?: nextFieldName()) + @JvmOverloads fun fraction(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, ImpreciseFractionValueCodec, name ?: nextFieldName()) + @JvmOverloads fun bigDecimal(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, BigDecimalValueCodec, name ?: nextFieldName()) + @JvmOverloads fun item(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, ItemStackValueCodec, name ?: nextFieldName()) + @JvmOverloads fun string(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, BinaryStringCodec, name ?: nextFieldName()) - @JvmOverloads fun > enum(type: Class, getter: () -> T, name: String = nextFieldName()) = ComputedField(getter, EnumValueCodec(type), name) - inline fun > enum(noinline getter: () -> T, name: String = nextFieldName()) = ComputedField(getter, EnumValueCodec(T::class.java), name) + @JvmOverloads fun > enum(type: Class, getter: () -> T, name: String? = nextFieldName()) = ComputedField(getter, EnumValueCodec(type), name ?: nextFieldName()) + inline fun > enum(noinline getter: () -> T, name: String? = nextFieldName()) = ComputedField(getter, EnumValueCodec(T::class.java), name ?: nextFieldName()) - @JvmOverloads fun > enum(type: Class, getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, EnumValueCodec(type), name) - inline fun > enum(getter: KProperty0, name: String = nextFieldName()) = ComputedField(getter, EnumValueCodec(T::class.java), name) + @JvmOverloads fun > enum(type: Class, getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, EnumValueCodec(type), name ?: nextFieldName()) + inline fun > enum(getter: KProperty0, name: String? = nextFieldName()) = ComputedField(getter, EnumValueCodec(T::class.java), name ?: nextFieldName()) - @JvmOverloads fun > enum(type: Class, getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, EnumValueCodec(type), name) - inline fun > enum(getter: Supplier, name: String = nextFieldName()) = ComputedField(getter::get, EnumValueCodec(T::class.java), name) + @JvmOverloads fun > enum(type: Class, getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, EnumValueCodec(type), name ?: nextFieldName()) + inline fun > enum(getter: Supplier, name: String? = nextFieldName()) = ComputedField(getter::get, EnumValueCodec(T::class.java), name ?: nextFieldName()) @JvmOverloads fun byte( value: Byte = 0, getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, ByteValueCodec, getter, setter, name = name) + return Field(value, ByteValueCodec, getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -227,9 +227,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: Boolean = false, getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, BooleanValueCodec, getter, setter, name = name) + return Field(value, BooleanValueCodec, getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -237,9 +237,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: Short = 0, getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, ShortValueCodec, getter, setter, name = name) + return Field(value, ShortValueCodec, getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -247,9 +247,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: Long = 0L, getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, VarLongValueCodec, getter, setter, name = name) + return Field(value, VarLongValueCodec, getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -257,9 +257,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: Long = 0L, getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, LongValueCodec, getter, setter, name = name) + return Field(value, LongValueCodec, getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -267,9 +267,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: Float = 0f, getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, FloatValueCodec, getter, setter, name = name) + return Field(value, FloatValueCodec, getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -277,9 +277,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: Double = 0.0, getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, DoubleValueCodec, getter, setter, name = name) + return Field(value, DoubleValueCodec, getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -287,9 +287,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: UUID = UUID(0L, 0L), getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, UUIDValueCodec, getter, setter, name = name) + return Field(value, UUIDValueCodec, getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -297,9 +297,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: Int = 0, getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, VarIntValueCodec, getter, setter, name = name) + return Field(value, VarIntValueCodec, getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -307,9 +307,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: String = "", getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, BinaryStringCodec, getter, setter, name = name) + return Field(value, BinaryStringCodec, getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -317,9 +317,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: Int = 0, getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, IntValueCodec, getter, setter, name = name) + return Field(value, IntValueCodec, getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -327,9 +327,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: Decimal = Decimal.ZERO, getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, ImpreciseFractionValueCodec, getter, setter, name = name) + return Field(value, ImpreciseFractionValueCodec, getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -337,9 +337,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: BigDecimal = BigDecimal.ZERO, getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, BigDecimalValueCodec, getter, setter, name = name) + return Field(value, BigDecimalValueCodec, getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -348,9 +348,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: T = type.enumConstants[0], getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, EnumValueCodec(type), getter, setter, name = name) + return Field(value, EnumValueCodec(type), getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -358,9 +358,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa value: T, getter: FieldGetter? = null, setter: FieldSetter? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, EnumValueCodec(value::class.java), getter, setter, name = name) + return Field(value, EnumValueCodec(value::class.java), getter, setter, name = name ?: nextFieldName()) } @JvmOverloads @@ -369,17 +369,17 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa getter: FieldGetter? = null, setter: FieldSetter? = null, observe: Boolean = true, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Field { - return Field(value, ItemStackValueCodec, getter, setter, isObserver = observe, name = name) + return Field(value, ItemStackValueCodec, getter, setter, isObserver = observe, name = name ?: nextFieldName()) } @JvmOverloads fun item( delegate: KMutableProperty0, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): ObservedField { - return ObservedField(delegate, ItemStackValueCodec, name = name) + return ObservedField(delegate, ItemStackValueCodec, name = name ?: nextFieldName()) } @JvmOverloads @@ -389,7 +389,7 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa callback: ((changes: Collection>) -> Unit)? = null, backingMap: MutableMap = HashMap(), observingBackingMap: MutableMap? = null, - name: String = nextFieldName(), + name: String? = nextFieldName(), ): Map { return Map( keyCodec = keyCodec, @@ -397,7 +397,7 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa callback = callback, backingMap = backingMap, observingBackingMap = observingBackingMap, - name = name, + name = name ?: nextFieldName(), ) }