package Ġcom . nik it atom ilo v . api Ċ Ċ import Ġjava . lang . reflect . Method Ċ import Ġkotlin . reflect . K Class Ċ Ċ data Ġclass ĠNamed Result Ġ( ĊĠ Ġprivate Ġval Ġmethod : ĠMethod , ĊĠ Ġprivate Ġval Ġparam : ĠAny ? Ġ= Ġnull Ċ ) Ġ{ ĊĊĠ Ġfun Ġname With Param (): ĠString Ġ= Ġif Ġ( param Ġ== Ġnull ) Ġmethod . name Ġelse Ġ"${ method . name } Ġ- Ġ$ param " ĊĊĠ Ġfun Ġname (): ĠString Ġ= Ġmethod . name ĊĊĠ Ġfun Ġparam (): ĠAny Ġ{ ĊĠĠĠ Ġreturn Ġparam Ġ?: Ġerror (" param Ġis Ġnull ") ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠ Ġfun Ġparam For Sorting (): ĠComparable Wrapper Ġ{ ĊĠĠĠ Ġreturn ĠComparable Wrapper ( param ()) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠ Ġother Ġas ĠNamed Result ĊĊĠĠĠ Ġif Ġ( method Ġ!= Ġother . method ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ( param Ġ!= Ġother . param ) Ġreturn Ġfalse ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġmethod . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( param ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠComparable Wrapper ( ĊĠ Ġval Ġx : ĠAny Ċ ) Ġ: ĠComparable < Comparable Wrapper > Ġ{ ĊĠ Ġoverride Ġfun Ġcompare To ( other : ĠComparable Wrapper ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġa Ġ= Ġx . java Class ĊĠĠĠ Ġval Ġb Ġ= Ġother . x . java Class ĊĠĠĠ Ġval Ġx Ġ= Ġthis . x ĊĠĠĠ Ġval Ġy Ġ= Ġother . x ĊĠĠĠ Ġif Ġ(( a Ġ== Ġb ) Ġ&& Ġ( x Ġis ĠComparable <* >) Ġ&& Ġ( y Ġis ĠComparable < *> )) Ġ{ ĊĠĠĠĠĠ Ġval Ġxc Ġ= Ġcast ( x , Ġa ) ĊĠĠĠĠĠ Ġval Ġy c Ġ= Ġcast ( y , Ġa ) ĊĠĠĠĠĠ Ġval Ġmethod Ġ= Ġa . methods . filter Ġ{ Ġit . name Ġ== Ġ" compareTo " Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . parameter Count Ġ== Ġ 1 Ġ}. single OrNull Ġ{ Ġit . parameter Types [ 0 ] Ġ== Ġa Ġ} ĊĠĠĠĠĠ Ġif Ġ( method Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmethod . invoke ( xc , Ġy c ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult Ġas ĠInt ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġx . toString (). compareTo ( y . toString ()) ĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< T : ĠAny > Ġcast ( any : ĠAny , Ġclazz : ĠClass < out ĠT >): ĠT Ġ= Ġclazz . cast ( any )