/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . ĠD y lan ĠC ai Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ @ file : Jvm Name (" View Binding Util ") Ċ Ċ package Ġcom . dy l anc . view binding . base Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . view binding . View Binding Ċ import Ġjava . lang . reflect . Parameterized Type ĊĊ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ @ Jvm Name (" inflate With Generic ") Ċ fun Ġ< VB Ġ: ĠView Binding > ĠAny . inflate Binding With Generic ( layout Inflater : ĠLayoutInflater ): ĠVB Ġ= ĊĠ Ġwith Generic Binding Class ( this ) Ġ{ ĊĠĠĠ Ġit . getMethod (" inflate ", ĠLayoutInflater :: class . java ). invoke ( null , Ġlayout Inflater ) Ġas ĠVB ĊĠ Ġ} Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ @ Jvm Name (" inflate With Generic ") Ċ fun Ġ< VB Ġ: ĠView Binding > ĠAny . inflate Binding With Generic ( view : ĠView ): ĠVB Ġ= ĊĠ Ġwith Generic Binding Class ( this ) Ġ{ ĊĠĠĠ Ġit . getMethod (" bind ", ĠLayoutInflater :: class . java ). invoke ( null , Ġview ) Ġas ĠVB ĊĠ Ġ} Ċ Ċ @ Jvm Name (" inflate With Generic ") Ċ fun Ġ< VB Ġ: ĠView Binding > ĠAny . inflate Binding With Generic ( parent : ĠViewGroup ): ĠVB Ġ= ĊĠ Ġwith Generic Binding Class ( this ) Ġ{ Ġinf late Binding ( it , ĠLayoutInflater . from ( parent . context ), Ġparent , Ġfalse ) Ġ} Ċ Ċ @ Jvm Name (" inflate With Generic ") Ċ fun Ġ< VB Ġ: ĠView Binding > ĠAny . inflate Binding With Generic ( ĊĠ Ġlayout Inflater : ĠLayoutInflater , Ġparent : ĠViewGroup ?, Ġattach To Parent : ĠBoolean Ċ ): ĠVB Ġ= ĊĠ Ġwith Generic Binding Class ( this ) Ġ{ Ġinf late Binding ( it , Ġlayout Inflater , Ġparent , Ġattach To Parent ) Ġ} Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ private Ġfun Ġ< VB Ġ: ĠView Binding > Ġinf late Binding ( ĊĠ Ġclazz : ĠClass < VB >, Ġlayout Inflater : ĠLayoutInflater , Ġparent : ĠViewGroup ?, Ġattach To Parent : ĠBoolean Ċ ) Ġ= ĊĠ Ġclazz . getMethod (" inflate ", ĠLayoutInflater :: class . java , ĠViewGroup :: class . java , ĠBoolean :: class . java ) ĊĠĠĠ Ġ. invoke ( null , Ġlayout Inflater , Ġparent , Ġattach To Parent ) Ġas ĠVB Ċ Ċ private Ġfun Ġ< VB Ġ: ĠView Binding > Ġwith Generic Binding Class ( any : ĠAny , Ġblock : Ġ( Class < VB >) Ġ-> ĠVB ): ĠVB Ġ{ ĊĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġreturn Ġblock . invoke ( any . find Generic Binding Class ( index )) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Method Exception ) Ġ{ ĊĠĠĠĠĠ Ġindex ++ ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ private Ġfun Ġ< VB Ġ: ĠView Binding > ĠAny . find Generic Binding Class ( index : ĠInt ): ĠClass < VB > Ġ{ ĊĠ Ġval Ġtype Ġ= Ġjava Class . generic Super class ĊĠ Ġif Ġ( type Ġis ĠParameter ized Type Ġ&& Ġindex Ġ< Ġtype . actual Type Arguments . size ) Ġ{ ĊĠĠĠ Ġreturn Ġtype . actual Type Arguments [ index ] Ġas ĠClass < VB > ĊĠ Ġ} ĊĠ Ġthrow ĠIllegalArgumentException (" There Ġis Ġno Ġgeneric Ġof ĠView Binding .") Ċ }