/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . Ġ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 . contracts . context ual . safe builders Ċ Ċ import Ġorg . jetbrains . kotlin . contracts . context ual . cfg . Context Contracts Ċ import Ġorg . jetbrains . kotlin . contracts . context ual . model . Context Ċ import Ġorg . jetbrains . kotlin . contracts . context ual . model . Context Verifier Ċ import Ġorg . jetbrains . kotlin . contracts . description . Invocation Kind Ċ import Ġorg . jetbrains . kotlin . diagnostics . Diagnostic Sink Ċ import Ġorg . jetbrains . kotlin . diagnostics . Errors Ċ import Ġorg . jetbrains . kotlin . psi . Kt Element Ċ Ċ internal Ġclass ĠCall Verifier ( ĊĠĠĠ Ġprivate Ġval Ġfunction Reference : ĠFunction Reference , ĊĠĠĠ Ġprivate Ġval Ġexpected Kind : ĠInvocation Kind , ĊĠĠĠ Ġval Ġsource Element : ĠK t Element Ċ ) Ġ: ĠContext Verifier Ġ{ ĊĠĠĠ Ġoverride Ġval Ġfamily Ġ= ĠCall Family ĊĊĠĠĠ Ġ// ĠTODO : ĠUNKNOWN Ġand ĠZERO Ġreports Ġto Ġlambda , Ġothers Ġto Ġcalls ĊĠĠĠ Ġoverride Ġfun Ġverify ( contexts : ĠList < Context >, Ġdiagnostic Sink : ĠDiagnostic Sink , Ġdeclared Contracts : ĠContext Contracts ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontexts . first () Ġas ? ĠCall Context Ġ?: Ġthrow ĠAssertionError () ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Kind Ġ= Ġcontext . calls [ function Reference ]?. kind Ġ?: ĠInvocation Kind . ZERO ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Satisf ied ( expected Kind , Ġactual Kind )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ"${ function Reference . function Descriptor . name } Ġcall Ġmismatch : Ġexpected Ġ$ expected Kind , Ġactual Ġ$ actual Kind " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostic Sink . report ( Errors . CONTEXT UAL _ EFFECT _ WARNING . on ( source Element , Ġmessage )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Satisf ied ( expected : ĠInvocation Kind , Ġactual : ĠInvocation Kind ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Ġ== ĠInvocation Kind . ZERO Ġ|| Ġexpected Ġ== ĠInvocation Kind . UNKNOWN ) Ġthrow ĠAssertionError () ĊĠĠĠĠĠĠĠ Ġif Ġ( actual Ġ== ĠInvocation Kind . UNKNOWN ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( actual Ġ== Ġexpected ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Ġ== ĠInvocation Kind . AT _ MO ST _ ON CE Ġ&& Ġ( actual Ġ== ĠInvocation Kind . ZERO Ġ|| Ġactual Ġ== ĠInvocation Kind . EX ACT LY _ ON CE )) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Ġ== ĠInvocation Kind . AT _ LE AST _ ON CE Ġ&& Ġactual Ġ== ĠInvocation Kind . EX ACT LY _ ON CE ) Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ }