/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 6 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . u ast . kotlin Ċ Ċ import Ġcom . intellij . psi . Psi Type Ċ import Ġorg . jetbrains . kotlin . psi . Kt Block Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Lambda Expression Ċ import Ġorg . jetbrains . kotlin . resolve . binding Context Util . is Used As Result Of Lambda Ċ import Ġorg . jetbrains . u ast .* Ċ import Ġorg . jetbrains . u ast . kotlin . psi . U ast Kotlin Psi Parameter Ċ Ċ class ĠKotlin UL ambda Expression ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġsource Psi : ĠK t Lambda Expression , ĊĠĠĠĠĠĠĠ Ġgiven Parent : ĠU Element ? Ċ ) Ġ: ĠKotlin Abstract U Expression ( given Parent ), ĠU Lambda Expression , ĠKotlin U Element WithType Ġ{ ĊĠĠĠ Ġoverride Ġval Ġfunctional Interface Type : ĠPsi Type ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Functional Interface Type () ĊĊĠĠĠ Ġoverride Ġval Ġbody Ġby Ġl z Ġ{ ĊĠĠĠĠĠĠĠ Ġsource Psi . body Expression ?. let Ġ{ ĠBody ( it , Ġthis ) Ġ} Ġ?: ĠU ast Empty Expression ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBody ( body Expression : ĠK t Block Expression , Ġparent : ĠKotlin UL ambda Expression ) Ġ: ĠKotlin U Block Expression ( body Expression , Ġparent ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġexpressions : ĠList < U Expression > Ġby Ġl z Ġexpressions @{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatements Ġ= Ġsource Psi . statements ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( statements . isEmpty ()) Ġreturn @ expressions Ġempty List < U Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArrayList < U Expression >( statements . size ). also Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatements . sub List ( 0 , Ġstatements . size Ġ- Ġ 1 ). map To ( result ) Ġ{ ĠKotlin Converter . convert OrEmpty ( it , Ġthis ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( implicit Return Ġ?: ĠKotlin Converter . convert OrEmpty ( statements . last (), Ġthis )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġimplicit Return : ĠKotlin U Implicit Return Expression ? Ġby Ġl z Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Expression Ġ= Ġsource Psi . statements . last OrNull () Ġ?: Ġreturn @ lz Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! last Expression . is Used As Result Of Lambda ( last Expression . analyze ())) Ġreturn @ lz Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin U Implicit Return Expression ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Expression Ġ= ĠKotlin Converter . convert OrEmpty ( last Expression , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġvalue Parameters Ġby Ġl z Ġ{ ĊĠĠĠĠĠĠĠ Ġsource Psi . value Parameters . map Indexed Ġ{ Ġi , Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin U Parameter ( U ast Kotlin Psi Parameter . create ( p , Ġsource Psi , Ġthis , Ġi ), Ġsource Psi , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun Ġas Render String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrendered Value Parameters Ġ= Ġif Ġ( value Parameters . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Parameters . join ToString Ġ{ Ġit . as Render String () Ġ} Ġ+ Ġ" Ġ-> \ n " ĊĠĠĠĠĠĠĠ Ġval Ġexpressions Ġ= Ġ( body Ġas ? ĠU Block Expression )?. expressions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . join ToString ("\ n ") Ġ{ Ġit . as Render String (). with Margin Ġ} Ġ?: Ġbody . as Render String () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ"{ Ġ$ rendered Value Parameters \ n $ expressions \ n }" ĊĠĠĠ Ġ} Ċ }