Android Проблема автогенерации Apollo (GraphQL) - PullRequest
0 голосов
/ 28 января 2020

Я использовал 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. Изменять сгенерированный класс не имеет смысла, так как он будет регенерирован и переписан. Что делать в случае?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...