// ĠIG NORE _ BACKEND : ĠJVM _ IR Ċ // ĠIG NORE _ BACKEND : ĠJS _ IR Ċ // ĠTODO : Ġmut ed Ġautomatically , Ġinvestigate Ġshould Ġit Ġbe Ġran Ġfor ĠJS Ġor Ġnot Ċ // ĠIG NORE _ BACKEND : ĠJS , ĠN ATIVE Ċ Ċ // ĠWITH _ REF LECT Ċ Ċ import Ġkotlin . test . assertEquals Ċ Ċ fun ĠString ?. foo ( x : ĠInt , Ġy : ĠArray < Int >, Ġz : ĠInt Array , Ġw : ĠList < Map < Any , ĠA <* >> >) Ġ{} Ċ Ċ class ĠA < T > Ġ{ ĊĠĠĠ Ġfun Ġ< U > Ġbar ( t : ĠT , Ġu : ĠU ): ĠT ? Ġ= Ġnull Ċ } Ċ Ċ fun Ġbaz ( in Projection : ĠA < in ĠNumber >, Ġout Projection : ĠA < out ĠNumber >) Ġ{} Ċ Ċ fun Ġbox (): ĠString Ġ{ ĊĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . String ?", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . Int ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . Array < kotlin . Int >", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . IntArray ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . collections . List < kotlin . collections . Map < kotlin . Any , ĠA <* >> >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString ? :: foo . parameters . map Ġ{ Ġit . type . toString () Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ ĠassertEquals (" kotlin . Unit ", ĠString ? :: foo . returnType . toString ()) ĊĊĠĠĠ Ġval Ġbar Ġ= ĠA :: class . members . single Ġ{ Ġit . name Ġ== Ġ" bar " Ġ} ĊĠĠĠ ĠassertEquals ( listOf (" A < T >", Ġ" T ", Ġ" U "), Ġbar . parameters . map Ġ{ Ġit . type . toString () Ġ}) ĊĠĠĠ ĠassertEquals (" T ?", Ġbar . returnType . toString ()) ĊĊĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" A < in Ġkotlin . Number >", Ġ" A < out Ġkotlin . Number > "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ:: baz . parameters . map Ġ{ Ġit . type . toString () Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġreturn Ġ" OK " Ċ } Ċ