/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . idea . ins pe ctions Ċ Ċ import Ġcom . intellij . code Inspection .* Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Psi Comment Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . search . sear ches . References Search Ċ import Ġorg . jetbrains . kotlin . descriptors . Callable Descriptor Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . resolve To Descriptor If Any Ċ import Ġorg . jetbrains . kotlin . idea . core . re placed Ċ import Ġorg . jetbrains . kotlin . idea . core . setType Ċ import Ġorg . jetbrains . kotlin . idea . intent ions . Specify Explicit Lambda Signature Int ention Ċ import Ġorg . jetbrains . kotlin . idea . quick fix . Specify Type Explicit ly Fix Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . all Children Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Non Strict Parent OfType Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Strict Parent OfType Ċ import Ġorg . jetbrains . kotlin . types . type Util . is Nothing Ċ Ċ class ĠFunction With Lambda Expression Body Inspection Ġ: ĠAbstract Kotlin Inspection () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Visitor ( holder : ĠPro blems Holder , Ġis On The Fly : ĠBoolean ) Ġ= Ġobject Ġ: ĠK t Visitor Void () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Named Function ( function : ĠK t Named Function ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( function ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Property Accessor ( accessor : ĠK t Property Accessor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( accessor . is Setter ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( accessor . returnType Reference Ġ!= Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( accessor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcheck ( element : ĠK t Declaration With Body ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallable Declaration Ġ= Ġelement . get Non Strict Parent OfType < Kt Callable Declaration >() Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( callable Declaration . type Reference Ġ!= Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlambda Ġ= Ġelement . body Expression Ġas ? ĠK t Lambda Expression Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunction Literal Ġ= Ġlambda . function Literal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function Literal . arrow Ġ!= Ġnull Ġ|| Ġfunction Literal . value Parameter List Ġ!= Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlambda Body Ġ= Ġfunction Literal . body Block Expression Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġelement . containing Kt File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġused Ġ= ĠReferences Search . search ( callable Declaration ). any () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfixes Ġ= ĠlistOf NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt ention Wrapper ( Specify Type Explicit ly Fix (), Ġfile ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt ention Wrapper ( Add Arrow Int ention (), Ġfile ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! used Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda Body . statements . size Ġ== Ġ 1 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda Body . all Children . none Ġ{ Ġit Ġis ĠPsi Comment Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRemove Br aces Fix () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! used ) ĠWrap Run Fix () Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . register Problem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Function Ġwith Ġ` = Ġ{ Ġ... Ġ}` Ġand Ġinferred Ġreturn Ġtype ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProblem Highlight Type . GENERIC _ ERROR _ OR _ WARNING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* fixes . to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠAdd Arrow Int ention Ġ: ĠSpecify Explicit Lambda Signature Int ention () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġallow Caret Inside Element ( element : ĠPsi Element ) Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠRemove Br aces Fix Ġ: ĠLocal Quick Fix Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName () Ġ= Ġ" Remove Ġbr aces " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Family Name () Ġ= Ġname ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply Fix ( project : ĠProject , Ġdescriptor : ĠProblem Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlambda Ġ= Ġdescriptor . psi Element Ġas ? ĠK t Lambda Expression Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġlambda . function Literal . body Expression Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreplaced Ġ= Ġlambda . re placed ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplaced . setType If Need () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠWrap Run Fix Ġ: ĠLocal Quick Fix Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName () Ġ= Ġ" Convert Ġto Ġrun Ġ{ Ġ... Ġ}" ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Family Name () Ġ= Ġname ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply Fix ( project : ĠProject , Ġdescriptor : ĠProblem Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlambda Ġ= Ġdescriptor . psi Element Ġas ? ĠK t Lambda Expression Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġlambda . function Literal . body Expression Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreplaced Ġ= Ġlambda . re placed ( Kt Psi Factory ( lambda ). create Expression By Pattern (" run Ġ{ Ġ$ 0 Ġ} ", Ġbody )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplaced . setType If Need () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠK t Expression . setType If Need () Ġ{ ĊĠĠĠ Ġval Ġdeclaration Ġ= Ġget Strict Parent OfType < Kt Callable Declaration >() Ġ?: Ġreturn ĊĠĠĠ Ġval Ġtype Ġ= Ġ( declaration . resolve To Descriptor If Any () Ġas ? ĠCallable Descriptor )?. returnType ĊĠĠĠ Ġif Ġ( type ?. is Nothing () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdeclaration . setType ( type ) ĊĠĠĠ Ġ} Ċ } Ċ