メモ
こういうの書いたときに生成されるコードが気になっていた
@Model class AnimalState( var isAnimal: Boolean, var cats: List<Cat>, var dog: Dog ) @Model class Cat( var isRunning: Boolean, var isWalking: Boolean ) @Model class Dog( var count: Int, var type: Type ) { enum class Type { BULLDOG, DACHSHUND, SHIBA } }
build 配下を見て Kotlin で書き直すと概ねこんな感じになりそう
class AnimalState( isAnimal: Boolean, cats: List<Cat>, dog: Dog ) : Framed { private var record: Record = Record() private val readable get() = _readable( record, this ) as Record private val writable get() = _writable( record, this ) as Record var isAnimal: Boolean get() = readable.isAnimal set(value) { writable.isAnimal = value } var cats: List<Cat> get() = readable.cats set(value) { writable.cats = value } var dog: Dog get() = readable.dog!! set(value) { writable.dog = value } init { record.isAnimal = isAnimal record.cats = cats record.dog = dog _created(this) } override val firstFrameRecord: Record get() = record override fun prependFrameRecord(value: androidx.compose.frames.Record) { value.next = record record = value as Record } class Record : AbstractRecord() { var isAnimal: Boolean = false var cats: List<Cat> = emptyList() var dog: Dog? = null override fun assign(value: androidx.compose.frames.Record) { (value as Record).let { isAnimal = it.isAnimal cats = it.cats dog = it.dog } } override fun create(): androidx.compose.frames.Record = Record() } } class Cat( isRunning: Boolean, isWalking: Boolean ) : Framed { private var record = Record() private val readable get() = _readable( record, this ) as Record private val writable get() = _writable( record, this ) as Record var isRunning: Boolean get() = readable.isRunning set(value) { writable.isRunning = value } var isWalking: Boolean get() = readable.isWalking set(value) { writable.isWalking = value } init { record.isRunning = isRunning record.isWalking = isWalking _created(this) } override val firstFrameRecord: Record get() = record override fun prependFrameRecord(value: androidx.compose.frames.Record) { value.next = record record = value as Record } class Record : AbstractRecord() { var isRunning: Boolean = false var isWalking: Boolean = false override fun assign(value: androidx.compose.frames.Record) { (value as Record).let { isRunning = it.isRunning isWalking = it.isWalking } } override fun create(): androidx.compose.frames.Record = Record() } } class Dog( count: Int, type: Type ) : Framed { private var record = Record() private val readable get() = _readable( record, this ) as Record private val writable get() = _writable( record, this ) as Record var count: Int get() = readable.count set(value) { writable.count = value } var type: Type get() = readable.type set(value) { writable.type = value } init { record.count = count record.type = type _created(this) } override val firstFrameRecord: Record get() = record override fun prependFrameRecord(value: androidx.compose.frames.Record) { value.next = record record = value as Record } enum class Type { BULLDOG, DACHSHUND, SHIBA } class Record : AbstractRecord() { var count: Int = 0 var type: Type = Type.BULLDOG override fun assign(value: androidx.compose.frames.Record) { (value as Record).let { count = it.count type = it.type } } override fun create(): androidx.compose.frames.Record = Record() } }
なるほどー