Я использовал Android библиотеку Apollo (GraphQL) версии 1.2 с автогенерацией моделей Java. Сегодня я обновился до версии 1.3 с возможностью генерировать Kotlin (модель) классов данных. Но у меня есть проблема. В схеме у меня есть параметр Integer:
...
{
"name": "size",
"description": "",
"type": {
"kind": "SCALAR",
"name": "Int",
"ofType": null
},
"defaultValue": null
}
...
Apollo генерирует код, где он использует Kotlin syntheti c sugar с помощью лямбда-выражения "apply {}" в параметре List. Внутри он применяется к свойству сгенерированного класса «size», но внутри «apply {}» «size» является свойством контекста «apply {}», а не сгенерированного класса. И, конечно же, «size» не имеет «size.defined» и «size.value»:
data class MembersQuery(
val mandatorNo: Int,
val memberNoFilter: Input<List<Int?>> = Input.absent(),
val memberId: Input<String> = Input.absent(),
val page: Int,
val size: Input<Int> = Input.absent()
) : Query<MembersQuery.Data, MembersQuery.Data, Operation.Variables> {
@Transient
private val variables: Operation.Variables = object : Operation.Variables() {
override fun valueMap(): Map<String, Any?> = mutableMapOf<String, Any?>().apply {
this["mandatorNo"] = mandatorNo
if (memberNoFilter.defined) this["memberNoFilter"] = memberNoFilter.value
if (memberId.defined) this["memberId"] = memberId.value
this["page"] = page
if (size.**defined**) this["size"] = size.**value**
}
...
}
Откат к поколению java не очень хорошая идея, так как я многое изменил, ожидание Kotlin волхвов c. Изменять сгенерированный класс не имеет смысла, так как он будет регенерирован и переписан. Что делать в случае?