// ĠIG NORE _ BACKEND _ FI R : ĠJVM _ IR Ċ // ĠTARGET _ BACKEND : ĠJVM Ċ Ċ // ĠWITH _ REF LECT Ċ // ĠFULL _ JDK Ċ Ċ import Ġjava . lang . reflect . Generic ArrayType Ċ import Ġjava . lang . reflect . Type Variable Ċ import Ġjava . lang . reflect . Parameterized Type Ċ import Ġkotlin . reflect . jvm .* Ċ import Ġkotlin . test . assertEquals Ċ Ċ fun Ġfoo ( strings : ĠArray < String >, Ġintegers : ĠArray < Int >, Ġobject Arrays : ĠArray < Array < Any >>) Ġ{} Ċ Ċ fun Ġbar (): ĠArray < List < String >> Ġ= Ġnull !! Ċ class ĠA < T > Ġ{ ĊĠĠĠ Ġfun Ġbaz (): ĠArray < T > Ġ= Ġnull !! Ċ } Ċ Ċ fun Ġbox (): ĠString Ġ{ ĊĠĠĠ ĠassertEquals ( Array < String >:: class . java , Ġ:: foo . parameters [ 0 ]. type . java Type ) ĊĠĠĠ ĠassertEquals ( Array < Int >:: class . java , Ġ:: foo . parameters [ 1 ]. type . java Type ) ĊĠĠĠ ĠassertEquals ( Array < Array < Any >>:: class . java , Ġ:: foo . parameters [ 2 ]. type . java Type ) ĊĊĠĠĠ Ġval Ġg Ġ= Ġ:: bar . returnType . java Type ĊĠĠĠ Ġif Ġ( g Ġ! is ĠGeneric ArrayType Ġ|| Ġg . generic ComponentType Ġ! is ĠParameter ized Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Fail : Ġshould Ġbe Ġarray Ġof Ġparameter ized Ġtype , Ġbut Ġwas Ġ$ g Ġ(${ g . java Class })" ĊĊĠĠĠ Ġval Ġh Ġ= ĠA < String >:: baz . returnType . java Type ĊĠĠĠ Ġif Ġ( h Ġ! is ĠGeneric ArrayType Ġ|| Ġh . generic ComponentType Ġ! is ĠType Variable <* >) ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Fail : Ġshould Ġbe Ġarray Ġof Ġtype Ġvariable , Ġbut Ġwas Ġ$ h Ġ(${ h . java Class })" ĊĊĠĠĠ Ġreturn Ġ" OK " Ċ } Ċ