package Ġorg . elixir _ lang . inspection Ċ Ċ import Ġcom . intellij . code Inspection .* Ċ import Ġcom . intellij . psi .* Ċ import Ġorg . elixir _ lang . psi .* Ċ import Ġorg . elixir _ lang . psi . call . Call Ċ Ċ class ĠReferences Ġ: ĠLocal Inspection Tool () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġbuild Visitor ( holder : ĠPro blems Holder , Ġis On The Fly : ĠBoolean , Ġsession : ĠLocal Inspection Tool Session ): ĠPsi Element Visitor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠE lixir Visitor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Element ( element : ĠPsi Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE lixir Alias Ġ-> Ġvisit Alias ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCall Ġ-> Ġvisit Call ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Alias ( alias : ĠE lixir Alias ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalias . reference ?. let Ġ{ Ġreference Ġ-> Ġregister Problem ( alias , Ġreference ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit At Non Numeric Operation ( at Non Numeric Operation : ĠAt Non Numeric Operation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġat Non Numeric Operation . reference ?. let Ġ{ Ġreference Ġ-> Ġregister Problem ( at Non Numeric Operation , Ġreference ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Un matched Qualified No Arguments Call ( qualified No Arguments Call : ĠE lixir Un matched Qualified No Arguments Call ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Qualified No Arguments Call ( qualified No Arguments Call ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Matched Qualified No Arguments Call ( qualified No Arguments Call : ĠE lixir Matched Qualified No Arguments Call ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Qualified No Arguments Call ( qualified No Arguments Call ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġvisit Call ( call : ĠCall ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . reference ?. let Ġ{ Ġreference Ġ-> Ġregister Problem ( call , Ġreference ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġvisit Qualified No Arguments Call ( qualified No Arguments Call : ĠQual ified No Arguments Call <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( qualified No Arguments Call . qual ifier ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCan 't Ġresolve Ġkeys Ġor Ġfields Ġof Ġa Ġmodule Ġattribute Ġor Ġassign ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAt Non Numeric Operation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCan 't Ġresolve Ġkey Ġor Ġfields Ġof Ġa Ġcapture ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE lixir Capture Numeric Operation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCan 't Ġresolve Ġkeys Ġor Ġfields Ġof Ġa Ġvariable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUn qualified No Arguments Call <* >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCan 't Ġresolve Ġa Ġchain Ġof Ġkeys Ġor Ġfields ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠQual ified No Arguments Call < *> Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvisit Call ( qualified No Arguments Call ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġregister Problem ( element : ĠPsi Element , Ġreference : ĠPsi Reference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reference Ġis ĠPsi Poly Variant Reference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Problem ( element , Ġreference ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Ġ= Ġreference . resolve () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolved Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . register Problem ( element , Ġ" Does Ġnot Ġresolve Ġto Ġanything ", ĠProblem Highlight Type . ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġregister Problem ( element : ĠPsi Element , Ġreference : ĠPsi Poly Variant Reference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolve Results Ġ= Ġreference . multi Resolve ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolve Results . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . register Problem ( element , Ġ" Does Ġnot Ġresolve Ġto Ġanything ", ĠProblem Highlight Type . ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! resolve Results . any Ġ{ Ġit . isValid Result Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . register Problem ( element , Ġ" Only Ġresolves Ġto Ġinvalid Ġresults ", ĠProblem Highlight Type . ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ