/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 5 Ġ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 . resolve . validation Ċ Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġorg . jetbrains . kotlin . descriptors . Callable Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Function Descriptor Ċ import Ġorg . jetbrains . kotlin . diagnostics . Diagnostic Sink Ċ import Ġorg . jetbrains . kotlin . diagnostics . Errors Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Trace Ċ import Ġorg . jetbrains . kotlin . resolve . calls . Call Transformer Ċ import Ġorg . jetbrains . kotlin . resolve . calls . tasks . is Dynamic Ċ import Ġorg . jetbrains . kotlin . types . Error Utils Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . fq Name Unsafe Ċ import Ġorg . jetbrains . kotlin . resolve . calls . model . Resolved Call Ċ import Ġorg . jetbrains . kotlin . util . Operator Name Con ventions Ċ import Ġorg . jetbrains . kotlin . util . Operator Name Con ventions . PLUS Ċ import Ġorg . jetbrains . kotlin . util . Operator Name Con ventions . MINUS Ċ import Ġorg . jetbrains . kotlin . util . Operator Name Con ventions . UNARY _ PLUS Ċ import Ġorg . jetbrains . kotlin . util . Operator Name Con ventions . UNARY _ MINUS Ċ Ċ public Ġclass ĠOperator Validator Ġ: ĠSymbol Usage Validator Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate Call ( resolved Call : ĠResolved Call < *> ?, Ġtarget Descriptor : ĠCallable Descriptor , Ġtrace : ĠBinding Trace , Ġelement : ĠPsi Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction Descriptor Ġ= Ġtarget Descriptor Ġas ? ĠFunction Descriptor Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ(! check Not Error Or Dynamic ( function Descriptor )) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġjet Element Ġ= Ġelement Ġas ? ĠK t Element Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġresolved Call ?. call Ġ?: Ġtrace . binding Context [ Binding Context . CALL , Ġjet Element ] ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Invoke Call (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcall Ġis ĠCall Transformer . Call For Implicit Invoke ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Multi Declaration (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( resolved Call Ġ!= Ġnull ) Ġ&& Ġ( call ?. call Element Ġis ĠK t Multi Declaration Entry ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Convention Operator (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( jet Element Ġ! is ĠK t Operation Reference Expression ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġjet Element . getName For Convention al Operation () Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠisArray Access Expression () Ġ= Ġjet Element Ġis ĠK t Array Access Expression ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Multi Declaration () Ġ|| Ġis Invoke Call ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! function Descriptor . is Operator Ġ&& Ġcall Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( call . call Element , Ġfunction Descriptor , Ġtrace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġis Convention Operator Ġ= Ġis Convention Operator () ĊĠĠĠĠĠĠĠ Ġif Ġ( is Convention Operator Ġ|| ĠisArray Access Expression ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! function Descriptor . is Operator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( jet Element , Ġfunction Descriptor , Ġtrace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Convention Operator Ġ&& Ġcall Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Deprecated Unary Con ventions ( call , Ġfunction Descriptor , Ġtrace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Deprecated Unary Con ventions ( call : ĠCall , Ġfunction Descriptor : ĠFunction Descriptor , Ġsink : ĠDiagnostic Sink ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( call . call Element Ġas ? ĠK t Prefix Expression )?. let Ġ{ Ġexpr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunction Name Ġ= Ġfunction Descriptor . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function Name Ġ== ĠPL US Ġ|| Ġfunction Name Ġ== ĠMIN US ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewName Ġ= Ġif Ġ( function Name Ġ== ĠPL US ) ĠUN ARY _ PLUS Ġelse ĠUN ARY _ MINUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsink . report ( Errors . DEPRECATED _ UNARY _ PLUS _ MINUS . on ( expr , Ġfunction Descriptor , ĠnewName . asString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġreport ( element : ĠPsi Element , Ġdescriptor : ĠFunction Descriptor , Ġsink : ĠDiagnostic Sink ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! check Not Error Or Dynamic ( descriptor )) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontaining Declaration Ġ= Ġdescriptor . containing Declaration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontaining Declaration Name Ġ= Ġcontaining Declaration . fq Name Unsafe . asString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsink . report ( Errors . OPERATOR _ MODI FIER _ REQUIRED . on ( element , Ġdescriptor , Ġcontaining Declaration Name )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcheck Not Error Or Dynamic ( function Descriptor : ĠFunction Descriptor ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ(! function Descriptor . is Dynamic () Ġ&& Ġ! Error Utils . isError ( function Descriptor )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }