/* Ċ Ġ* Ġ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 . contracts . parsing . effects Ċ Ċ import Ġorg . jetbrains . kotlin . contracts . description . Calls Effect Declaration Ċ import Ġorg . jetbrains . kotlin . contracts . description . Effect Declaration Ċ import Ġorg . jetbrains . kotlin . contracts . description . Invocation Kind Ċ import Ġorg . jetbrains . kotlin . contracts . parsing .* Ċ import Ġorg . jetbrains . kotlin . psi . Kt Expression Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Trace Ċ import Ġorg . jetbrains . kotlin . resolve . calls . call Util . get Resolved Call Ċ import Ġorg . jetbrains . kotlin . resolve . calls . model . DefaultValue Argument Ċ import Ġorg . jetbrains . kotlin . resolve . calls . model . Expression Value Argument Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . fq Name Safe Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . parents Ċ Ċ internal Ġclass ĠPsi Calls Effect Parser ( ĊĠĠĠĠĠĠĠ Ġtrace : ĠBinding Trace , ĊĠĠĠĠĠĠĠ Ġcontract Parser Dispatcher : ĠPsi Contract Parser Dispatcher Ċ ) Ġ: ĠAbstract Psi Effect Parser ( trace , Ġcontract Parser Dispatcher ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġtry Parse Effect ( expression : ĠK t Expression ): ĠEffect Declaration ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresolved Call Ġ= Ġexpression . get Resolved Call ( trace . binding Context ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġresolved Call . result ing Descriptor ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! descriptor . is Calls In Place Effect Descriptor ()) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġlambda Ġ= Ġcontract Parser Dispatcher . parse Variable ( resolved Call . first Argument As Expression OrNull ()) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġkind Argument Ġ= Ġresolved Call . value Arguments ByIndex ?. get OrNull ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġkind Ġ= Ġwhen Ġ( kind Argument ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDefault Value Argument Ġ-> ĠInvocation Kind . UNKNOWN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExpression Value Argument Ġ-> Ġkind Argument . value Argument ?. get Argument Expression ()?. to Invocation Kind ( trace ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCalls Effect Declaration ( lambda , Ġkind ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠK t Expression . to Invocation Kind ( trace : ĠBinding Trace ): ĠInvocation Kind ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġthis . get Resolved Call ( trace . binding Context )?. result ing Descriptor Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ(! descriptor . parents . first (). is Invocation Kind Enum ()) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( descriptor . fq Name Safe . short Name ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContract s Dsl Names . AT _ MO ST _ ON CE _ KIND Ġ-> ĠInvocation Kind . AT _ MO ST _ ON CE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContract s Dsl Names . EX ACT LY _ ON CE _ KIND Ġ-> ĠInvocation Kind . EX ACT LY _ ON CE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContract s Dsl Names . AT _ LE AST _ ON CE _ KIND Ġ-> ĠInvocation Kind . AT _ LE AST _ ON CE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContract s Dsl Names . UNKNOWN _ KIND Ġ-> ĠInvocation Kind . UNKNOWN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }