メモ
こういうの書いたときに生成されるコードが気になっていた
@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()
}
}
なるほどー