/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 7 Ġ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 . kotlin . idea . completion . smart Ċ Ċ import Ġcom . intellij . code Insight . lookup . Lookup Element Ċ import Ġcom . intellij . code Insight . lookup . Lookup Element Builder Ċ import Ġcom . intellij . openapi . util . Text Range Ċ import Ġorg . jetbrains . kotlin . builtins . getValue Parameter Types From FunctionType Ċ import Ġorg . jetbrains . kotlin . builtins . isFunction Type Ċ import Ġorg . jetbrains . kotlin . idea . completion . Lambda Signature Templates Ċ import Ġorg . jetbrains . kotlin . idea . completion . suppress Auto Insertion Ċ import Ġorg . jetbrains . kotlin . idea . core . Expected Infos Ċ import Ġorg . jetbrains . kotlin . idea . core . fuzzy Type Ċ import Ġorg . jetbrains . kotlin . idea . resolve . Resolution Facade Ċ import Ġorg . jetbrains . kotlin . psi . Kt Block Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Function Literal Ċ import Ġorg . jetbrains . kotlin . psi . Kt Lambda Expression Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ Ċ object ĠLambda Signature Items Ġ{ ĊĠĠĠ Ġfun ĠaddTo Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollection : ĠMutable Collection < Lookup Element >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠK t Expression , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Context : ĠBinding Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolution Facade : ĠResolution Facade ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġposition . parent Ġas ? ĠK t Block Expression Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ!= Ġblock . statements . first ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġfunction Literal Ġ= Ġblock . parent Ġas ? ĠK t Function Literal Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( function Literal . arrow Ġ!= Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġliteral Expression Ġ= Ġfunction Literal . parent Ġas ĠK t Lambda Expression ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Function Types Ġ= ĠExpected Infos ( binding Context , Ġresolution Facade , Ġnull ). calculate ( literal Expression ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . fuzzy Type ?. type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isFunction Type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĠĠĠĠĠĠĠ Ġfor Ġ( function Type Ġin Ġexpected Function Types ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function Type . getValue Parameter Types From FunctionType (). isEmpty ()) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Lambda Signature Templates . explicit Parameter Types Required ( expected Function Types , Ġfunction Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollection . add ( create Lookup Element ( function Type , ĠLambda Signature Templates . Signature Presentation . NAMES _ OR _ TYPES , Ġexplicit Parameter Types Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollection . add ( create Lookup Element ( function Type , ĠLambda Signature Templates . Signature Presentation . NAMES , Ġexplicit Parameter Types Ġ= Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollection . add ( create Lookup Element ( function Type , ĠLambda Signature Templates . Signature Presentation . NAMES _ AND _ TYPES , Ġexplicit Parameter Types Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Lookup Element ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Type : ĠKotlin Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignature Presentation : ĠLambda Signature Templates . Signature Presentation , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexplicit Parameter Types : ĠBoolean ĊĠĠĠ Ġ): ĠLookup Element Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlookup String Ġ= ĠLambda Signature Templates . signature Presentation ( function Type , Ġsignature Presentation ) ĊĠĠĠĠĠĠĠ Ġval Ġpriority Ġ= Ġif Ġ( explicit Parameter Types ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSmart Completion Item Priority . L AMBDA _ SIGNATURE _ EX PL IC IT _ PARAMETER _ TYPES ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSmart Completion Item Priority . L AMBDA _ SIGNATURE ĊĠĠĠĠĠĠĠ Ġreturn ĠLookup Element Builder . create ( lookup String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Insert Handler ({ Ġcontext , Ġlookup Element Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġcontext . start Offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaceholder Ġ= Ġ"{} " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . document . replace String ( offset , Ġcontext . tail Offset , Ġplaceholder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLambda Signature Templates . insert Template ( context , ĠText Range ( offset , Ġoffset Ġ+ Ġplaceholder . length ), Ġfunction Type , Ġexplicit Parameter Types , Ġsignature Only Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. suppress Auto Insertion () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assign Smart Completion Priority ( priority ) ĊĠĠĠ Ġ} Ċ }