package Ġcom . nam shi . card input . utils Ċ Ċ import Ġjava . lang . reflect . Field Ċ import Ġjava . lang . reflect . Method Ċ Ċ internal Ġobject ĠClass Utils Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġclazz Ġthe Ġclass Ġto Ġsearch Ġin ĊĠĠĠĠ Ġ* Ġ@ param Ġallowed Fields Ġallowed Ġfield Ġnames ĊĠĠĠĠ Ġ* Ġ@ param Ġobj Ġthe Ġtarget Ġobject Ġwhose Ġfield Ġwe Ġare Ġaccessing ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġvalue Ġof Ġthe Ġfound Ġfield , Ġif Ġexists , Ġon Ġthe Ġtarget Ġobject , Ġor Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Internal Object ( ĊĠĠĠĠĠĠĠ Ġclazz : ĠClass <* >, ĊĠĠĠĠĠĠĠ Ġallowed Fields : ĠSet < String >, ĊĠĠĠĠĠĠĠ Ġobj : ĠAny ĊĠĠĠ Ġ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Field ( clazz , Ġallowed Fields )?. let Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . get ( obj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. get OrNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġclazz Ġthe Ġclass Ġto Ġsearch Ġin ĊĠĠĠĠ Ġ* Ġ@ param Ġallowed Fields Ġallowed Ġfield Ġnames ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ[ Field ], Ġmade Ġaccessible , Ġif Ġone Ġis Ġfound , Ġotherwise Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġfind Field ( clazz : ĠClass <* >, Ġallowed Fields : ĠCollection < String >): ĠField ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= Ġclazz . declared Fields ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfields . first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallowed Fields . contains ( it . name ) ĊĠĠĠĠĠĠĠ Ġ} ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġclazz Ġthe Ġclass Ġto Ġsearch Ġin ĊĠĠĠĠ Ġ* Ġ@ param Ġallowed Methods Ġallowed Ġmethod Ġnames ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ[ Method ] Ġif Ġone Ġis Ġfound , Ġotherwise Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġfind Method ( clazz : ĠClass <* >, Ġallowed Methods : ĠCollection < String >): ĠMethod ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclazz . declared Methods . first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallowed Methods . contains ( it . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ