package Ġcom . kp stv . processor . generators Ċ Ċ import Ġcom . kp stv . library _ annotations . G lide Load Array Ċ import Ġcom . kp stv . library _ annotations . On Bind Ċ import Ġcom . kp stv . processor . utils . BIND TYPE Ċ import Ġcom . kp stv . processor . utils . Click Utils Ċ import Ġcom . kp stv . processor . utils . Consts Ċ import Ġcom . kp stv . processor . utils . Utils Ċ import Ġcom . squareup . jav ap o et .* Ċ import Ġjavax . lang . model . element . Element Ċ import Ġjavax . lang . model . element . Modifier Ċ import Ġjavax . lang . model . element . Type Element Ċ Ċ object ĠBind View Generator Ġ{ ĊĊĠĠĠ Ġfun Ġgenerate On Bind ViewHolder ( ĊĠĠĠĠĠĠĠ Ġtype Spec Builder : ĠType Spec . Builder , ĊĠĠĠĠĠĠĠ Ġtype Element : ĠType Element , ĊĠĠĠĠĠĠĠ ĠviewHolder ClassName : ĠClass Name ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgenerate On Bind ViewHolder ( type Spec Builder , Ġtype Element , ĠviewHolder ClassName , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate On BindView List Holder ( ĊĠĠĠĠĠĠĠ Ġtype Spec Builder : ĠType Spec . Builder , ĊĠĠĠĠĠĠĠ Ġtype Element : ĠType Element , ĊĠĠĠĠĠĠĠ ĠviewHolder ClassName : ĠClass Name ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgenerate On Bind ViewHolder ( type Spec Builder , Ġtype Element , ĠviewHolder ClassName , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate On Bind ViewHolder ( ĊĠĠĠĠĠĠĠ Ġtype Spec Builder : ĠType Spec . Builder , ĊĠĠĠĠĠĠĠ Ġtype Element : ĠType Element , ĊĠĠĠĠĠĠĠ ĠviewHolder ClassName : ĠClass Name , ĊĠĠĠĠĠĠĠ Ġis ListAdapter : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġholder Code Generator Ġ= ĠCode Block . builder () ĊĠĠĠĠĠĠĠ Ġval Ġbind Code Builder Ġ= ĠCode Block . builder () ĊĊĠĠĠĠĠĠĠ Ġtype Element . enc losed Elements ?. forEach Ġ{ Ġbind Element Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbind Annotation Ġ= Ġbind Element . getAnnotation ( On Bind :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bind Annotation Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġholder Builder Ġ= ĠStringBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" if Ġ( view Type Ġ== Ġ${ bind Annotation . view Type }) Ġ{\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ t final Ġ${ view Holder ClassName . simple Name ()} Ġholder Ġ= Ġnew Ġ${ view Holder ClassName . simple Name ()} ( android . view . LayoutInflater . from ( parent . getContext ()). inflate (${ bind Annotation . layout Id }, Ġparent , Ġfalse )); \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClick Utils . generate ClickListener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Element , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND TYPE . VIEW HOLDER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ListAdapter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Annotation . view Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ t return Ġholder ;\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" }\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder Code Generator . add ( holder Builder . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbind Builder Ġ= ĠStringBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" if Ġ( getItem ViewType (${ Consts . position }) Ġ== Ġ${ bind Annotation . view Type }) Ġ{\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is ListAdapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ t ${ Consts . className }.${ bind Element ?. simple Name } (${ Consts . holder }. item View , ĠgetItem (${ Consts . position }), Ġ${ Consts . position }); \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġappend ("\ t ${ Consts . className }.${ bind Element ?. simple Name } (${ Consts . holder }. item View , Ġ${ Consts . data Set }. get (${ Consts . position }), Ġ${ Consts . position }); \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ t ${ generate Bind Annotations ( bind Element , Ġis ListAdapter )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClick Utils . generate ClickListener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Element , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND TYPE . BIND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ListAdapter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Annotation . view Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" }\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Code Builder . add ( bind Builder . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtype Spec Builder . add Method ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewHolder Generator . generate On Create ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder ClassName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder Code Generator . build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtype Spec Builder . add Method ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate On Bind Holder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder ClassName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Code Builder . build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate On Bind Holder ( ĊĠĠĠĠĠĠĠ ĠviewHolder ClassName : ĠClass Name , ĊĠĠĠĠĠĠĠ Ġbind Code Block : ĠCode Block ĊĠĠĠ Ġ): ĠMethod Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMethod Spec . method Builder (" on Bind ViewHolder ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( Modifier . PUBLIC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Annotation ( Override :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( view Holder ClassName , ĠConst s . holder , ĠModifier . FINAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( TypeName . INT , ĠConst s . position , ĠModifier . FINAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Code ( bind Code Block ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* . add Code ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClick Utils . generate ClickListener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Element , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB IND TYPE . BIND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ListAdapter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Bind Annotations ( ĊĠĠĠĠĠĠĠ Ġbind Element : ĠElement ?, ĊĠĠĠĠĠĠĠ Ġis ListAdapter : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ): ĠCode Block Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Block Builder Ġ= ĠCode Block . builder () ĊĠĠĠĠĠĠĠ Ġval ĠgetItem Statement Ġ= Ġif Ġ(! is ListAdapter ) Ġ"${ Consts . data Set }. get (${ Consts . position })" ĊĠĠĠĠĠĠĠ Ġelse Ġ" getItem (${ Consts . position })" ĊĊĠĠĠĠĠĠĠ Ġval Ġg lide Load Array Annotation Ġ= Ġbind Element ?. getAnnotation ( G lide Load Array :: class . java ) ĊĠĠĠĠĠĠĠ Ġg lide Load Array Annotation ?. glide Load ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg lide Block Ġ= ĠStringBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" com . bump tech . glide . G lide . with (${ Consts . holder }. item View . getContext ()) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (". load (${ getItem Statement }.${ Utils . prepare Java ModelName ( it . data )}) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (". disk Cache Strategy ( com . bump tech . glide . load . engine . Disk Cache Strategy .${ it . caching Strategy Image . name }) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . apply Transformation Type ( this , Ġit . transformation Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . error Res Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (". error (${ it . error Res }) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . place Holder Res Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (". placeholder (${ it . place Holder Res }) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (". into ( (${ Consts . CLASS NAME _ IMAGE VIEW . canonical Name () }) Ġ${ Consts . holder }. item View . findViewById (${ it . itemId })) ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Block Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement ( glide Block . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcode Block Builder . build () ĊĠĠĠ Ġ} Ċ }