override fun generateFor()

in buildSrc/artist-traits-rx/src/main/kotlin/com/uber/artist/traits/rx/KotlinCheckableTrait.kt [32:85]


  override fun generateFor(
      type: TypeSpec.Builder,
      initMethod: FunSpec.Builder,
      rClass: ClassName,
      baseType: String) {

    val isTextView = baseType.endsWith("TextView")

    if (isTextView) {
      type.addProperty(PropertySpec.builder(
          "checkedChanges",
          KotlinRxTypeNames.Rx.BehaviorRelay.parameterizedBy(BOOLEAN).copy(nullable = true),
          KModifier.PRIVATE)
          .mutable()
          .initializer("null")
          .build())
      type.addFunction(FunSpec.builder("ensureCheckedChanges")
          .addModifiers(KModifier.PRIVATE)
          .beginControlFlow("if (checkedChanges == null)")
          .addStatement("checkedChanges = %T.create()", KotlinRxTypeNames.Rx.BehaviorRelay)
          .endControlFlow()
          .build())
      type.addFunction(FunSpec.builder("checkedChanges")
          .addKdoc("""@return an observable of booleans representing the checked state of this view.
    """)
          .addModifiers(KModifier.OPEN)
          .returns(KotlinRxTypeNames.Rx.Observable.parameterizedBy(BOOLEAN))
          .addStatement("ensureCheckedChanges()")
          .addStatement("return checkedChanges!!.hide()")
          .build())
      type.addFunction(FunSpec.builder("setChecked")
          .addModifiers(KModifier.OPEN, KModifier.OVERRIDE)
          .addParameter("value", BOOLEAN)
          .addStatement("super.setChecked(value)")
          .addStatement("ensureCheckedChanges()")
          .addStatement("checkedChanges!!.accept(value)")
          .build())
    } else {
      addRxBindingApiForSettable(type, KotlinSettableApi(
          KotlinRxBindingInfo(KotlinRxTypeNames.Rx.RxCompoundButton,
              "checkedChanges",
              """@return an observable of booleans representing the checked state of this view.
    """),
          ClassName.bestGuess("android.widget.CompoundButton.OnCheckedChangeListener"),
          "setOnCheckedChangeListener",
          BOOLEAN,
          FunSpec.builder("accept")
              .addParameter("isChecked", BOOLEAN)
              .addStatement("l.onCheckedChanged(this@$baseType, isChecked)"),
          true,
          CodeBlock.of("%T.createDefault(isChecked())\n", KotlinRxTypeNames.Rx.BehaviorRelay)
      ))
    }
  }