/** Ċ Ġ* Ġ< s late _ header > Ċ Ġ* Ġurl : Ġwww . s late kit . com Ċ Ġ* Ġgit : Ġwww . github . com / code - helix / s late kit Ċ Ġ* Ġorg : Ġwww . code helix . co Ċ Ġ* Ġauthor : ĠK ish ore ĠRed dy Ċ Ġ* Ġcopyright : Ġ 2 0 1 6 ĠCode Hel ix ĠSolutions ĠInc . Ċ Ġ* Ġlicense : Ġrefer Ġto Ġwebsite Ġand / or Ġgithub Ċ Ġ* Ġabout : ĠA Ġtool - kit , Ġutility Ġlibrary Ġand Ġserver - backend Ċ Ġ* Ġman tra : ĠSimp licity Ġabove Ġall Ġelse Ċ Ġ* Ġ</ s late _ header > Ċ Ġ*/ Ċ Ċ package Ġs late kit . meta Ċ Ċ import Ġs late kit . common . Enum Like Ċ import Ġs late kit . common . Enum Support Ċ import Ġkotlin . reflect .* Ċ import Ġkotlin . reflect . full .* Ċ import Ġkotlin . reflect . jvm . java Setter Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġk ish orer ed dy Ġon Ġ 5 / 2 3 / 1 7 . Ċ Ġ*/ Ċ object ĠReflect or Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġinstance Ġof Ġthe Ġtype Ġsupplied Ġ( Ġassumes Ġexist ance Ġof Ġa Ġ 0 Ġparam Ġconstructor Ġ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ tparam ĠT ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T > Ġcreate ( cls : ĠK Class < *> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcon Ġ= Ġcls . primary Constructor !! ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġcon . call () ĊĠĠĠĠĠĠĠ Ġreturn Ġres Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġinstance Ġof Ġthe Ġtype Ġsupplied Ġ( Ġassumes Ġexist ance Ġof Ġa Ġ 0 Ġparam Ġconstructor Ġ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ tparam ĠT ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T > Ġcreate With Args ( cls : ĠK Class <* >, Ġargs : ĠArray < Any ?> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcon Ġ= Ġcls . primary Constructor !! ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġcon . call (* args ) ĊĠĠĠĠĠĠĠ Ġreturn Ġres Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis S late Kit Enum ( cls : ĠK Class < *> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompanion Ġ= Ġcls . comp anion Object Instance ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( comp anion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEnum Support Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuper Companion Ġ= Ġget Super Class Companion ( cls ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġwhen ( super Companion ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEnum Support Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Enum Sample ( cls : ĠK Class < *> ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompanion Ġ= Ġcls . comp anion Object Instance ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( comp anion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEnum Support Ġ-> Ġcompanion . all ()[ 0 ]. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget EnumValue ( cls : ĠK Class <* >, Ġvalue : ĠAny ?): ĠEnum Like Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompanion Ġ= Ġcls . comp anion Object Instance ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( comp anion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEnum Support Ġ-> Ġget EnumValue ( cls , Ġcompanion , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuper Companion Ġ= Ġget Super Class Companion ( cls ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( super Companion ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEnum Support Ġ-> Ġget EnumValue ( cls , Ġsuper Companion , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" Unable Ġto Ġdynamically Ġparse Ġenum Ġ: Ġ" Ġ+ Ġcls . qualified Name Ġ+ Ġ", Ġenum Ġdoes Ġnot Ġextend ĠEnum Support ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Super Class Companion ( cls : K Class < *> ): Any ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( cls . sup ert ypes . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġcls . sup ert ypes . first OrNull ()?. classifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġit Ġas ĠK Class < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomp Ġ= Ġparent . comp anion Object Instance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget EnumValue ( cls : K Class <* >, Ġcompanion : Enum Support , Ġvalue : Any ?): ĠEnum Like Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEnum Like Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġcompanion . convert ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġcompanion . convert ( value . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġcompanion . parse ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġthrow ĠException (" Unable Ġto Ġdynamically Ġparse Ġenum Ġ: Ġ" Ġ+ Ġcls . qualified Name Ġ+ Ġ", Ġwith Ġnull Ġvalue ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" Unable Ġto Ġdynamically Ġparse Ġenum Ġ: Ġ" Ġ+ Ġcls . qualified Name Ġ+ Ġ", Ġwith Ġvalue Ġ: Ġ" Ġ+ Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget FieldValue ( inst : ĠAny , Ġname : ĠString ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġfind Field ( inst , Ġname ) ĊĠĠĠĠĠĠĠ Ġreturn Ġitem ?. getter ?. call ( inst ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget FieldValue ( inst : ĠAny , Ġprop : ĠK Property < *> ): ĠAny ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġprop . getter . call ( inst ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T > Ġget Annotation For Class ( cls : ĠK Class <* >, Ġan o Type : ĠK Class < *> ): ĠT Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġan o Ġ= Ġcls . annotations . filter Ġ{ Ġit Ġ-> Ġit . annotation Class Ġ== Ġan o Type Ġ}. first () ĊĠĠĠĠĠĠĠ Ġreturn Ġan o Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T > Ġget Annotation For Class Opt ( cls : ĠK Class <* >, Ġan o Type : ĠK Class < *> ): ĠT ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġan o Ġ= Ġcls . annotations . filter Ġ{ Ġit Ġ-> Ġit . annotation Class Ġ== Ġan o Type Ġ}. first OrNull () ĊĠĠĠĠĠĠĠ Ġreturn Ġan o Ġas ? ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġget Members ( ĊĠĠĠĠĠĠĠ Ġcls : ĠK Class <* >, ĊĠĠĠĠĠĠĠ Ġdeclared : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġfilter Out Built ins : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġvisibility : ĠK Visibility ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠList < K Callable <* >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmembers Ġ= Ġ( if Ġ( declared ) Ġcls . declared Members Ġelse Ġcls . members ). filter Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility ?. let Ġ{ Ġv Ġ-> Ġv Ġ== Ġit . visibility Ġ} Ġ?: Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmembers . filter Ġ{ Ġmem Ġ-> Ġif Ġ( filter Out Built ins ) Ġ! is BuiltIn ( mem ) Ġelse Ġtrue Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T > Ġget Annotation For Member ( member : ĠK Callable <* >, Ġan o Type : ĠK Class < *> ): ĠT ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġanno Ġ= Ġmember . annotations . filter Ġ{ Ġit Ġ-> Ġit . annotation Class Ġ== Ġan o Type Ġ}. first OrNull () ĊĠĠĠĠĠĠĠ Ġreturn Ġanno Ġas ? ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T > Ġget Annotated Members ( cls : ĠK Class <* >, Ġan o Type : ĠK Class <* >, Ġdeclared : ĠBoolean Ġ= Ġtrue ): ĠList < Pair < K Callable <* >, ĠT >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmembers Ġ= Ġif Ġ( declared ) Ġcls . declared Member Functions Ġelse Ġcls . member Functions ĊĠĠĠĠĠĠĠ Ġval Ġfiltered Ġ= Ġmembers . map Ġ{ Ġmember Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( member , Ġmember . annotations . filter Ġ{ Ġannotation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . annotation Class Ġ== Ġan o Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. first OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . Ġfilter Ġout Ġones Ġwith Ġannotation Ġsupplied ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġconvert Ġthem Ġto Ġtype ĠT ĊĠĠĠĠĠĠĠ Ġreturn Ġfiltered . filter Ġ{ Ġpair Ġ-> Ġpair . second Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( first , Ġsecond ) Ġ-> ĠPair ( first , Ġsecond Ġas ĠT ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T > Ġget Annotated Members Opt ( cls : ĠK Class <* >, Ġan o Type : ĠK Class <* >, Ġdeclared : ĠBoolean Ġ= Ġtrue ): ĠList < Pair < K Callable <* >, ĠT ? >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmembers Ġ= Ġif Ġ( declared ) Ġcls . declared Member Functions Ġelse Ġcls . member Functions ĊĠĠĠĠĠĠĠ Ġval Ġfiltered Ġ= Ġmembers . filter Ġ{ Ġit . visibility Ġ== ĠK Visibility . PUBLIC Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPair ( it , Ġit . annotations . filter Ġ{ Ġanno Ġ-> Ġanno . annotation Class Ġ== Ġan o Type Ġ}. first OrNull () Ġas ? ĠT ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfiltered ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T > Ġget Annotated Props ( cls : ĠK Class <* >, Ġan o Type : ĠK Class < *> ): ĠList < Pair < K Property <* >, ĠT ? >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġprops Ġ= Ġget Properties ( cls ). map Ġ{ Ġprop Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( prop , Ġprop . annotations . filter Ġ{ Ġannotation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . annotation Class Ġ== Ġan o Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. first OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . Ġfilter Ġout Ġones Ġwith Ġannotation Ġsupplied ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġconvert Ġthem Ġto Ġtype ĠT ĊĠĠĠĠĠĠĠ Ġreturn Ġprops . filter Ġ{ Ġpair Ġ-> Ġpair . second Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( first , Ġsecond ) Ġ-> ĠPair ( first , Ġsecond Ġas ĠT ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset FieldValue ( cls : ĠK Class <* >, Ġinst : ĠAny ?, Ġname : ĠString , Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprop Ġ= Ġcls . declared Member Properties . find Ġ{ Ġit . name Ġ== Ġname Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġprop Ġas ĠK Mutable Property 1 < Any , Ġ*> ĊĠĠĠĠĠĠĠ Ġitem . java Setter ?. invoke ( inst , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset FieldValue ( inst : ĠAny ?, Ġprop : ĠK Property <* >, Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġinst ?. let Ġ{ Ġinst Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġprop Ġas ĠK Mutable Property 1 < Any , Ġ*> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . java Setter ?. invoke ( inst , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Field ( inst : ĠAny , Ġname : ĠString ): ĠK Property 1 < Any , Ġ* >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġinst . k Class . declared Member Properties . find Ġ{ Ġit . name Ġ== Ġname Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Property ( cls : ĠK Class <* >, Ġname : ĠString ): ĠK Property < *> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġcls . declared Member Properties . find Ġ{ Ġit . name Ġ== Ġname Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Property Extended ( cls : ĠK Class <* >, Ġname : ĠString ): ĠK Property < *> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġcls . member Properties . find Ġ{ Ġit . name Ġ== Ġname Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Method ( cls : ĠK Class <* >, Ġname : ĠString ): ĠK Callable < *> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmem Ġ= Ġcls . members . find Ġ{ Ġm Ġ-> Ġm . name Ġ== Ġname Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Method Args ( cls : ĠK Class <* >, Ġname : ĠString ): ĠCollection < K Parameter >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmem Ġ= Ġcls . members . find Ġ{ Ġm Ġ-> Ġm . name Ġ== Ġname Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmem ?. parameters ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcall Method ( cls : ĠK Class <* >, Ġinst : ĠAny , Ġname : ĠString , Ġargs : ĠArray < Any ?> ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmem Ġ= Ġcls . members . find Ġ{ Ġm Ġ-> Ġm . name Ġ== Ġname Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠarrayOf ( inst , Ġ* args ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmem ?. call (* params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Properties ( cls : ĠK Class < *> ): ĠList < K Property <* >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( cls . is Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprops Map Ġ= Ġcls . member Properties . map Ġ{ Ġit . name Ġto Ġit Ġ}. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġcls . primary Constructor !!. parameters . map Ġ{ Ġit Ġ-> Ġprops Map [ it . name ] !! Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcls . member Properties . toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis BuiltIn ( mem : ĠK Callable < *> ): ĠBoolean Ġ= Ġmem . name Ġin ĠarrayOf (" equals ", Ġ" hashCode ", Ġ" toString ") ĊĊĠĠĠ Ġfun Ġis Data Class ( cls : ĠK Class < *> ): ĠBoolean Ġ= Ġcls . is Data ĊĊĠĠĠ Ġ// Ġfun ĠgetType From Property ( t pe : ĠK Property < *> ): ĠK Class < *> Ġ{ ĊĠĠĠ Ġ// ĠĠĠ Ġreturn Ġwhen Ġ( t pe . returnType . toString ()) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ" kotlin . String " ĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĠK Types . K String Class ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ" kotlin . Boolean " ĠĠĠĠĠĠĠĠĠĠ Ġ-> ĠK Types . K Bool Class ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ" kotlin . Short " ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĠK Types . K Short Class ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ" kotlin . Int " ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĠK Types . K Int Class ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ" kotlin . Long " ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĠK Types . K Long Class ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ" kotlin . Float " ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĠK Types . K Float Class ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ" kotlin . Double " ĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĠK Types . K Double Class ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ" java . time . LocalDate " ĠĠĠĠĠ Ġ-> ĠK Types . K LocalDate Class ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ" java . time . Local Time " ĠĠĠĠĠ Ġ-> ĠK Types . K Local Time Class ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ" java . time . LocalDateTime " Ġ Ġ-> ĠK Types . K LocalDateTime Class ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ" s late kit . common . DateTime " Ġ-> ĠK Types . K DateTime Class ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ" java . util . UUID " ĠĠĠĠĠĠĠĠĠĠ Ġ-> ĠK Types . K UUID Class ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ" s late kit . common . ids . UniqueId " Ġ-> ĠK Types . K UniqueId Class ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĠAny :: class ĊĠĠĠ Ġ// ĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ Ġfun Ġfind Field J ( inst : Any , Ġname : String ): ĠField ? Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġinst . k Class . java . declared Fields . find Ġ{ Ġit . name Ġ== Ġname Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġfor ( m Ġin Ġinst . k Class . java . declared Fields ){ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġif ( m . name Ġ== Ġname ){ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( m ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠ Ġ// ĠĠĠ Ġ} Ċ } Ċ Ċ val Ġ< T Ġ: ĠAny > ĠT . k Class : ĠK Class < T > Ġget () Ġ= Ġjava Class . kotlin Ċ