package Ġbutter knife Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . app . Fragment Ċ import Ġandroid . support . v 4 . app . Fragment Ġas ĠSupport Fragment Ċ import Ġandroid . support . v 7 . widget . RecyclerView . ViewHolder Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġkotlin . properties . ReadOnly Property Ċ import Ġjava . util . Weak HashMap Ċ import Ġjava . util . Collections Ċ import Ġkotlin . reflect . K Property Ċ Ċ public Ġfun Ġ< T Ġ: ĠView > ĠViewGroup . bind View ( id : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠT > Ġ= ĠView Binding ( id ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠActivity . bind View ( id : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠT > Ġ= ĠView Binding ( id ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠDialog . bind View ( id : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠT > Ġ= ĠView Binding ( id ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠFragment . bind View ( id : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠT > Ġ= ĠView Binding ( id ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠSupport Fragment . bind View ( id : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠT > Ġ= ĠView Binding ( id ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠViewHolder . bind View ( id : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠT > Ġ= ĠView Binding ( id ) Ċ Ċ public Ġfun Ġ< T Ġ: ĠView > ĠViewGroup . bind Optional View ( id : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠT ?> Ġ= ĠOptional View Binding ( id ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠActivity . bind Optional View ( id : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠT ?> Ġ= ĠOptional View Binding ( id ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠDialog . bind Optional View ( id : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠT ?> Ġ= ĠOptional View Binding ( id ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠFragment . bind Optional View ( id : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠT ?> Ġ= ĠOptional View Binding ( id ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠSupport Fragment . bind Optional View ( id : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠT ?> Ġ= ĠOptional View Binding ( id ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠViewHolder . bind Optional View ( id : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠT ?> Ġ= ĠOptional View Binding ( id ) Ċ Ċ public Ġfun Ġ< T Ġ: ĠView > ĠViewGroup . bind Views ( var arg Ġids : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠList < T >> Ġ= ĠView List Binding ( ids ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠActivity . bind Views ( var arg Ġids : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠList < T >> Ġ= ĠView List Binding ( ids ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠDialog . bind Views ( var arg Ġids : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠList < T >> Ġ= ĠView List Binding ( ids ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠFragment . bind Views ( var arg Ġids : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠList < T >> Ġ= ĠView List Binding ( ids ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠSupport Fragment . bind Views ( var arg Ġids : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠList < T >> Ġ= ĠView List Binding ( ids ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠViewHolder . bind Views ( var arg Ġids : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠList < T >> Ġ= ĠView List Binding ( ids ) Ċ Ċ public Ġfun Ġ< T Ġ: ĠView > ĠViewGroup . bind Optional Views ( var arg Ġids : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠList < T >> Ġ= ĠOptional View List Binding ( ids ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠActivity . bind Optional Views ( var arg Ġids : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠList < T >> Ġ= ĠOptional View List Binding ( ids ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠDialog . bind Optional Views ( var arg Ġids : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠList < T >> Ġ= ĠOptional View List Binding ( ids ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠFragment . bind Optional Views ( var arg Ġids : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠList < T >> Ġ= ĠOptional View List Binding ( ids ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠSupport Fragment . bind Optional Views ( var arg Ġids : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠList < T >> Ġ= ĠOptional View List Binding ( ids ) Ċ public Ġfun Ġ< T Ġ: ĠView > ĠViewHolder . bind Optional Views ( var arg Ġids : ĠInt ): ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any , ĠList < T >> Ġ= ĠOptional View List Binding ( ids ) Ċ Ċ object ĠB utter Kn ife Ġ{ ĊĠĠĠ Ġfun Ġreset ( target : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLazy Registry . reset ( target ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġ< T Ġ: ĠView > Ġfind View ( this Ref : ĠAny , Ġid : ĠInt ): ĠT ? Ġ{ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġreturn Ġwhen Ġ( this Ref ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠView Ġ-> Ġthis Ref . findViewById ( id ) ĊĠĠĠĠĠĠĠ Ġis ĠActivity Ġ-> Ġthis Ref . findViewById ( id ) ĊĠĠĠĠĠĠĠ Ġis ĠDialog Ġ-> Ġthis Ref . findViewById ( id ) ĊĠĠĠĠĠĠĠ Ġis ĠFragment Ġ-> Ġthis Ref . getView (). findViewById ( id ) ĊĠĠĠĠĠĠĠ Ġis ĠSupport Fragment Ġ-> Ġthis Ref . getView (). findViewById ( id ) ĊĠĠĠĠĠĠĠ Ġis ĠViewHolder Ġ-> Ġthis Ref . item View . findViewById ( id ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Unable Ġto Ġfind Ġviews Ġon Ġtype .") ĊĠĠĠ Ġ} Ġas ĠT ? Ċ } Ċ Ċ private Ġclass ĠView Binding < T Ġ: ĠView >( val Ġid : ĠInt ) Ġ: ĠLazy ReadOnly Property < T >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate ( this Ref : ĠAny , Ġdesc : ĠK Property < *> ): ĠT Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind View < T >( this Ref , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" View ĠID Ġ$ id Ġfor Ġ'${ desc . name }' Ġnot Ġfound .") Ċ } Ċ Ċ private Ġclass ĠOptional View Binding < T Ġ: ĠView >( val Ġid : ĠInt ) Ġ: ĠLazy ReadOnly Property < T ?> () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate ( this Ref : ĠAny , Ġdesc : ĠK Property < *> ): ĠT ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind View ( this Ref , Ġid ) Ċ } Ċ Ċ private Ġclass ĠView List Binding < T Ġ: ĠView >( val Ġids : ĠInt Array ) Ġ: ĠLazy ReadOnly Property < List < T >>() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate ( this Ref : ĠAny , Ġdesc : ĠK Property < *> ): ĠList < T > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġids . map Ġ{ Ġid Ġ-> Ġfind View < T >( this Ref , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" View ĠID Ġ$ id Ġfor Ġ'${ desc . name }' Ġnot Ġfound .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠOptional View List Binding < T Ġ: ĠView >( val Ġids : ĠInt Array ) Ġ: ĠLazy ReadOnly Property < List < T >>() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate ( this Ref : ĠAny , Ġdesc : ĠK Property < *> ): ĠList < T > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġids . map Ġ{ Ġid Ġ-> Ġfind View < T >( this Ref , Ġid ) Ġ}. filter NotNull () Ċ } Ċ Ċ private Ġabstract Ġclass ĠLazy ReadOnly Property < T Ġ: ĠAny ?> Ġ: ĠReadOnly Property < Any , ĠT > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlazy : ĠLazy < T > Ġ= ĠLazy () ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠAny , Ġproperty : ĠK Property < *> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ ĠLazy Registry . register ( this Ref , Ġlazy ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate ( this Ref , Ġproperty ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġcreate ( this Ref : ĠAny , Ġdesc : ĠK Property < *> ): ĠT Ċ } Ċ Ċ private Ġclass ĠLazy < T > Ġ{ ĊĠĠĠ Ġprivate Ġobject ĠEMPTY ĊĠĠĠ Ġprivate Ġvar Ġvalue : ĠAny ? Ġ= ĠEMPTY ĊĊĠĠĠ Ġfun Ġget ( initializer : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== ĠEMPTY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġinitializer . invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġ= ĠEMPTY ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġobject ĠLazy Registry Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlazy Map Ġ= ĠWeak HashMap < Any , ĠMutable Collection < Lazy <* >> >() ĊĊĠĠĠ Ġfun Ġregister ( target : ĠAny , Ġlazy : ĠLazy <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġlazy Map . get Or Put ( target , Ġ{ ĠCollections . new Set From Map ( Weak HashMap ()) Ġ}). add ( lazy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset ( target : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlazy Map . get ( target )?. forEach Ġ{ Ġit . reset () Ġ} ĊĠĠĠ Ġ} Ċ }