/* Ċ Ġ* Ġ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 . symbols Ċ Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġorg . jetbrains . kotlin . fir . declarations . F ir Constructor Ċ import Ġorg . jetbrains . kotlin . fir . declarations . F ir Regular Class Ċ import Ġorg . jetbrains . kotlin . fir . declarations . get Primary Constructor If Any Ċ import Ġorg . jetbrains . kotlin . fir . declarations . impl . F ir Value Parameter Impl Ċ import Ġorg . jetbrains . kotlin . fir . resolve . fir Symbol Provider Ċ import Ġorg . jetbrains . kotlin . idea . fir . find Psi Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . Validity Token Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . Validity Token Owner Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . types . Kt Type Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . fir . Kt Symbol By F ir Builder Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . fir . utils . cached Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . fir . utils . weak Ref Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . symbols .* Ċ import Ġorg . jetbrains . kotlin . idea . frontend . api . with Validity Assertion Ċ import Ġorg . jetbrains . kotlin . name . Class Id Ċ Ċ internal Ġclass ĠK t F ir Constructor Symbol ( ĊĠĠĠ Ġfir : ĠF ir Constructor , ĊĠĠĠ Ġoverride Ġval Ġtoken : ĠValid ity Token , ĊĠĠĠ Ġprivate Ġval Ġbuilder : ĠK t Symbol By F ir Builder Ċ ) Ġ: ĠK t Constructor Symbol (), ĠK t F ir Symbol < F ir Constructor > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġfir : ĠF ir Constructor Ġby Ġweak Ref ( fir ) ĊĠĠĠ Ġoverride Ġval Ġpsi : ĠPsi Element ? Ġby Ġcached Ġ{ Ġfir . find Psi ( fir . session ) Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġtype : ĠK t Type Ġby Ġcached Ġ{ Ġbuilder . build Kt Type ( fir . returnType Ref ) Ġ} ĊĠĠĠ Ġoverride Ġval Ġvalue Parameters : ĠList < Kt Constructor Parameter Symbol > Ġby Ġcached Ġ{ ĊĠĠĠĠĠĠĠ Ġfir . value Parameters . map Ġ{ Ġvalue Parameter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( value Parameter Ġis ĠF ir Value Parameter Impl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . build F ir Constructor Parameter ( value Parameter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġis Primary : ĠBoolean Ġget () Ġ= Ġwith Validity Assertion Ġ{ Ġfir . is Primary Ġ} ĊĠĠĠ Ġoverride Ġval Ġsymbol Kind : ĠK t Symbol Kind Ġget () Ġ= ĠK t Symbol Kind . MEMBER ĊĊĠĠĠ Ġoverride Ġval Ġowner Class Id : ĠClass Id ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwith Validity Assertion Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfir . symbol . callable Id . class Id Ġ?: Ġerror (" Class ID Ġshould Ġpresent Ġfor Ġconstructor ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġowner : ĠK t Class Or Object Symbol Ġby Ġcached Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsession Ġ= Ġfir . session ĊĠĠĠĠĠĠĠ Ġval Ġclass Id Ġ= Ġowner Class Id ĊĠĠĠĠĠĠĠ Ġval Ġfir Class Ġ= Ġsession . fir Symbol Provider . getClass Like Symbol By Fq Name ( class Id )?. fir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Class Ġwith Ġid Ġ$ class Id Ġid Ġwas Ġnot Ġfound ") ĊĠĠĠĠĠĠĠ Ġcheck ( fir Class Ġis ĠF ir Regular Class ) Ġ{ Ġ" Owner Ġclass Ġfor Ġconstructor Ġshould Ġbe ĠF ir Regular Class , Ġbut Ġ${ fir Class :: class } Ġwas Ġmet " Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . build Class Symbol ( fir Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Pointer (): ĠK t Symbol Pointer < Kt Constructor Symbol > Ġ= Ġwith Validity Assertion Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Primary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġfor Ġnow Ġwe Ġcan Ġnot Ġfind Ġsymbol Ġfor Ġmember Ġfunction Ġ:( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNon Rest orable Kt Symbol Pointer ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġowner Class Id Ġ= Ġowner . class Id ĊĠĠĠĠĠĠĠ Ġreturn Ġsymbol Pointer Ġ{ Ġsession Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġowner Symbol Ġ= Ġsession . symbol Provider . getClass Or Object Symbol By Class Id ( owner Class Id ) Ġ?: Ġreturn @ symbol Pointer Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( owner Symbol Ġis ĠK t F ir Symbol <* >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass F ir Ġ= Ġ( owner Symbol . fir Ġas ? ĠF ir Regular Class ) Ġ?: Ġerror (" F ir Regular Class Ġexpected Ġbut Ġ${ owner Symbol . fir :: class } Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass F ir . get Primary Constructor If Any ()?. let ( builder :: build Constructor Symbol ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }