/* Ċ Ġ* Ġ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 Ġcom . intellij . lang . Light er AST Node Ċ import Ġcom . intellij . openapi . util . Ref Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi Error Element Ċ import Ġcom . intellij . util . diff . Fly weight Cap able Tree Structure Ċ import Ġorg . jetbrains . kotlin . Kt Node Types Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Kind Ċ import Ġorg . jetbrains . kotlin . fir . F ir Light Source Element Ċ import Ġorg . jetbrains . kotlin . fir . F ir Source Element Ċ import Ġorg . jetbrains . kotlin . fir . analysis . check ers . context . Checker Context Ċ import Ġorg . jetbrains . kotlin . fir . analysis . diagnostics . Diagnostic Reporter Ċ import Ġorg . jetbrains . kotlin . fir . analysis . diagnostics . F ir Errors Ċ import Ġorg . jetbrains . kotlin . fir . declarations . F ir Constructor Ċ import Ġorg . jetbrains . kotlin . fir . declarations . F ir Member Declaration Ċ import Ġorg . jetbrains . kotlin . fir . declarations . F ir Regular Class Ċ import Ġorg . jetbrains . kotlin . fir . light Node Ċ import Ġorg . jetbrains . kotlin . fir . psi Ċ import Ġorg . jetbrains . kotlin . psi . Kt Super Type Call Entry Ċ Ċ object ĠF ir Sup ertype Initialized Without Primary Constructor Ġ: ĠF ir Member Declaration Checker () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcheck ( declaration : ĠF ir Member Declaration , Ġcontext : ĠCheck er Context , Ġreporter : ĠDiagnostic Reporter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( declaration Ġ! is ĠF ir Regular Class Ġ|| Ġdeclaration . class Kind Ġ== ĠClass Kind . INTERFACE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhas Sup ertype With Constructor Ġ= Ġdeclaration . source ?. any Sup ertype Has Constructor Parent heses () Ġ== Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġhas Primary Constructor Ġ= Ġdeclaration . declarations . any Ġ{ Ġit Ġis ĠF ir Constructor Ġ&& Ġit . is Primary Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( has Sup ertype With Constructor Ġ&& Ġ! has Primary Constructor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreporter . report ( declaration . source ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠF ir Source Element . any Sup ertype Has Constructor Parent heses (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocal Psi Ġ= Ġpsi ĊĠĠĠĠĠĠĠ Ġval Ġlocal Light Node Ġ= Ġlight Node ĊĊĠĠĠĠĠĠĠ Ġif Ġ( local Psi Ġ!= Ġnull Ġ&& Ġlocal Psi Ġ! is ĠPsi Error Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlocal Psi . any Sup ertype Has Constructor Parent heses () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( local Light Node Ġ!= Ġnull Ġ&& Ġthis Ġis ĠF ir Light Source Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlocal Light Node . any Sup ertype Has Constructor Parent heses ( tree ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPsi Element . any Sup ertype Has Constructor Parent heses (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchildren . isNotEmpty () Ġ&& Ġchildren [ 0 ] Ġ! is ĠPsi Error Element Ġ&& Ġchildren [ 0 ]. children . any Ġ{ Ġit Ġis ĠK t Super Type Call Entry Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠLight er AST Node . any Sup ertype Has Constructor Parent heses ( tree : ĠFly weight Cap able Tree Structure < Light er AST Node >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuper Types Ġ= Ġget Children ( tree ). find Ġ{ Ġit . token Type Ġ== ĠK t Node Types . SUPER _ TYPE _ LIST Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper Types . getChildren ( tree ). any Ġ{ Ġit . token Type Ġ== ĠK t Node Types . SUPER _ TYPE _ CALL _ ENTRY Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠLight er AST Node . getChildren ( tree : ĠFly weight Cap able Tree Structure < Light er AST Node >): ĠList < Light er AST Node > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= ĠRef < Array < Light er AST Node ? >>() ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġtree . getChildren ( this , Ġchildren ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( count Ġ> Ġ 0 ) Ġchildren . get (). filter NotNull () Ġelse Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDiagnostic Reporter . report ( source : ĠF ir Source Element ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsource ?. let Ġ{ Ġreport ( F ir Errors . SUPER TYPE _ INITIAL IZED _ WITHOUT _ PRIMARY _ CON STRUCTOR . on ( it )) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ