package Ġorg . elixir _ lang . beam . psi . impl Ċ Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġorg . elixir _ lang . psi . scope . put Initial Vis ited Element Ċ import Ġorg . elixir _ lang . psi . Mod ular . call Definition Clause Call While Ċ import Ġcom . intellij . psi . stubs . Stub Element Ċ import Ġcom . intellij . psi . Stub Based Psi Element Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . stubs . I Stub ElementType Ċ import Ġorg . elixir _ lang . psi . call . Maybe Exported Ċ import Ġorg . elixir _ lang . beam . psi . stubs . Module Stub Element Types Ċ import Ġcom . intellij . util . Incorrect OperationException Ċ import Ġcom . intellij . psi . Resolve State Ċ import Ġcom . intellij . psi . impl . source . Source Tree To Psi Map Ċ import Ġcom . intellij . psi . impl . source . tree . Tree Element Ċ import Ġorg . elixir _ lang . beam . psi . Module Ċ import Ġorg . elixir _ lang . psi . Call Definition Clause Ċ import Ġorg . elixir _ lang . psi . call . Call Ċ import Ġorg . jetbrains . annotations . Contract Ċ import Ġorg . jetbrains . annotations . Non N ls Ċ import Ġjava . lang . StringBuilder Ċ import Ġjava . util . ArrayList Ċ Ċ // ĠSee Ġcom . intellij . psi . impl . compiled . Cls Class Impl Ċ class ĠModule Impl < T Ġ: ĠStub Element < *> ? >( private Ġval Ġstub : ĠT ) Ġ: ĠModule Element Impl (), ĠModule , ĠStub Based Psi Element < T > Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġarray Ġof Ġchildren Ġfor Ġthe ĠP SI Ġelement . ĊĠĠĠĠ Ġ* ĠImport ant : ĠIn Ġsome Ġimplementations Ġchildren Ġare Ġonly Ġcomposite Ġelements , Ġi . e . Ġnot Ġa Ġleaf Ġelements ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġarray Ġof Ġchild Ġelements . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Children (): ĠArray < Psi Element > Ġ= Ġempty Array () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġparent Ġof Ġthe ĠP SI Ġelement . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġparent Ġof Ġthe Ġelement , Ġor Ġnull Ġif Ġthe Ġelement Ġhas Ġno Ġparent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠgetParent (): ĠPsi Element Ġ= Ġstub !!. getParent Stub (). psi ĊĊĠĠĠ Ġoverride Ġfun Ġget ElementType (): ĠI Stub ElementType < *, Ġ*> Ġ= Ġstub !!. get Stub Type () ĊĊĠĠĠ Ġoverride Ġfun Ġget Stub (): ĠT Ġ= Ġstub ĊĊĠĠĠ Ġoverride Ġfun Ġappend Mirror Text ( buffer : ĠStringBuilder , Ġindent Level : ĠInt ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Mirror ( element : ĠTree Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Mirror Checking Type ( element , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcall Definition Clause By Ar ity ByName Ġ= Ġcall Definition Clause By Ar ity ByName ( element ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( call Definition Stub Ġin Ġcall Definitions ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġcall Definition Stub . exported Name () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Definition Clause By Ar ity Ġ= Ġcall Definition Clause By Ar ity ByName [ name ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( call Definition Clause By Ar ity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġar ity Ġ= Ġcall Definition Stub . exported Ar ity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Definition Clause Ġ= Ġcall Definition Clause By Ar ity [ arity ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( call Definition Clause Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( call Definition Stub Ġas ĠModule Element Impl ). set Mirror ( Source Tree To Psi Map . psi To Tree NotNull ( call Definition Clause )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . error (" No Ġde compiled Ġsource Ġfunction Ġwith Ġname / arity Ġ(${ name }/${ arity }) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . error (" No Ġde compiled Ġsource Ġfunction Ġwith Ġname Ġ($ name )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcall Definitions (): ĠArray < Maybe Exported > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Stub () !!. getChildren ByType ( Module Stub Element Types . CALL _ DEFINITION , Ġempty Array ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġ` null ` Ġif Ġit Ġdoes Ġnot Ġhave Ġa Ġcanonical Ġname ĠOR Ġif Ġit Ġhas Ġmore Ġthan Ġone Ġcanonical Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcanonical Name (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( stub Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġempty Ġset Ġif Ġno Ġcanonical Ġnames ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcanonical Name Set (): ĠSet < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( stub Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġreturn Ġempty Set () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetName Identifier (): ĠPsi Element Ġ= Ġthis ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRename s Ġthe Ġelement . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname Ġthe Ġnew Ġelement Ġname . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġelement Ġcorresponding Ġto Ġthis Ġelement Ġafter Ġthe Ġrename Ġ( either Ġ` this ` ĊĠĠĠĠ Ġ* Ġor Ġa Ġdifferent Ġelement Ġif Ġthe Ġrename Ġcaused Ġthe Ġelement Ġto Ġbe Ġreplaced ). ĊĠĠĠĠ Ġ* Ġ@ throws ĠInc orrect OperationException Ġif Ġthe Ġmodification Ġis Ġnot Ġsupported Ġor Ġnot Ġpossible Ġfor Ġsome Ġreason . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠsetName (@ Non N ls Ġname : ĠString ): ĠPsi Element Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInc orrect OperationException (" Cannot Ġmodify Ġmodule Ġname Ġin ĠBe am Ġfiles ") ĊĊĠĠĠ Ġoverride Ġfun Ġget Navigation Element (): ĠPsi Element Ġ= Ġmirror ĊĊĠĠĠ Ġoverride Ġfun Ġget Project (): ĠProject Ġ= Ġmirror . project ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠLogger . getInstance ( Module Impl :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcall Definition Clause By Ar ity ByName ( mirror : ĠTree Element ): ĠMap < String , ĠMap < Int , ĠCall >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmirror Psi Ġ= Ġmirror . psi ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( mirror Psi Ġis ĠCall ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Resolve State Ġ= ĠResolve State . initial (). put Initial Vis ited Element ( mirror Psi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Definition By Ar ity ByName Ġ= Ġmutable Map Of < String , ĠMutable Map < Int , ĠCall >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Definition Clause Call While ( mirror Psi , Ġinitial Resolve State ) Ġ{ Ġcall : ĠCall , Ġacc Resolved State : ĠResolve State ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCall Definition Clause . name Ar ity Range ( call )?. let Ġ{ Ġname Ar ity Range Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Definition By Ar ity Ġ= Ġcall Definition By Ar ity ByName . get Or Put ( name Ar ity Range . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ar ity Range . arity Range . forEach Ġ{ Ġar ity Ġ-> Ġcall Definition By Ar ity [ arity ] Ġ= Ġcall Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Definition By Ar ity ByName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ