fun addRxBindingApiForAdditive()

in buildSrc/artist-traits-rx/src/main/kotlin/com/uber/artist/traits/rx/KotlinApiHelper.kt [80:112]


fun addRxBindingApiForAdditive(type: TypeSpec.Builder, api: KotlinAdditiveApi) {
  val artistRxConfig = KotlinArtistRxConfigService.newInstance().getArtistRxConfig()
  val rx_alias = api.rxBindingInfo.getRxAlias()
  type.addFunction(FunSpec.builder(api.rxBindingInfo.methodName)
      .addKdoc("${api.rxBindingInfo.methodDoc}\n")
      .apply {
        if (api.isUViewOverride) {
          addModifiers(KModifier.OVERRIDE)
        }
      }
      .addModifiers(KModifier.OPEN)
      .returns(KotlinRxTypeNames.Rx.Observable.parameterizedBy(api.observableType.irrelevantIfObject()))
      .addCode(CodeBlock.builder()
          .apply {
            if (rx_alias != null) {
              add("return ${rx_alias}()")
            } else {
              add("return ${api.rxBindingInfo.methodName}()")
            }
          }
          .apply {
            if (api.observableType == KotlinTypeNames.Java.Object) {
              artistRxConfig.processRxBindingSignalEvent(this)
            }
            if (api.rxBindingInfo.methodName != "attachEvents") {
              // Safe to call, otherwise it'd be a recursive stack overflow
              artistRxConfig.processRxBindingStream(this, api.observableType.irrelevantIfObject())
            }
          }
          .add("\n")
          .build())
      .build())
}