package Ġdev . em ort al . ray fast . util Ċ Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġjava . lang . IllegalArgumentException Ċ import Ġjava . util . function . Function Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . full . super classes Ċ import Ġkotlin . reflect . jvm . jvm Name Ċ Ċ /** Ċ Ġ* ĠUsed Ġto Ġgenerate Ġconverter s Ġof Ġspecified Ġtypes Ċ Ġ* Ċ Ġ* Ġ@ param Ġ< C > Ċ </ C > Ġ*/ Ċ class ĠConverter < C > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġconverting Functions : ĠMutable Map < K Class <* >, ĠFunction < *, ĠC >> Ġ= ĠConcurrent HashMap () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegisters Ġa Ġconversion Ġfunction Ġfor Ġa Ġspecific Ġclass ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġclazz Ġthe Ġclass Ġof Ġthe Ġconverter Ġfunction ĊĠĠĠĠ Ġ* Ġ@ param Ġconverter Function Ġthe Ġconverter Ġfunction ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > Ġthe Ġclass ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġregister ( clazz : ĠK Class < T >, Ġconverter Function : ĠFunction < T , ĠC >) Ġ{ ĊĠĠĠĠĠĠĠ Ġconverting Functions [ clazz ] Ġ= Ġconverter Function ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġregister ( clazz : ĠClass < T >, Ġconverter Function : ĠFunction < T , ĠC >) Ġ= Ġregister ( clazz . kotlin , Ġconverter Function ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġan Ġobject Ġto Ġa ĠArea 3 d . ĊĠĠĠĠ Ġ* Ġ< br ></ br >< br ></ br > ĊĠĠĠĠ Ġ* ĠThe Ġobject Ġneeds Ġto Ġhave Ġa Ġregistered Ġconverting Ġfunction . ĠThese ĊĠĠĠĠ Ġ* Ġfunctions Ġcan Ġbe Ġregistered Ġusing Ġ# register ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġfrom ( obj : ĠT ): ĠC Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Clazz : ĠK Class < out ĠT > Ġ= Ġobj :: class ĊĠĠĠĠĠĠĠ Ġvar Ġclazz : ĠK Class < *> ? Ġ= Ġoriginal Clazz ĊĠĠĠĠĠĠĠ Ġwhile Ġ( clazz Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverting Function Ġ= Ġconverting Functions [ clazz ] Ġas ĠFunction < Any , ĠC >? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( con verting Function Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clazz Ġ!= Ġoriginal Clazz ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconverting Functions [ original Clazz ] Ġ= Ġconverting Function ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconverting Function . apply ( obj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclazz Ġ= Ġclazz . super classes [ 0 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( original Clazz . simple Name Ġ?: Ġoriginal Clazz . jvm Name Ġ+ Ġ" object Ġprovided Ġto ĠConverter # from Ġdid Ġnot Ġhave Ġa Ġregistered Ġconverter ") ĊĠĠĠ Ġ} Ċ }