package Ġio . kot est . mpp Ċ Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Type Ċ Ċ expect Ġval Ġreflection : ĠReflection Ċ Ċ /** Ċ Ġ* ĠGroups Ġtogether Ġsome Ġbasic Ġplatform Ġag nost ic Ġreflection Ġoe pr ations . Ċ Ġ*/ Ċ interface ĠReflection Ġ{ ĊĊĠĠ Ġ/** ĊĠĠĠ Ġ* ĠReturns Ġthe Ġfully Ġqualified Ġname Ġfor Ġthe Ġgiven Ġclass Ġor Ġnull Ġif Ġthe Ġplatform ĊĠĠĠ Ġ* Ġdoes Ġnot Ġexpose Ġthis Ġinformation . ĊĠĠĠ Ġ*/ ĊĠĠ Ġfun Ġf qn ( k class : ĠK Class < *> ): ĠString ? ĊĊĠĠ Ġ/** ĊĠĠĠ Ġ* ĠReturns Ġthe Ġannotations Ġon Ġthis Ġclass Ġor Ġempty Ġlist Ġif Ġnot Ġsupported . ĊĠĠĠ Ġ* ĊĠĠĠ Ġ* Ġ@ param Ġrecursive Ġif Ġtrue Ġwill Ġrecursively Ġgather Ġannotations Ġon Ġannotations ... ĊĠĠĠ Ġ*/ ĊĠĠ Ġfun Ġannotations ( k class : ĠK Class <* >, Ġrecursive : ĠBoolean ): ĠList < Annotation > ĊĊĠĠ Ġ/** ĊĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġthis Ġclass Ġis Ġa Ġdata Ġclass Ġor Ġfalse Ġif Ġit Ġis Ġnot , Ġor Ġthe Ġplatform Ġdoes Ġnot ĊĠĠĠ Ġ* Ġexpose Ġthis Ġinformation . ĊĠĠĠ Ġ*/ ĊĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġis Data Class ( k class : ĠK Class < T >): ĠBoolean ĊĊĠĠ Ġ/** ĊĠĠĠ Ġ* ĠReturns Ġthe Ġnames Ġof Ġthe Ġparameters Ġif Ġsupported . ĠE g , Ġfor Ġ` fun Ġfoo ( a : ĠString , Ġb : ĠBoolean )` Ġon Ġthe ĠJVM ĊĠĠĠ Ġ* Ġit Ġwould Ġreturn Ġa , Ġb Ġand Ġon Ġunsupported Ġplatforms Ġan Ġempty Ġlist . ĊĠĠĠ Ġ*/ ĊĠĠ Ġfun Ġparam Names ( fn : ĠFunction < *> ): ĠList < String >? ĊĊĠĠ Ġ/** ĊĠĠĠ Ġ* ĠReturns Ġa Ġlist Ġof Ġthe Ġclass Ġmember Ġproperties Ġdefined Ġin Ġthe Ġprimary Ġconstructor , Ġif Ġsupported Ġon ĊĠĠĠ Ġ* Ġthe Ġplatform , Ġotherwise Ġreturns Ġan Ġempty Ġlist . ĊĠĠĠ Ġ*/ ĊĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġprimary Constructor Members ( klass : ĠK Class < T >): ĠList < Property > ĊĊĠĠ Ġ/** ĊĠĠĠ Ġ* ĠReturns Ġa Ġnew Ġinstance Ġcreated Ġfrom Ġthe Ġno Ġarg Ġconstructor , Ġif Ġsupported ĊĠĠĠ Ġ*/ ĊĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġnew Instance No Arg Constructor ( klass : ĠK Class < T >): ĠT ĊĊĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġnew Instance No Arg Constructor Or Object Instance ( klass : ĠK Class < T >): ĠT ĊĊĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġis Enum Class ( k class : ĠK Class < T >): ĠBoolean Ċ } Ċ Ċ object ĠBasic Reflection Ġ: ĠReflection Ġ{ ĊĠĠ Ġoverride Ġfun Ġf qn ( k class : ĠK Class < *> ): ĠString ? Ġ= Ġnull ĊĠĠ Ġoverride Ġfun Ġannotations ( k class : ĠK Class <* >, Ġrecursive : ĠBoolean ): ĠList < Annotation > Ġ= Ġempty List () ĊĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġis Data Class ( k class : ĠK Class < T >): ĠBoolean Ġ= Ġfalse ĊĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġis Enum Class ( k class : ĠK Class < T >): ĠBoolean Ġ= Ġfalse ĊĠĠ Ġoverride Ġfun Ġparam Names ( fn : ĠFunction < *> ): ĠList < String >? Ġ= Ġnull ĊĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġprimary Constructor Members ( klass : ĠK Class < T >): ĠList < Property > Ġ= Ġempty List () ĊĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġnew Instance No Arg Constructor ( klass : ĠK Class < T >): ĠT Ġ= Ġerror (" Unsupported Ġon Ġthis Ġplatform ") ĊĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġnew Instance No Arg Constructor Or Object Instance ( klass : ĠK Class < T >): ĠT Ġ= ĊĠĠĠĠĠ Ġerror (" Unsupported Ġon Ġthis Ġplatform ") Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġlongest Ġpossible Ġname Ġavailable Ġfor Ġthis Ġclass . Ċ Ġ* ĠThat Ġis , Ġin Ġorder , Ġthe ĠF QN , Ġthe Ġsimple Ġname , Ġor ĠtoString . Ċ Ġ*/ Ċ fun ĠK Class <* >. best Name (): ĠString Ġ= Ġreflection . fq n ( this ) Ġ?: Ġsimple Name Ġ?: Ġthis . toString () Ċ Ċ fun ĠK Class <* >. qualified Name OrNull (): ĠString ? Ġ= Ġreflection . fq n ( this ) Ċ Ċ /** Ċ Ġ* ĠFinds Ġthe Ġfirst Ġannotation Ġof Ġtype ĠT Ġon Ġthis Ġclass , Ġor Ġreturns Ġnull Ġif Ġannotations Ċ Ġ* Ġare Ġnot Ġsupported Ġon Ġthis Ġplatform Ġor Ġthe Ġannotation Ġis Ġmissing . Ċ Ġ* Ċ Ġ* ĠThis Ġmethod Ġwill Ġrecursively Ġincluded Ġcomposed Ġannotations . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠK Class <* >. annotation (): ĠT ? Ġ{ ĊĠĠ Ġreturn Ġreflection . annotations ( this , Ġtrue ). filter Is Instance < T >(). first OrNull () Ċ } Ċ Ċ /** Ċ Ġ* ĠFinds Ġall Ġannotations Ġof Ġtype ĠT Ġon Ġthis Ġclass , Ġor Ġreturns Ġan Ġempty Ġlist Ġif Ġannotations Ċ Ġ* Ġare Ġnot Ġsupported Ġon Ġthis Ġplatform Ġor Ġthe Ġannotation Ġis Ġnot Ġpresent . Ċ Ġ* Ċ Ġ* ĠThis Ġmethod Ġwill Ġrecursively Ġincluded Ġcomposed Ġannotations . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠK Class <* >. annotations (): ĠList < T > Ġ{ ĊĠĠ Ġreturn Ġreflection . annotations ( this , Ġtrue ). filter Is Instance < T >() Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġtrue Ġif Ġthis Ġclass Ġhas Ġthe Ġgiven Ġannotation . Ċ Ġ* Ċ Ġ* ĠThis Ġwill Ġrecursively Ġcheck Ġfor Ġannotations Ġby Ġlooking Ġfor Ġannotations Ġon Ġannotations . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠK Class <* >. has Annotation (): ĠBoolean Ġ= Ġthis . annotation < T >() Ġ!= Ġnull Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġinstance Ġof Ġthis ĠK Class Ġvia Ġa Ġno - arg Ġdefault Ġconstructor Ġor Ġif Ġthis Ġk class Ċ Ġ* Ġis Ġan Ġobject , Ġwill Ġreturn Ġthe Ġobject Ġinstance . Ċ Ġ* Ċ Ġ* ĠNote : ĠJVM Ġonly Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠAny > ĠK Class < T >. newInstance No Arg Constructor Or Object Instance (): ĠT Ġ= ĊĠĠ Ġreflection . newInstance No Arg Constructor Or Object Instance ( this ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġinstance Ġof Ġthis ĠK Class Ġvia Ġa Ġno - arg Ġdefault Ġconstructor . Ċ Ġ* ĠWill Ġerror Ġif Ġno Ġsuch Ġconstructor Ġexists . Ċ Ġ* Ċ Ġ* ĠNote : ĠJVM Ġonly Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠAny > ĠK Class < T >. newInstance No Arg Constructor (): ĠT Ġ= Ġreflection . newInstance No Arg Constructor ( this ) Ċ Ċ data Ġclass ĠProperty ( val Ġname : ĠString , Ġval Ġtype : ĠK Type , Ġval Ġcall : Ġ( Any ) Ġ-> ĠAny ?) Ċ