/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* Ġ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 . idea . frontend . api . fir . components Ċ Ċ import Ġorg . jetbrains . kotlin . fir . declarations .* Ċ import Ġorg . jetbrains . kotlin . fir . resolve . Scope Session Ċ import Ġorg . jetbrains . kotlin . fir . scopes .* Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . Validity Token Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . components . Kt Symbol Declaration Overrides Provider Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . fir . Kt F ir Analysis Session Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . fir . symbols . Kt F ir Class Or Object Symbol Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . fir . symbols . Kt F ir Symbol Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . symbols .* Ċ Ċ internal Ġclass ĠK t F ir Symbol Declaration Overrides Provider ( ĊĠĠĠ Ġoverride Ġval Ġanalysis Session : ĠK t F ir Analysis Session , ĊĠĠĠ Ġoverride Ġval Ġtoken : ĠValid ity Token , Ċ ) Ġ: ĠK t Symbol Declaration Overrides Provider (), ĠK t F ir Analysis Session Component Ġ{ ĊĊĠĠĠ Ġprivate Ġfun ĠF ir Type Scope . process Callable ByName ( declaration : ĠF ir Declaration ) Ġ= Ġwhen Ġ( declaration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠF ir Simple Function Ġ-> Ġprocess Functions ByName ( declaration . name ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠF ir Property Ġ-> Ġprocess Properties ByName ( declaration . name ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror Ġ{ Ġ" Invalid ĠFIR Ġsymbol Ġto Ġprocess : Ġ${ declaration :: class }" Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠF ir Type Scope . process Over ridden Declarations ( ĊĠĠĠĠĠĠĠ Ġdeclaration : ĠF ir Declaration , ĊĠĠĠĠĠĠĠ Ġprocessor : Ġ( F ir Callable Declaration <* >) Ġ-> ĠProcessor Action ĊĠĠĠ Ġ) Ġ= Ġwhen Ġ( declaration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠF ir Simple Function Ġ-> Ġprocess Over ridden Functions ( declaration . symbol ) Ġ{ Ġprocessor . invoke ( it . fir ) Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠF ir Property Ġ-> Ġprocess Over ridden Properties ( declaration . symbol ) Ġ{ Ġprocessor . invoke ( it . fir ) Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror Ġ{ Ġ" Invalid ĠFIR Ġsymbol Ġto Ġprocess : Ġ${ declaration :: class }" Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠK t Symbol > Ġget Over ridden Symbols ( ĊĠĠĠĠĠĠĠ Ġcallable Symbol : ĠT , ĊĠĠĠĠĠĠĠ Ġcontaining Declaration : ĠK t Class Or Object Symbol ĊĠĠĠ Ġ): ĠList < Kt Callable Symbol > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcheck ( callable Symbol Ġis ĠK t F ir Symbol <* >) ĊĠĠĠĠĠĠĠ Ġcheck ( containing Declaration Ġis ĠK t F ir Class Or Object Symbol ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcallable Symbol . fir Ref . with F ir ( F ir Resolve Phase . IMP LICIT _ TYPES _ BODY _ RESOL VE ) Ġ{ Ġfir Callable Element Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontaining Declaration . fir Ref . with F ir ( F ir Resolve Phase . IMP LICIT _ TYPES _ BODY _ RESOL VE ) Ġ{ Ġcontaining Declaration Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfir Type Scope Ġ= Ġcontaining Declaration . un subst it uted Scope ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontaining Declaration . session , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScope Session () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoverridden Element Ġ= Ġmutable Set Of < Kt Callable Symbol >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfir Type Scope . process Callable ByName ( fir Callable Element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfir Type Scope . process Over ridden Declarations ( fir Callable Element ) Ġ{ Ġoverridden Declaration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Symbol Ġ= Ġanalysis Session . fir Symbol Builder . build Callable Symbol ( over ridden Declaration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverridden Element . add ( kt Symbol ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProcessor Action . NEXT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverridden Element . toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }