/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 1 8 Ġ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 . declarations . impl Ċ Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Kind Ċ import Ġorg . jetbrains . kotlin . descriptors . Modal ity Ċ import Ġorg . jetbrains . kotlin . descriptors . Visibility Ċ import Ġorg . jetbrains . kotlin . fir . F ir Session Ċ import Ġorg . jetbrains . kotlin . fir . declarations . F ir Declaration Ċ import Ġorg . jetbrains . kotlin . fir . declarations . F ir Regular Class Ċ import Ġorg . jetbrains . kotlin . fir . symbols . impl . F ir Class Symbol Ċ import Ġorg . jetbrains . kotlin . fir . transform In place Ċ import Ġorg . jetbrains . kotlin . fir . types . F ir Type Ref Ċ import Ġorg . jetbrains . kotlin . fir . visitor s . F ir Transformer Ċ import Ġorg . jetbrains . kotlin . name . Name Ċ import Ġorg . jetbrains . kotlin . utils . addTo Std lib . first Is Instance OrNull Ċ Ċ open Ġclass ĠF ir Class Impl ( ĊĠĠĠ Ġsession : ĠF ir Session , ĊĠĠĠ Ġpsi : ĠPsi Element ?, ĊĠĠĠ Ġfinal Ġoverride Ġval Ġsymbol : ĠF ir Class Symbol , ĊĠĠĠ Ġname : ĠName , ĊĠĠĠ Ġvisibility : ĠVisibility , ĊĠĠĠ Ġmod ality : ĠMod ality ?, ĊĠĠĠ Ġis Expect : ĠBoolean , ĊĠĠĠ Ġis Actual : ĠBoolean , ĊĠĠĠ Ġfinal Ġoverride Ġval Ġclass Kind : ĠClass Kind , ĊĠĠĠ Ġis Inner : ĠBoolean , ĊĠĠĠ Ġis Companion : ĠBoolean , ĊĠĠĠ Ġis Data : ĠBoolean , ĊĠĠĠ Ġis Inline : ĠBoolean Ċ ) Ġ: ĠF ir Abstract Member Declaration ( session , Ġpsi , Ġname , Ġvisibility , Ġmod ality , Ġis Expect , Ġis Actual ), ĠF ir Regular Class , ĠF ir Mod ifiable Class Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsymbol . bind ( this ) ĊĠĠĠĠĠĠĠ Ġstatus . is Inner Ġ= Ġis Inner ĊĠĠĠĠĠĠĠ Ġstatus . is Companion Ġ= Ġis Companion ĊĠĠĠĠĠĠĠ Ġstatus . is Data Ġ= Ġis Data ĊĠĠĠĠĠĠĠ Ġstatus . is Inline Ġ= Ġis Inline ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġsuper Type Refs Ġ= Ġmutable ListOf < F ir Type Ref >() ĊĊĠĠĠ Ġoverride Ġval Ġdeclarations Ġ= Ġmutable ListOf < F ir Declaration >() ĊĊĠĠĠ Ġoverride Ġvar Ġcompanion Object : ĠF ir Regular Class ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġadd Declaration ( declaration : ĠF ir Declaration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdeclarations Ġ+= Ġdeclaration ĊĠĠĠĠĠĠĠ Ġif Ġ( comp anion Object Ġ== Ġnull Ġ&& Ġdeclaration Ġis ĠF ir Regular Class Ġ&& Ġdeclaration . is Companion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Object Ġ= Ġdeclaration ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Declarations ( declarations : ĠCollection < F ir Declaration >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdeclarations . forEach ( this :: add Declaration ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreplace Sup ert ypes ( new Sup ert ypes : ĠList < F ir Type Ref >): ĠF ir Regular Class Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper Type Refs . clear () ĊĠĠĠĠĠĠĠ Ġsuper Type Refs . addAll ( new Sup ert ypes ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< D > Ġtransform Children ( transformer : ĠF ir Transformer < D >, Ġdata : ĠD ): ĠF ir Regular Class Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper Type Refs . transform In place ( transformer , Ġdata ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsuper < F ir Abstract Member Declaration >. transform Children ( transformer , Ġdata ) Ġas ĠF ir Regular Class ĊĊĠĠĠĠĠĠĠ Ġdeclarations . first Is Instance OrNull < F ir Constructor Impl >() ?. type Parameters ?. transform In place ( transformer , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ// ĠTransform Ġdeclarations Ġin Ġlast Ġturn ĊĠĠĠĠĠĠĠ Ġdeclarations . transform In place ( transformer , Ġdata ) ĊĠĠĠĠĠĠĠ Ġcompanion Object Ġ= Ġdeclarations . as Sequence (). filter Is Instance < F ir Regular Class >(). first OrNull Ġ{ Ġit . is Companion Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ