// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ċ package Ġorg . jetbrains . kotlin . nj 2 k . conversions Ċ Ċ import Ġorg . jetbrains . kotlin . nj 2 k . New J 2 k Converter Context Ċ import Ġorg . jetbrains . kotlin . nj 2 k . symbols . JK Un iverse Field Symbol Ċ import Ġorg . jetbrains . kotlin . nj 2 k . tree .* Ċ import Ġorg . jetbrains . kotlin . nj 2 k . types . JK Java ArrayType Ċ import Ġorg . jetbrains . kotlin . utils . addTo Std lib . safe As ĊĊ Ċ class ĠArray Operations Conversion ( context : ĠNew J 2 k Converter Context ) Ġ: ĠRecursive Applicable Conversion Base ( context ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply To Element ( element : ĠJ K Tree Element ): ĠJ K Tree Element Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġ! is ĠJ K Qualified Expression ) Ġreturn Ġrecurse ( element ) ĊĠĠĠĠĠĠĠ Ġval Ġselector Ġ= Ġelement . selector Ġas ? ĠJ K Field Access Expression Ġ?: Ġreturn Ġrecurse ( element ) ĊĠĠĠĠĠĠĠ Ġif Ġ( element . receiver . isArray Or Var arg Type Parameter () Ġ&& Ġselector . identifier . name Ġ== Ġ" length ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Call Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ K Field Access Expression ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsymbol Provider . provide Field Symbol (" kotlin . Array . size ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . selector Ġ= Ġsize Call ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrecurse ( element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠJ K Expression . isArray Or Var arg Type Parameter (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( calculate Type ( type Factory ) Ġis ĠJ K Java ArrayType ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġparameter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsafe As < JK Field Access Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . identifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. safe As < JK Un iverse Field Symbol >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . target ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . safe As < JK Parameter >() ĊĠĠĠĠĠĠĠ Ġreturn Ġparameter ?. is Var Args Ġ== Ġtrue ĊĠĠĠ Ġ} Ċ }