fun addRxBindingApiForAdditive()

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


fun addRxBindingApiForAdditive(type: TypeSpec.Builder, api: JavaAdditiveApi) {
  val artistRxConfig = JavaArtistRxConfigService.newInstance().getArtistRxConfig()
  type.addMethod(MethodSpec.methodBuilder(api.rxBindingInfo.methodName)
      .addJavadoc("${api.rxBindingInfo.methodDoc}\n")
      .apply {
        if (api.isUViewOverride) {
          addAnnotation(Override::class.java)
        }
      }
      .addModifiers(Modifier.PUBLIC)
      .returns(ParameterizedTypeName.get(JavaRxTypeNames.Rx.Observable, api.observableType.irrelevantIfObject()))
      .addCode(CodeBlock.builder()
          .add("return \$T.${api.rxBindingInfo.methodName}(this)", api.rxBindingInfo.className)
          .apply {
            if (api.observableType == TypeName.OBJECT.box()) {
              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(";")
          }
          .build())
      .build())
}