/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 Ġ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 . intent ions Ċ Ċ import Ġcom . intellij . code Insight . int ention . Low Priority Action Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . util . Text Range Ċ import Ġorg . jetbrains . kotlin . idea . Kotlin Bundle Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . analyze Ċ import Ġorg . jetbrains . kotlin . idea . core . Short en References Ċ import Ġorg . jetbrains . kotlin . idea . util . Ide Descriptor Render ers Ċ import Ġorg . jetbrains . kotlin . psi . Kt Call Element Ċ import Ġorg . jetbrains . kotlin . psi . Kt Call Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Psi Factory Ċ import Ġorg . jetbrains . kotlin . psi . Kt Type ArgumentList Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . calls . call Util . get Resolved Call Ċ import Ġorg . jetbrains . kotlin . resolve . calls . inference . Capt ured Type Ċ import Ġorg . jetbrains . kotlin . resolve . calls . tower . New Resolved Call Impl Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . Body Resolve Mode Ċ import Ġorg . jetbrains . kotlin . types . Error Utils Ċ import Ġorg . jetbrains . kotlin . types . checker . New Capt ured Type Ċ Ċ class ĠInsert Explicit Type Arguments Int ention Ġ: ĠSelf Target ing Range Int ention < Kt Call Expression >( ĊĠĠĠ ĠK t Call Expression :: class . java , ĊĠĠĠ ĠKotlin Bundle . lazy Message (" add . explicit . type . arguments ") Ċ ), ĠLow Priority Action Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapplic ability Range ( element : ĠK t Call Expression ): ĠText Range ? Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( is Applicable To ( element , Ġelement . analyze ())) Ġelement . callee Expression ?. text Range Ġelse Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġapply To ( element : ĠK t Call Expression , Ġeditor : ĠEditor ?) Ġ= Ġapply To ( element ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġis Applicable To ( element : ĠK t Call Element , Ġbinding Context : ĠBinding Context Ġ= Ġelement . analyze ( Body Resolve Mode . PAR TIAL )): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element . type Arguments . isNotEmpty ()) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element . callee Expression Ġ== Ġnull ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Call Ġ= Ġelement . get Resolved Call ( binding Context ) Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Args Ġ= Ġresolved Call . type Arguments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolved Call Ġis ĠNew Resolved Call Impl <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Parameter Types Ġ= Ġresolved Call . result ing Descriptor . value Parameters . map Ġ{ Ġit . type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Parameter Types . any Ġ{ ĠError Utils . contains ErrorType ( it ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtype Args . isNotEmpty () Ġ&& Ġtype Args . values . none Ġ{ ĠError Utils . contains ErrorType ( it ) Ġ|| Ġit Ġis ĠCapt ured Type Ġ|| Ġit Ġis ĠNew Capt ured Type Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġapply To ( element : ĠK t Call Element , Ġargument List : ĠK t Type ArgumentList , Ġshort en References : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcal lee Ġ= Ġelement . callee Expression Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew ArgumentList Ġ= Ġelement . add After ( argument List , Ġcal lee ) Ġas ĠK t Type ArgumentList ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( short en References ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShort en References . DEFAULT . process ( new ArgumentList ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġapply To ( element : ĠK t Call Element , Ġshort en References : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargument List Ġ= Ġcreate Type Arguments ( element , Ġelement . analyze ()) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply To ( element , Ġargument List , Ġshort en References ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Type Arguments ( element : ĠK t Call Element , Ġbinding Context : ĠBinding Context ): ĠK t Type ArgumentList ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Call Ġ= Ġelement . get Resolved Call ( binding Context ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġresolved Call . type Arguments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtypes Ġ= Ġresolved Call . candidate Descriptor . type Parameters ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġtypes . join ToString (", Ġ", Ġ"< ", Ġ"> ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIde Descriptor Render ers . SOURCE _ CODE . render Type ( args . getValue ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠK t Psi Factory ( element ). create Type Arguments ( text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ