Fix serialization problems in Group

This commit is contained in:
Alexander Nozik 2020-11-13 10:42:03 +03:00
parent 7e037b57fc
commit 62a76f2c86
4 changed files with 12 additions and 6 deletions

View File

@ -13,10 +13,12 @@ import kotlinx.serialization.Transient
@SerialName("vision.group") @SerialName("vision.group")
public open class VisionGroupBase : VisionBase(), MutableVisionGroup { public open class VisionGroupBase : VisionBase(), MutableVisionGroup {
//protected abstract val _children: MutableMap<NameToken, T> /**
* Internal mutable container for group children
* TODO made protected due to https://github.com/Kotlin/kotlinx.serialization/issues/1200
*/
@SerialName("children") @SerialName("children")
protected val childrenInternal = LinkedHashMap<NameToken, Vision>() protected open val childrenInternal: MutableMap<NameToken, Vision> = LinkedHashMap()
/** /**
* A map of top level named children * A map of top level named children

View File

@ -93,13 +93,17 @@ public fun MutableVisionGroup.group(name: String, action: SolidGroup.() -> Unit
*/ */
@Serializable(PrototypesSerializer::class) @Serializable(PrototypesSerializer::class)
internal class Prototypes( internal class Prototypes(
override var children: MutableMap<NameToken, Vision> = LinkedHashMap(), children: Map<NameToken, Vision> = emptyMap(),
) : VisionGroupBase(), PrototypeHolder { ) : VisionGroupBase(), PrototypeHolder {
override fun styleSheet(block: StyleSheet.() -> Unit) { override fun styleSheet(block: StyleSheet.() -> Unit) {
error("Can't define stylesheet for prototypes block") error("Can't define stylesheet for prototypes block")
} }
init {
this.childrenInternal.putAll(children)
}
override var properties: Config? override var properties: Config?
get() = null get() = null
set(_) { set(_) {

View File

@ -91,7 +91,7 @@ internal object PrototypesSerializer : KSerializer<MutableVisionGroup> {
override fun deserialize(decoder: Decoder): MutableVisionGroup { override fun deserialize(decoder: Decoder): MutableVisionGroup {
val map = mapSerializer.deserialize(decoder) val map = mapSerializer.deserialize(decoder)
return Prototypes(map as? MutableMap<NameToken, Vision> ?: LinkedHashMap(map)) return Prototypes(map)
} }
override fun serialize(encoder: Encoder, value: MutableVisionGroup) { override fun serialize(encoder: Encoder, value: MutableVisionGroup) {

View File

@ -60,7 +60,7 @@ class PropertyTest {
@Test @Test
fun testProxyStyleProperty() { fun testProxyStyleProperty() {
var box: Proxy? = null var box: Proxy? = null
val group = SolidGroup().apply { val group = SolidGroup{
styleSheet { styleSheet {
set("testStyle") { set("testStyle") {
SolidMaterial.MATERIAL_COLOR_KEY put "#555555" SolidMaterial.MATERIAL_COLOR_KEY put "#555555"