package Ġaut od roid . annotation . processor . recyclerview . builder Ċ Ċ import Ġaut od roid . annotations . recyclerview . ItemId Res Ċ import Ġaut od roid . annotations . recyclerview . ItemType Ċ import Ġcom . squareup . kotlin po et .* Ċ import Ġjavax . lang . model . element . Element ĊĊ Ċ /** Ċ Ġ* ĠBuilds Ġthe Ġ< Data Class > ViewHolder Ġclass Ġto Ġbe Ġused Ġfor Ġthe ĠRecyclerView Ċ Ġ*/ Ċ internal Ġclass ĠViewHolder Builder ( element : ĠElement , Ġbinding Manager : ĠBinding Manager ) Ġ: ĠRe cy ler View Builder ( element , Ġbinding Manager ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġfile Ġspec Ġfor Ġthe Ġview Ġholder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbuild (): ĠFile Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Spec Builder Ġ= ĠType Spec . class Builder ( view Holder ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. primary Constructor ( Fun Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" main View ", ĠClass Name (" android . view ", Ġ" View ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" private Ġvar ĠonClick Listener ", ĠClass Name (" aut od roid . annotations . recyclerview ", Ġ" Auto RecyclerView OnClickListener "). as Nullable ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. super class ( ClassName (" android . support . v 7 . widget ", Ġ" RecyclerView ", Ġ" ViewHolder ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Super class Constructor Parameter (" main View ") ĊĊĠĠĠĠĠĠĠ Ġval Ġinit Builder Ġ= ĠCode Block . builder () ĊĊĊĠĠĠĠĠĠĠ Ġelement . enc losed Elements . filter Ġ{ Ġit . getAnnotation ( ItemId Res :: class . java ) Ġ!= Ġnull Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= Ġit . simple Name . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= Ġit . getAnnotation ( ItemId Res :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotation . item Type Ġ== ĠItem Type . TEXT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Spec Builder . addProperty ( Property Spec . builder ( fieldName , ĠClass Name (" android . widget ", Ġ" TextView ")). initializer (" main View . findViewById (" Ġ+ Ġannotation . view ID Ġ+ Ġ") "). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Spec Builder . addProperty ( Property Spec . builder ( fieldName , ĠClass Name (" android . widget ", Ġ" ImageView ")). initializer (" main View . findViewById (" Ġ+ Ġannotation . view ID Ġ+ Ġ") "). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Builder . add Statement ("$ fieldName . setOnClickListener ( View . OnClickListener Ġ{ ĠonClick Listener ?. invoke ($ fieldName . id , Ġadapter Position ) Ġ}) ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Builder . add Statement (" main View . setOnClickListener ( View . OnClickListener Ġ{ ĠonClick Listener ?. invoke ( main View . id , Ġadapter Position ) Ġ}) ") ĊĊĠĠĠĠĠĠĠ Ġclass Spec Builder . add Initializer Block ( init Builder . build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġfile Spec Builder Ġ= ĠFile Spec . builder ( packageName , ĠviewHolder ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Type ( class Spec Builder . build ()) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfile Spec Builder . build () ĊĠĠĠ Ġ} Ċ Ċ }