package Ġorg . are nd . psi . ext . impl Ċ Ċ import Ġcom . intellij . lang . AST Node Ċ import Ġcom . intellij . openapi . application . run Read Action Ċ import Ġcom . intellij . openapi . components . service Ċ import Ġcom . intellij . psi . Smart Pointer Manager Ċ import Ġcom . intellij . psi . Smart Psi Element Pointer Ċ import Ġcom . intellij . psi . stubs . I Stub ElementType Ċ import Ġcom . intellij . psi . stubs . Stub Element Ċ import Ġorg . are nd . ext . reference . Pre cedence Ċ import Ġorg . are nd . naming . reference .* Ċ import Ġorg . are nd . psi . Are nd Alias Ċ import Ġorg . are nd . psi . Are nd File Ċ import Ġorg . are nd . psi . Are nd Prec Ċ import Ġorg . are nd . psi . ancestor Ċ import Ġorg . are nd . psi . ext . Psi Concrete Refer able Ċ import Ġorg . are nd . psi . ext . Psi Loc ated Refer able Ċ import Ġorg . are nd . psi . ext . Psi Stub bed Refer able Impl Ċ import Ġorg . are nd . psi . stubs . Are nd Named Stub Ċ import Ġorg . are nd . type checking . Type Checking Service Ċ Ċ abstract Ġclass ĠRefer able Adapter < Stub T > Ġ: ĠPsi Stub bed Refer able Impl < Stub T >, ĠPsi Loc ated Refer able Ċ where ĠStub T Ġ: ĠAre nd Named Stub , ĠStub T Ġ: ĠStub Element < *> Ġ{ ĊĠĠĠ Ġconstructor ( node : ĠAST Node ) Ġ: Ġsuper ( node ) ĊĊĠĠĠ Ġconstructor ( stub : ĠStub T , Ġnode Type : ĠI Stub ElementType < *, Ġ* >) Ġ: Ġsuper ( stub , Ġnode Type ) ĊĊĠĠĠ Ġabstract Ġfun Ġget Prec (): ĠAre nd Prec ? ĊĊĠĠĠ Ġabstract Ġfun Ġget Alias (): ĠAre nd Alias ? ĊĊĠĠĠ Ġoverride Ġfun Ġhas Alias () Ġ= Ġget Alias () Ġ!= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget Alias Name () Ġ= Ġget Alias ()?. alias Identifier ?. id ?. text ĊĊĠĠĠ Ġoverride Ġfun Ġget Alias Pre cedence () Ġ= Ġcalc Pre cedence ( get Alias ()?. prec ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Pre cedence () Ġ= Ġstub ?. pre cedence Ġ?: Ġcalc Pre cedence ( get Prec ()) ĊĊĠĠĠ Ġoverride Ġfun ĠgetType check able (): ĠPsi Loc ated Refer able Ġ= Ġancestor < Psi Concrete Refer able >() Ġ?: Ġthis ĊĊĠĠĠ Ġoverride Ġfun Ġget Location () Ġ= Ġif Ġ( isValid ) Ġ( containing File Ġas ? ĠAre nd File )?. module Location Ġelse Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget Loc ated Refer able Parent () Ġ= Ġparent ?. ancestor < Psi Loc ated Refer able >() ĊĊĠĠĠ Ġprotected Ġvar Ġtc Refer able Cache : ĠTC Refer able ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġdrop T CC ache () Ġ{ ĊĠĠĠĠĠĠĠ Ġtc Refer able Cache Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġmake TC Refer able ( data : ĠSmart Psi Element Pointer < Psi Loc ated Refer able >, Ġparent : ĠLoc ated Refer able ?): ĠTC Refer able ĊĊĠĠĠ Ġoverride Ġval Ġtc Refer able : ĠTC Refer able ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtc Refer able Cache Ġ?: Ġrun Read Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtc Refer able Cache Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġ( if Ġ( isValid ) Ġcontaining File Ġas ? ĠAre nd File Ġelse Ġnull ) Ġ?: Ġreturn @ run Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlong Name Ġ= Ġref Long Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . tc Ref Map [ long Name ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtc Refer able Cache Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocated Parent Ġ= Ġlocated Refer able Parent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġif Ġ( located Parent Ġis ĠAre nd File ) Ġlocated Parent . module Location ?. let Ġ{ ĠFull Module Refer able ( it ) Ġ} Ġelse Ġlocated Parent ?. tc Refer able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpointer Ġ= ĠSmart Pointer Manager . getInstance ( file . project ). create Smart Psi Element Pointer < Psi Loc ated Refer able >( this , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref Ġ= Ġmake TC Refer able ( pointer , Ġparent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtc Refer able Cache Ġ= Ġref ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . tc Ref Map [ long Name ] Ġ= Ġref ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdrop Type checked () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġproject . service < Type Checking Service >() ĊĠĠĠĠĠĠĠ Ġval Ġtc Ref Ġ= Ġtc Refer able Cache Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġ( containing File Ġas ? ĠAre nd File )?. module Location Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . tc Ref Maps [ location ]?. get ( ref Long Name ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġservice . dependency Listener . update ( tc Ref ) ĊĠĠĠĠĠĠĠ Ġ( tc Ref Ġas ? ĠTC Def Refer able )?. type checked Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtc Refer able Cache Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck TC Refer able (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtc Ref Ġ= Ġtc Refer able Cache Ġ?: Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( tc Ref . underlying Refer able Ġ!= Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrop TC Refer able () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck TC Refer able Name () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtc Ref Ġ= Ġtc Refer able Cache Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġref Name Ġ= Ġref Name ĊĠĠĠĠĠĠĠ Ġif Ġ( tc Ref . ref Name Ġ!= Ġref Name ) Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtc Ref 2 Ġ= Ġtc Refer able Cache Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tc Ref 2 . ref Name Ġ!= Ġref Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrop TC Ref Caches Re cursively () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdrop TC Refer able () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdrop TC Refer able () Ġ{ ĊĠĠĠĠĠĠĠ Ġtc Refer able Cache Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠAre nd Group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( refer able Ġin Ġinternal Refer ables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( refer able Ġas ? ĠRefer able Adapter <* >) ?. tc Refer able Cache Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdrop TC Ref Caches Re cursively () Ġ{ ĊĠĠĠĠĠĠĠ Ġtc Refer able Cache Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ! is ĠAre nd Group ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( refer able Ġin Ġinternal Refer ables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( refer able Ġas ? ĠRefer able Adapter <* >) ?. drop TC Ref Caches Re cursively () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( sub group Ġin Ġsub groups ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( sub group Ġas ? ĠRefer able Adapter <* >) ?. drop TC Ref Caches Re cursively () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( sub group Ġin Ġdynamic Sub groups ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( sub group Ġas ? ĠRefer able Adapter <* >) ?. drop TC Ref Caches Re cursively () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcalc Pre cedence ( prec : ĠAre nd Prec ?): ĠPre cedence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prec Ġ== Ġnull ) Ġreturn ĠPre cedence . DEFAULT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġassoc Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprec . right Assoc Kw Ġ!= Ġnull Ġ|| Ġprec . infix Right Kw Ġ!= Ġnull Ġ-> ĠPre cedence . Associ ativity . RIGHT _ ASSOC ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprec . left Assoc Kw Ġ!= Ġnull Ġ|| Ġprec . infix Left Kw Ġ!= Ġnull Ġ-> ĠPre cedence . Associ ativity . LEFT _ ASSOC ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprec . non Assoc Kw Ġ!= Ġnull Ġ|| Ġprec . infix Non Kw Ġ!= Ġnull Ġ-> ĠPre cedence . Associ ativity . NON _ ASSOC ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĠPre cedence . DEFAULT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpriority Ġ= Ġprec . number ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPre cedence ( assoc , Ġif Ġ( priority Ġ== Ġnull ) ĠPre cedence . MAX _ PRIORITY Ġelse Ġpriority . text ?. to Byte OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ( Pre cedence . MAX _ PRIORITY Ġ+ Ġ 1 ). to Byte (), Ġprec . infix Right Kw Ġ!= Ġnull Ġ|| Ġprec . infix Left Kw Ġ!= Ġnull Ġ|| Ġprec . infix Non Kw Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ