/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 8 Ġ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 Document Manager Ċ import Ġcom . intellij . psi . Psi Element Visitor Ċ import Ġorg . jetbrains . kotlin . descriptors . Value Parameter Descriptor Ċ import Ġorg . jetbrains . kotlin . idea . Kotlin Bundle Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . analyze Ċ import Ġorg . jetbrains . kotlin . idea . ins pe ctions . collections . is Calling Ċ import Ġorg . jetbrains . kotlin . idea . intent ions . Replace It With Explicit Function Literal Param Int ention Ċ import Ġorg . jetbrains . kotlin . idea . intent ions . call Expression Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . rename . Kotlin Variable In place Rename Handler Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . psi . psi Util .* Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . calls . call Util . get Resolved Call Ċ Ċ class ĠNested Lambda Shadow ed Implicit Parameter Inspection Ġ: ĠAbstract Kotlin Inspection () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscope Functions Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . also ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . let ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . take If ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin . take Unless " ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ ĠF q Name ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Visitor ( holder : ĠPro blems Holder , Ġis On The Fly : ĠBoolean ): ĠPsi Element Visitor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlambda Expression Visitor ( fun ( lambda : ĠK t Lambda Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lambda . value Parameters . isNotEmpty ()) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lambda . get Strict Parent OfType < Kt Lambda Expression >() Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġlambda . analyze () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimplicit Parameter Ġ= Ġlambda . get Implicit Parameter ( context ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lambda . getParent Implicit Parameter Lambda ( context ) Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualified Expression Ġ= Ġlambda . get Strict Parent OfType < Kt Qualified Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( qualified Expression Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceiver Ġ= Ġqualified Expression . receiver Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġqualified Expression . call Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( receiver . text Ġ== Ġ" it " Ġ&& Ġcall ?. is Calling ( scope Functions , Ġcontext ) Ġ== Ġtrue ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontaining File Ġ= Ġlambda . containing File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlambda . forEach Desc endant OfType < Kt Name Reference Expression > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Implicit Parameter Reference ( lambda , Ġimplicit Parameter , Ġcontext )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . register Problem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Bundle . message (" implicit . parameter . it . of . enc lo sing . lambda . is . shadow ed "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProblem Highlight Type . GENERIC _ ERROR _ OR _ WARNING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Explicit Parameter To Outer Lambda Fix (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt ention Wrapper ( Replace It With Explicit Function Literal Param Int ention (), Ġcontaining File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠAdd Explicit Parameter To Outer Lambda Fix Ġ: ĠLocal Quick Fix Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName () Ġ= ĠKotlin Bundle . message (" add . explicit . parameter . to . outer . lambda . fix . text ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Family Name () Ġ= Ġname ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply Fix ( project : ĠProject , Ġdescriptor : ĠProblem Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimplicit Parameter Reference Ġ= Ġdescriptor . psi Element Ġas ? ĠK t Name Reference Expression Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlambda Ġ= Ġimplicit Parameter Reference . get Strict Parent OfType < Kt Lambda Expression >() Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Lambda Ġ= Ġlambda . getParent Implicit Parameter Lambda () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter Ġ= Ġparent Lambda . function Literal . get OrCreate Parameter List (). add Parameter Before ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK t Psi Factory ( project ). create Lambda Parameter List (" it "). parameters . first (), Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġparent Lambda . find Existing Editor () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Document Manager . getInstance ( project ). do Post p oned Operations And Un block Document ( editor . document ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . caret Model . moveTo Offset ( parameter . start Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Variable In place Rename Handler (). do Rename ( parameter , Ġeditor , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠK t Lambda Expression . get Implicit Parameter ( context : ĠBinding Context ): ĠValue Parameter Descriptor ? Ġ{ ĊĠĠĠ Ġreturn Ġcontext [ Binding Context . FUNCTION , Ġfunction Literal ]?. value Parameters ?. single OrNull () Ċ } Ċ Ċ private Ġfun ĠK t Lambda Expression . getParent Implicit Parameter Lambda ( context : ĠBinding Context Ġ= Ġthis . analyze ()): ĠK t Lambda Expression ? Ġ{ ĊĠĠĠ Ġreturn ĠgetParent Of Types And Predicate ( true , ĠK t Lambda Expression :: class . java ) Ġ{ Ġlambda Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( lambda . value Parameters . isNotEmpty ()) Ġreturn @ getParent Of Types And Predicate Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġimplicit Parameter Ġ= Ġlambda . get Implicit Parameter ( context ) Ġ?: Ġreturn @ getParent Of Types And Predicate Ġfalse ĊĠĠĠĠĠĠĠ Ġlambda . any Desc endant OfType < Kt Name Reference Expression > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Implicit Parameter Reference ( lambda , Ġimplicit Parameter , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠK t Name Reference Expression . is Implicit Parameter Reference ( ĊĠĠĠ Ġlambda : ĠK t Lambda Expression , ĊĠĠĠ Ġimplicit Parameter : ĠValue Parameter Descriptor , ĊĠĠĠ Ġcontext : ĠBinding Context Ċ ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġtext Ġ== Ġ" it " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġget Strict Parent OfType < Kt Lambda Expression >() Ġ== Ġlambda ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġget Resolved Call ( context )?. result ing Descriptor Ġ== Ġimplicit Parameter Ċ }