package Ġcn . num eron . recyclerview . adapter Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġcn . num eron . common . Ident ifiable Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . lang . reflect . Modifier Ċ import Ġjava . lang . reflect . Parameterized Type Ċ Ċ open Ġclass ĠAutomatic Binding Holder < T Ġ: ĠIdent ifiable <* >, ĠDB Ġ: ĠView Data Binding >( binding : ĠDB ) Ġ: ĠView Binding Holder < T , ĠDB >( binding ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdata Binding ClassName : ĠString ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdata Binding Class : ĠClass < *> ? Ġ= Ġbinding . java Class ĊĠĠĠĠĠĠĠ Ġwhile Ġ( data Binding Class Ġ!= Ġnull Ġ&& Ġ! Modifier . is Abstract ( data Binding Class . modifiers )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Binding Class Ġ= Ġdata Binding Class . super class ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata Binding ClassName Ġ= Ġdata Binding Class ?. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" The Ġimplementation Ġof Ġthe ĠView Data Binding Ġcould Ġnot Ġbe Ġfound .") ĊĠĠĠĠĠĠĠ Ġif Ġ( bind Item Methods [ data Binding ClassName ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġjava Class . generic Super class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġis ĠParameter ized Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Methods ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbinding ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġlist . get OrNull ( position ) ĊĠĠĠĠĠĠĠ Ġbind Item Methods [ data Binding ClassName ]?. invoke ( binding , Ġitem ) ĊĠĠĠĠĠĠĠ Ġbind Click Methods [ data Binding ClassName ]?. invoke ( binding , Ġclick Event ) ĊĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbind Item Methods Ġ= Ġmutable Map Of < String , ĠMethod >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbind Click Methods Ġ= Ġmutable Map Of < String , ĠMethod >() ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind Methods ( type : ĠParameter ized Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Type Arguments Ġ= Ġtype . actual Type Arguments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Binding Class Ġ= Ġactual Type Arguments [ 1 ] Ġas ? ĠClass < *> Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Class Ġ= Ġactual Type Arguments [ 0 ] Ġas ? ĠClass < *> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠonClick Class Ġ= ĠView . OnClickListener :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Binding Class . methods . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter Types Ġ= Ġit . parameter Types ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Class Ġ= Ġparameter Types . first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parameter Types . size Ġ== Ġ 1 Ġ&& Ġfirst Class Ġ== Ġitem Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Item Methods [ data Binding Class . name ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parameter Types . size Ġ== Ġ 1 Ġ&& Ġfirst Class Ġ== ĠonClick Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Click Methods [ data Binding Class . name ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }