/* Ċ Ġ* Ġ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 . declaration Ċ Ċ import Ġorg . jetbrains . kotlin . descriptors . Modal ity Ċ import Ġorg . jetbrains . kotlin . descriptors . Vis ibilities Ċ import Ġorg . jetbrains . kotlin . fir .* Ċ import Ġorg . jetbrains . kotlin . fir . analysis . check ers . context . Checker Context Ċ import Ġorg . jetbrains . kotlin . fir . analysis . check ers . context . find Closest Ċ import Ġorg . jetbrains . kotlin . fir . analysis . check ers . un subst it uted Scope Ċ import Ġorg . jetbrains . kotlin . fir . analysis . diagnostics . Diagnostic Reporter Ċ import Ġorg . jetbrains . kotlin . fir . analysis . diagnostics . F ir Errors Ċ import Ġorg . jetbrains . kotlin . fir . analysis . diagnostics . report On Ċ import Ġorg . jetbrains . kotlin . fir . analysis . overrides Backward Compatibility Helper Ċ import Ġorg . jetbrains . kotlin . fir . declarations .* Ċ import Ġorg . jetbrains . kotlin . fir . declarations . utils . is Final Ċ import Ġorg . jetbrains . kotlin . fir . declarations . utils . is Override Ċ import Ġorg . jetbrains . kotlin . fir . declarations . utils . modal ity Ċ import Ġorg . jetbrains . kotlin . fir . declarations . utils . visibility Ċ import Ġorg . jetbrains . kotlin . fir . resolve . subst itution . subst it utor By Map Ċ import Ġorg . jetbrains . kotlin . fir . resolve . to Symbol Ċ import Ġorg . jetbrains . kotlin . fir . scopes . F ir Type Scope Ċ import Ġorg . jetbrains . kotlin . fir . scopes . get Direct Over ridden Functions Ċ import Ġorg . jetbrains . kotlin . fir . scopes . get Direct Over ridden Properties Ċ import Ġorg . jetbrains . kotlin . fir . scopes . impl . to Con e Type Ċ import Ġorg . jetbrains . kotlin . fir . symbols . Symbol Internals Ċ import Ġorg . jetbrains . kotlin . fir . symbols . ensure Resolved Ċ import Ġorg . jetbrains . kotlin . fir . symbols . impl .* Ċ import Ġorg . jetbrains . kotlin . fir . types . Con e Kotlin ErrorType Ċ import Ġorg . jetbrains . kotlin . fir . types . Con e Kotlin Type Ċ import Ġorg . jetbrains . kotlin . fir . types . cone Type Ċ import Ġorg . jetbrains . kotlin . fir . types . upper Bound If Flex ible Ċ import Ġorg . jetbrains . kotlin . types . Abstract Type Checker Ċ import Ġorg . jetbrains . kotlin . types . Type Checker State Ċ Ċ object ĠF ir Override Checker Ġ: ĠF ir Class Checker () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcheck ( declaration : ĠF ir Class , Ġcontext : ĠCheck er Context , Ġreporter : ĠDiagnostic Reporter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Checker State Ġ= Ġcontext . session . type Context . new Type Checker State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Types EqualTo Anything Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstub Types EqualTo Anything Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfir Type Scope Ġ= Ġdeclaration . un subst it uted Scope ( context ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġdeclaration . declarations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠF ir Simple Function Ġ|| Ġit Ġis ĠF ir Property ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Member (( it Ġas ĠF ir Callable Declaration ). symbol , Ġdeclaration , Ġreporter , Ġtype Checker State , Ġfir Type Scope , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠF ir Type Scope . retrieve Direct Over ridden Of ( member Symbol : ĠF ir Callable Symbol < *> ): ĠList < F ir Callable Symbol <* >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( member Symbol ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Named Function Symbol Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Functions ByName ( member Symbol . name ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Direct Over ridden Functions ( member Symbol ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Property Symbol Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Properties ByName ( member Symbol . name ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Direct Over ridden Properties ( member Symbol ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" unexpected Ġmember Ġkind Ġ$ member Symbol ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠC one Kotlin Type . substitute All Type Parameters ( ĊĠĠĠĠĠĠĠ Ġoverride Declaration : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġbase Declaration : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġcontext : ĠCheck er Context ĊĠĠĠ Ġ): ĠC one Kotlin Type Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoverride Type Parameters Ġ= Ġoverride Declaration . type Parameter Symbols ĊĠĠĠĠĠĠĠ Ġif Ġ( override Type Parameters . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbase Type Parameters Ġ= Ġbase Declaration . type Parameter Symbols ĊĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmutable Map Of < F ir Type Parameter Symbol , ĠC one Kotlin Type >() ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġmin Of ( override Type Parameters . size , Ġbase Type Parameters . size ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Ġ= Ġoverride Type Parameters [ it ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= Ġbase Type Parameters [ it ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ from ] Ġ= Ġto . to Con e Type () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsubstit utor By Map ( map , Ġcontext . session ). substitute Or Self ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Modal ity ( ĊĠĠĠĠĠĠĠ Ġoverridden Symbols : ĠList < F ir Callable Symbol <* >>, ĊĠĠĠ Ġ): ĠF ir Callable Symbol < *> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( over ridden Ġin Ġoverridden Symbols ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmod ality Ġ= Ġoverridden . modal ity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Effect ively Final Ġ= Ġmod ality Ġ== Ġnull Ġ|| Ġmod ality Ġ== ĠMod ality . FINAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Effect ively Final ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġoverridden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠF ir Property Symbol . check Mut ability ( ĊĠĠĠĠĠĠĠ Ġoverridden Symbols : ĠList < F ir Callable Symbol <* >>, ĊĠĠĠ Ġ): ĠF ir Callable Symbol < *> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Var ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġoverridden Symbols . find Ġ{ Ġ( it Ġas ? ĠF ir Property Symbol )?. is Var Ġ== Ġtrue Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠF ir Callable Symbol <* >. check Visibility ( ĊĠĠĠĠĠĠĠ Ġcontaining Class : ĠF ir Class , ĊĠĠĠĠĠĠĠ Ġreporter : ĠDiagnostic Reporter , ĊĠĠĠĠĠĠĠ Ġoverridden Symbols : ĠList < F ir Callable Symbol <* >>, ĊĠĠĠĠĠĠĠ Ġcontext : ĠCheck er Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( over ridden Symbols . isEmpty ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġvis ibilities Ġ= Ġoverridden Symbols . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġto Ġit . visibility ĊĠĠĠĠĠĠĠ Ġ}. sorted By Ġ{ Ġpair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReg ard Ġ` null ` Ġcompare Ġas ĠInt . MIN Ġso Ġthat Ġwe Ġcan Ġreport ĠCAN NOT _ CHANGE _ ... Ġfirst Ġdeterministic ally ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVis ibilities . compare ( visibility , Ġpair . second ) Ġ?: ĠInt . MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠF ir Property Symbol ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgetter Symbol ?. check Visibility ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontaining Class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreporter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverridden Symbols . map Ġ{ Ġ( it Ġas ĠF ir Property Symbol ). getter Symbol Ġ?: Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetter Symbol ?. check Visibility ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontaining Class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreporter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverridden Symbols . map NotNull Ġ{ Ġ( it Ġas ĠF ir Property Symbol ). setter Symbol Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( over ridden , Ġoverridden Visibility ) Ġin Ġvis ibilities ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompare Ġ= ĠVis ibilities . compare ( visibility , Ġoverridden Visibility ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compare Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreporter . report Cannot Change Access Privilege ( this , Ġoverridden , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( compare Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreporter . report Cannot We aken Access Privilege ( this , Ġoverridden , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠF ir Property Accessor Symbol ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġcontext . find Closest < F ir File >() Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcontaining Declarations Ġ= Ġcontext . containing Declarations Ġ+ Ġcontaining Class ĊĠĠĠĠĠĠĠ Ġval Ġvisibility Checker Ġ= Ġcontext . session . visibility Checker ĊĠĠĠĠĠĠĠ Ġval Ġhas Visible Base Ġ= Ġoverridden Symbols . any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . ensure Resolved ( F ir Resolve Phase . STATUS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Opt In ( Symbol Internals :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfir Ġ= Ġit . fir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Checker . isVisible ( fir , Ġcontext . session , Ġfile , Ġcontaining Declarations , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Visible Base ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// NB : ĠOld ĠFE Ġreports Ġthis Ġin Ġan Ġattempt Ġto Ġoverride Ġprivate Ġmember , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// while Ġthe Ġnew ĠFE Ġdoesn 't Ġtreat Ġsuper 's Ġprivate Ġmembers Ġas Ġover rid able , Ġso Ġyou Ġwon 't Ġget Ġthem Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// instead Ġyou Ġwill Ġget ĠNOT H ING _ TO _ OVERRIDE , Ġwhich Ġseems Ġacceptable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreporter . report On ( source , ĠF ir Errors . CAN NOT _ OVERRIDE _ IN VISIBLE _ MEMBER , Ġthis , Ġoverridden Symbols . first (), Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠF ir Callable Symbol <* >. check De precation ( ĊĠĠĠĠĠĠĠ Ġreporter : ĠDiagnostic Reporter , ĊĠĠĠĠĠĠĠ Ġoverridden Symbols : ĠList < F ir Callable Symbol <* >>, ĊĠĠĠĠĠĠĠ Ġcontext : ĠCheck er Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġown De precation Ġ= Ġthis . deprecation ĊĠĠĠĠĠĠĠ Ġif Ġ( own De precation Ġ== Ġnull Ġ|| Ġown De precation . isNotEmpty ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġfor Ġ( over ridden Symbol Ġin Ġoverridden Symbols ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeprecation Info From Over ridden Ġ= Ġoverridden Symbol . deprecation Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeprecation From Over ridden Symbol Ġ= Ġdeprecation Info From Over ridden . all ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġdeprecation Info From Over ridden . by Specific Site ?. values ?. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreporter . report On ( source , ĠF ir Errors . OVERRIDE _ DE PREC ATION , Ġoverridden Symbol , Ġdeprecation From Over ridden Symbol , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSee Ġ[ Override Resolver # is ReturnType Ok For Override ] ĊĠĠĠ Ġprivate Ġfun ĠF ir Callable Symbol <* >. check ReturnType ( ĊĠĠĠĠĠĠĠ Ġoverridden Symbols : ĠList < F ir Callable Symbol <* >>, ĊĠĠĠĠĠĠĠ Ġtype Checker State : ĠType Checker State , ĊĠĠĠĠĠĠĠ Ġcontext : ĠCheck er Context , ĊĠĠĠ Ġ): ĠF ir Callable Symbol < *> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoverriding ReturnType Ġ= Ġresolved ReturnType Ref . cone Type ĊĊĠĠĠĠĠĠĠ Ġ// ĠDon 't Ġreport Ġ*_ ON _ OVERRIDE Ġdiagnostics Ġaccording Ġto Ġan Ġerror Ġreturn Ġtype . ĠThat Ġshould Ġbe Ġreported Ġseparately . ĊĠĠĠĠĠĠĠ Ġif Ġ( over riding ReturnType Ġis ĠC one Kotlin ErrorType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġoverridden Symbols . map Ġ{ Ġcontext . returnType Calculator . try Calculate ReturnType ( it ). cone Type . upper Bound If Flex ible () Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġbounds . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoverridden Declaration Ġ= Ġoverridden Symbols [ it ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoverridden ReturnType Ġ= Ġbounds [ it ]. substitute All Type Parameters ( this , Ġoverridden Declaration , Ġcontext ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis ReturnType Ok For Override Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( over ridden Declaration Ġis ĠF ir Property Symbol Ġ&& Ġoverridden Declaration . is Var ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAbstract Type Checker . equal Types ( type Checker State , Ġoverriding ReturnType , Ġoverridden ReturnType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAbstract Type Checker . is Subtype Of ( type Checker State , Ġoverriding ReturnType , Ġoverridden ReturnType ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is ReturnType Ok For Override ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġoverridden Declaration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Member ( ĊĠĠĠĠĠĠĠ Ġmember : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġcontaining Class : ĠF ir Class , ĊĠĠĠĠĠĠĠ Ġreporter : ĠDiagnostic Reporter , ĊĠĠĠĠĠĠĠ Ġtype Checker State : ĠType Checker State , ĊĠĠĠĠĠĠĠ Ġfir Type Scope : ĠF ir Type Scope , ĊĠĠĠĠĠĠĠ Ġcontext : ĠCheck er Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoverridden Member Symbols Ġ= Ġfir Type Scope . retrieve Direct Over ridden Of ( member ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! member . is Override ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( over ridden Member Symbols . isEmpty () Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . session . overrides Backward Compatibility Helper . override Can Be O mitted ( over ridden Member Symbols , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkind Ġ= Ġmember . source ?. kind ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġreport Ġif Ġthe Ġcurrent Ġmember Ġhas Ġreal Ġsource Ġor Ġit 's Ġa Ġmember Ġproperty Ġdeclared Ġinside Ġthe Ġprimary Ġconstructor . ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( kind Ġis ĠF ir Fake Source Element Kind . Data Class Generated Members ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverridden Member Symbols . find Ġ{ Ġit . is Final Ġ} ?. let Ġ{ Ġbase Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreporter . report On ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontaining Class . source , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF ir Errors . DATA _ CLASS _ OVERRIDE _ CONF LI CT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( kind Ġ! is ĠF ir Real Source Element Kind Ġ&& Ġkind Ġ! is ĠF ir Fake Source Element Kind . Property From Parameter ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoverridden Ġ= Ġoverridden Member Symbols . first (). original Or Self () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Containing Class Symbol Ġ= Ġoverridden . containing Class ()?. to Symbol ( context . session ) Ġas ? ĠF ir Regular Class Symbol Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreporter . report On ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember . source , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF ir Errors . VIRTUAL _ MEMBER _ HIDDEN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Containing Class Symbol , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( over ridden Member Symbols . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreporter . report Nothing To Override ( member , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Modal ity ( over ridden Member Symbols )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreporter . report Over riding Final Member ( member , Ġit , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( member Ġis ĠF ir Property Symbol ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmember . check Mut ability ( over ridden Member Symbols )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreporter . report Var Over ridden ByVal ( member , Ġit , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmember . check Visibility ( containing Class , Ġreporter , Ġoverridden Member Symbols , Ġcontext ) ĊĊĠĠĠĠĠĠĠ Ġmember . check De precation ( reporter , Ġoverridden Member Symbols , Ġcontext ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrestriction Ġ= Ġmember . check ReturnType ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverridden Symbols Ġ= Ġoverridden Member Symbols , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Checker State Ġ= Ġtype Checker State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠ Ġ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġwhen Ġ( member ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Named Function Symbol Ġ-> Ġreporter . report ReturnType Mismatch On Function ( member , Ġrestriction , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Property Symbol Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( member . is Var ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreporter . report Type Mismatch On Variable ( member , Ġrestriction , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreporter . report Type Mismatch On Property ( member , Ġrestriction , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDiagnostic Reporter . report Nothing To Override ( declaration : ĠF ir Callable Symbol <* >, Ġcontext : ĠCheck er Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreport On ( declaration . source , ĠF ir Errors . NOTH ING _ TO _ OVERRIDE , Ġdeclaration , Ġcontext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDiagnostic Reporter . report Over riding Final Member ( ĊĠĠĠĠĠĠĠ Ġoverriding : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġoverridden : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġcontext : ĠCheck er Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverridden . containing Class ()?. let Ġ{ Ġcontaining Class Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport On ( over riding . source , ĠF ir Errors . OVER RID ING _ FINAL _ MEMBER , Ġoverridden , Ġcontaining Class . name , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDiagnostic Reporter . report Var Over ridden ByVal ( ĊĠĠĠĠĠĠĠ Ġoverriding : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġoverridden : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġcontext : ĠCheck er Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreport On ( over riding . source , ĠF ir Errors . VAR _ OVER RID DEN _ BY _ VAL , Ġoverriding , Ġoverridden , Ġcontext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDiagnostic Reporter . report Cannot We aken Access Privilege ( ĊĠĠĠĠĠĠĠ Ġoverriding : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġoverridden : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġcontext : ĠCheck er Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontaining Class Ġ= Ġoverridden . containing Class () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġreport On ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverriding . source , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ir Errors . CAN NOT _ WE AK EN _ ACCESS _ PRIV ILE GE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverriding . visibility , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverridden , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontaining Class . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDiagnostic Reporter . report Cannot Change Access Privilege ( ĊĠĠĠĠĠĠĠ Ġoverriding : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġoverridden : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġcontext : ĠCheck er Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontaining Class Ġ= Ġoverridden . containing Class () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġreport On ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverriding . source , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ir Errors . CAN NOT _ CHANGE _ ACCESS _ PRIV ILE GE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverriding . visibility , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverridden , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontaining Class . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDiagnostic Reporter . report ReturnType Mismatch On Function ( ĊĠĠĠĠĠĠĠ Ġoverriding : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġoverridden : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġcontext : ĠCheck er Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreport On ( over riding . source , ĠF ir Errors . RETURN _ TYPE _ MIS MATCH _ ON _ OVERRIDE , Ġoverriding , Ġoverridden , Ġcontext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDiagnostic Reporter . report Type Mismatch On Property ( ĊĠĠĠĠĠĠĠ Ġoverriding : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġoverridden : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġcontext : ĠCheck er Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreport On ( over riding . source , ĠF ir Errors . PROPERTY _ TYPE _ MIS MATCH _ ON _ OVERRIDE , Ġoverriding , Ġoverridden , Ġcontext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDiagnostic Reporter . report Type Mismatch On Variable ( ĊĠĠĠĠĠĠĠ Ġoverriding : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġoverridden : ĠF ir Callable Symbol <* >, ĊĠĠĠĠĠĠĠ Ġcontext : ĠCheck er Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreport On ( over riding . source , ĠF ir Errors . VAR _ TYPE _ MIS MATCH _ ON _ OVERRIDE , Ġoverriding , Ġoverridden , Ġcontext ) ĊĠĠĠ Ġ} Ċ } Ċ