/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 3 Ġ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 . jet . resolve . calls Ċ Ċ import Ġorg . jetbrains . jet . Configuration Kind Ċ import Ġorg . jetbrains . jet . Jet Lite Fixture Ċ import Ġorg . jetbrains . jet . Jet TestUtils Ċ import Ġorg . jetbrains . jet . cli . jvm . compiler . Jet Core Environment Ċ import Ġorg . jetbrains . jet . lang . diagnostics . Diagnostic Utils Ċ import Ġorg . jetbrains . jet . lang . psi . Jet Element Ċ import Ġorg . jetbrains . jet . lang . resolve . Binding Context Ċ import Ġorg . jetbrains . jet . lang . resolve . calls . model . Resolved Call Ċ import Ġorg . jetbrains . jet . lang . resolve . calls . tasks . Explicit Receiver Kind Ċ import Ġorg . jetbrains . jet . lang . resolve . scopes . re ceiv ers . Abstract Receiver Value Ċ import Ġorg . jetbrains . jet . lang . resolve . scopes . re ceiv ers . Expression Receiver Ċ import Ġorg . jetbrains . jet . lang . resolve . scopes . re ceiv ers . Receiver Value Ċ Ċ import Ġjava . io . File Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ import Ġorg . jetbrains . jet . lang . resolve . calls . model . Variable As Function Resolved Call Ċ import Ġorg . jetbrains . jet . lang . resolve . lazy . Jvm Resolve Util Ċ Ċ public Ġabstract Ġclass ĠAbstract Resolved Calls Test () Ġ: ĠJet Lite Fixture () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate Environment (): ĠJet Core Environment Ġ= Ġcreate Environment With Mock J dk ( Configuration Kind . JDK _ ONLY ) ĊĊĠĠĠ Ġpublic Ġfun Ġdo Test ( filePath : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( filePath ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= ĠJet TestUtils . do Load File ( file ) ĊĠĠĠĠĠĠĠ Ġval Ġdirectives Ġ= ĠJet TestUtils . parse Directives ( text ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ( call Name , Ġthis Object , Ġreceiver Argument ) Ġ= Ġwith Ġ( directives ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( get (" CALL "), Ġget (" THIS _ OBJECT "), Ġget (" RECE IVER _ ARGUMENT ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexplicit Receiver Kind Ġ= Ġdirectives . get Explicit Receiver Kind () ĊĊĠĠĠĠĠĠĠ Ġfun Ġanalyze File AndGet Resolved Call Entries (): ĠMap < Jet Element , ĠResolved Call <* >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpsi File Ġ= ĠJet TestUtils . load Jet File ( getProject (), Ġfile ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanalyze Ex haust Ġ= ĠJ vm Resolve Util . analyze One File With Java Integration And Check For Errors ( psi File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Context Ġ= Ġanalyze Ex haust . get Binding Context () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbinding Context . get Slice Contents ( Binding Context . RESOL VED _ CALL ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcheck Resolved Call ( resolved Call : ĠResolved Call <* >, Ġelement : ĠJet Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline And Column Ġ= ĠDiagnostic Utils . getLine And Column In Psi File ( element . get Containing File (), Ġelement . getText Range ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( actual This Object , Ġactual Receiver Argument , Ġactual Explicit Receiver Kind ) Ġ= Ġwith ( resolved Call ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( get This Object (). getText (), Ġget Receiver Argument (). getText (), Ġget Explicit Receiver Kind ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Data Message Ġ= Ġ" Actual Ġdata :\ n This Ġobject : Ġ$ actual This Object . ĠReceiver Ġargument : Ġ$ actual Receiver Argument . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Explicit Ġreceiver Ġkind : Ġ$ actual Explicit Receiver Kind .\ n " ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( this Object , Ġactual This Object , Ġ"${ actual Data Message } This Ġobject Ġmismatch : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( receiver Argument , Ġactual Receiver Argument , Ġ"${ actual Data Message } Receiver Ġargument Ġmismatch : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( explicit Receiver Kind , Ġactual Explicit Receiver Kind , Ġ"$ actual Data Message " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Explicit Ġreceiver Ġkind Ġfor Ġresolved Ġcall Ġfor Ġ'${ element . getText () }' $ line And Column Ġin Ġnot Ġas Ġexpected ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġcall Found Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ(( element , Ġresolved Call ) Ġin Ġanalyze File AndGet Resolved Call Entries ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtry Call ( resolved Call : ĠResolved Call <* >, Ġactual Name : ĠString ? Ġ= Ġelement . getText ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( call Name Ġ== Ġnull Ġ|| Ġcall Name Ġ!= Ġactual Name ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Resolved Call ( resolved Call , Ġelement ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolved Call Ġis ĠVariable As Function Resolved Call ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Call ( resolved Call . function Call , Ġ" invoke ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Call ( resolved Call . variable Call ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Call ( resolved Call ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( call Found , Ġ" Resolved Ġcall Ġfor Ġ$ call Name Ġwas Ġnot Ġfound ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠReceiver Value . getText () Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠExpression Receiver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . get Expression (). getText () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( this Ġis ĠAbstract Receiver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . getType (). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ĠtoString () Ċ Ċ private Ġval ĠEX PL IC IT _ RECE IVER _ KIND _ DIRECT IVE : ĠString Ġ= Ġ" EX PL IC IT _ RECE IVER _ KIND " Ċ private Ġfun ĠMap < String , ĠString >. get Explicit Receiver Kind (): ĠExplicit Receiver Kind Ġ{ ĊĠĠĠ Ġval Ġexplicit Receiver Kind Ġ= Ġget ( EX PL IC IT _ RECE IVER _ KIND _ DIRECT IVE ) ĊĠĠĠ Ġassert ( explicit Receiver Kind Ġ!= Ġnull ) Ġ{ Ġ"$ EX PL IC IT _ RECE IVER _ KIND _ DIRECT IVE Ġshould Ġbe Ġpresent ." Ġ} ĊĠĠĠ Ġtry ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠExplicit Receiver Kind . valueOf ( explicit Receiver Kind !! ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġmessage . append ("$ EX PL IC IT _ RECE IVER _ KIND _ DIRECT IVE Ġmust Ġbe Ġone Ġof Ġthe Ġfollowing : Ġ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( kind Ġin ĠExplicit Receiver Kind . values ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . append ("$ kind , Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmessage . append ("\ n not Ġ$ explicit Receiver Kind .") ĊĠĠĠĠĠĠĠ Ġthrow ĠAssertionError ( message ) ĊĠĠĠ Ġ} Ċ }