/* Ċ Ġ* Ġ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 . fir . analysis . check ers . expression Ċ Ċ import Ġorg . jetbrains . kotlin . fir . analysis . check ers . context . Checker Context Ċ import Ġorg . jetbrains . kotlin . fir . analysis . check ers . is Sup ertype Of Ċ import Ġorg . jetbrains . kotlin . fir . analysis . check ers . to Regular Class Symbol Ċ import Ġorg . jetbrains . kotlin . diagnostics . Diagnostic Reporter Ċ import Ġorg . jetbrains . kotlin . fir . analysis . diagnostics . F ir Errors Ċ import Ġorg . jetbrains . kotlin . diagnostics . report On Ċ import Ġorg . jetbrains . kotlin . fir . declarations . F ir Anonymous Object Ċ import Ġorg . jetbrains . kotlin . fir . declarations . F ir Class Ċ import Ġorg . jetbrains . kotlin . fir . declarations . F ir Regular Class Ċ import Ġorg . jetbrains . kotlin . fir . expressions . F ir Qualified Access Expression Ċ import Ġorg . jetbrains . kotlin . fir . references . F ir Super Reference Ċ import Ġorg . jetbrains . kotlin . utils . addTo Std lib . safe As Ċ Ċ object ĠF ir Not AS up ertype Checker Ġ: ĠF ir Qualified Access Expression Checker () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcheck ( expression : ĠF ir Qualified Access Expression , Ġcontext : ĠCheck er Context , Ġreporter : ĠDiagnostic Reporter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuper Reference Ġ= Ġexpression . callee Reference . safe As < F ir Super Reference >() ?. take If Ġ{ Ġit . had Explicit Type In Source () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtarget Class Symbol Ġ= Ġsuper Reference ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . super Type Ref ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . to Regular Class Symbol ( context . session ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġsurrounding Ġ= Ġcontext . find Closest Class ( super Reference . label Name ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ(! target Class Symbol . is Sup ertype Of ( sur rounding . symbol , Ġcontext . session )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreporter . report On ( expression . source , ĠF ir Errors . NOT _ A _ SUPER TYPE , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġclosest Ġto Ġthe Ġend Ġof Ġcontext . containing Declarations ĊĠĠĠĠ Ġ* Ġitem Ġlike ĠF ir Regular Class Ġor ĠF ir Anonymous Object ĊĠĠĠĠ Ġ* Ġor Ġnull Ġif Ġno Ġsuch Ġitem Ġcould Ġbe Ġfound . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠCheck er Context . find Closest Class ( label : ĠString ?): ĠF ir Class ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġcontaining Declarations . reversed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠF ir Regular Class Ġ|| Ġit Ġis ĠF ir Anonymous Object ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfir Class Ġ= Ġit Ġas ĠF ir Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġfir Class . symbol . class Id . short ClassName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( label Ġ== Ġnull Ġ|| Ġ(! className . is Special Ġ&& ĠclassName . identifier Ġ== Ġlabel )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfir Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } Ċ