/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . Ġ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 Ċ Ċ import Ġorg . jetbrains . kotlin . contracts . description . Event Occ urrences Range Ċ import Ġorg . jetbrains . kotlin . descriptors . Effective Visibility Ċ import Ġorg . jetbrains . kotlin . descriptors . Modal ity Ċ import Ġorg . jetbrains . kotlin . descriptors . Visibility Ċ import Ġorg . jetbrains . kotlin . fir . declarations .* Ċ import Ġorg . jetbrains . kotlin . fir . declarations . builder . build Anonymous Function Ċ import Ġorg . jetbrains . kotlin . fir . declarations . builder . build Type Parameter Ċ import Ġorg . jetbrains . kotlin . fir . declarations . impl . F ir Declaration Status Impl Ċ import Ġorg . jetbrains . kotlin . fir . diagnostics . Con e Diagnostic Ċ import Ġorg . jetbrains . kotlin . fir . expressions .* Ċ import Ġorg . jetbrains . kotlin . fir . expressions . builder .* Ċ import Ġorg . jetbrains . kotlin . fir . references . F ir Control Flow Graph Reference Ċ import Ġorg . jetbrains . kotlin . fir . references . F ir Named Reference Ċ import Ġorg . jetbrains . kotlin . fir . references . F ir Reference Ċ import Ġorg . jetbrains . kotlin . fir . scopes . impl . F ir Integer Operator Call Ċ import Ġorg . jetbrains . kotlin . fir . scopes . impl . F ir Integer Operator Call Builder Ċ import Ġorg . jetbrains . kotlin . fir . types .* Ċ import Ġorg . jetbrains . kotlin . fir . types . builder . build ErrorType Ref Ċ import Ġorg . jetbrains . kotlin . fir . types . builder . build Resolved Type Ref Ċ Ċ fun ĠF ir Function Call . copy ( ĊĠĠĠ Ġannotations : ĠList < F ir Annotation Call > Ġ= Ġthis . annotations , ĊĠĠĠ Ġargument List : ĠF ir ArgumentList Ġ= Ġthis . argument List , ĊĠĠĠ Ġcal lee Reference : ĠF ir Named Reference Ġ= Ġthis . callee Reference , ĊĠĠĠ Ġexplicit Receiver : ĠF ir Expression ? Ġ= Ġthis . explicit Receiver , ĊĠĠĠ Ġdispatch Receiver : ĠF ir Expression Ġ= Ġthis . dispatch Receiver , ĊĠĠĠ Ġextension Receiver : ĠF ir Expression Ġ= Ġthis . extension Receiver , ĊĠĠĠ Ġsource : ĠF ir Source Element ? Ġ= Ġthis . source , ĊĠĠĠ Ġtype Arguments : ĠList < F ir Type Projection > Ġ= Ġthis . type Arguments , ĊĠĠĠ Ġresult Type : ĠF ir Type Ref Ġ= Ġthis . type Ref Ċ ): ĠF ir Function Call Ġ{ ĊĠĠĠ Ġval Ġbuilder Ġ= Ġif Ġ( this Ġis ĠF ir Integer Operator Call ) Ġ{ ĊĠĠĠĠĠĠĠ ĠF ir Integer Operator Call Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . callee Reference Ġ= Ġcal lee Reference ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠF ir Function Call Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . callee Reference Ġ= Ġcal lee Reference ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġbuilder . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . source Ġ= Ġsource ĊĠĠĠĠĠĠĠ Ġthis . annotations . addAll ( annotations ) ĊĠĠĠĠĠĠĠ Ġthis . argument List Ġ= Ġargument List ĊĠĠĠĠĠĠĠ Ġthis . explicit Receiver Ġ= Ġexplicit Receiver ĊĠĠĠĠĠĠĠ Ġthis . dispatch Receiver Ġ= Ġdispatch Receiver ĊĠĠĠĠĠĠĠ Ġthis . extension Receiver Ġ= Ġextension Receiver ĊĠĠĠĠĠĠĠ Ġthis . type Arguments . addAll ( type Arguments ) ĊĠĠĠĠĠĠĠ Ġthis . type Ref Ġ= Ġresult Type ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ( builder Ġas ĠF ir Call Builder ). build () Ġas ĠF ir Function Call Ċ } Ċ Ċ fun ĠF ir Anonymous Function . copy ( ĊĠĠĠ Ġreceiver Type Ref : ĠF ir Type Ref ? Ġ= Ġthis . receiver Type Ref , ĊĠĠĠ Ġsource : ĠF ir Source Element ? Ġ= Ġthis . source , ĊĠĠĠ Ġsession : ĠF ir Session Ġ= Ġthis . declaration Site Session , ĊĠĠĠ Ġorigin : ĠF ir Declaration Origin Ġ= Ġthis . origin , ĊĠĠĠ ĠreturnType Ref : ĠF ir Type Ref Ġ= Ġthis . returnType Ref , ĊĠĠĠ Ġvalue Parameters : ĠList < F ir Value Parameter > Ġ= Ġthis . value Parameters , ĊĠĠĠ Ġbody : ĠF ir Block ? Ġ= Ġthis . body , ĊĠĠĠ Ġannotations : ĠList < F ir Annotation Call > Ġ= Ġthis . annotations , ĊĠĠĠ Ġtype Ref : ĠF ir Type Ref Ġ= Ġthis . type Ref , ĊĠĠĠ Ġlabel : ĠF ir Label ? Ġ= Ġthis . label , ĊĠĠĠ Ġcontrol Flow Graph Reference : ĠF ir Control Flow Graph Reference ? Ġ= Ġthis . control Flow Graph Reference , ĊĠĠĠ Ġinvocation Kind : ĠEvent Occ urrences Range ? Ġ= Ġthis . invocation Kind Ċ ): ĠF ir Anonymous Function Ġ{ ĊĠĠĠ Ġreturn Ġbuild Anonymous Function Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . source Ġ= Ġsource ĊĠĠĠĠĠĠĠ Ġdeclaration Site Session Ġ= Ġsession ĊĠĠĠĠĠĠĠ Ġthis . origin Ġ= Ġorigin ĊĠĠĠĠĠĠĠ Ġthis . returnType Ref Ġ= ĠreturnType Ref ĊĠĠĠĠĠĠĠ Ġthis . receiver Type Ref Ġ= Ġreceiver Type Ref ĊĠĠĠĠĠĠĠ Ġsymbol Ġ= Ġthis @ copy . symbol ĊĠĠĠĠĠĠĠ Ġis Lambda Ġ= Ġthis @ copy . is Lambda ĊĠĠĠĠĠĠĠ Ġthis . value Parameters . addAll ( value Parameters ) ĊĠĠĠĠĠĠĠ Ġthis . body Ġ= Ġbody ĊĠĠĠĠĠĠĠ Ġthis . annotations . addAll ( annotations ) ĊĠĠĠĠĠĠĠ Ġthis . type Ref Ġ= Ġtype Ref ĊĠĠĠĠĠĠĠ Ġthis . label Ġ= Ġlabel ĊĠĠĠĠĠĠĠ Ġthis . control Flow Graph Reference Ġ= Ġcontrol Flow Graph Reference ĊĠĠĠĠĠĠĠ Ġthis . invocation Kind Ġ= Ġinvocation Kind ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun ĠF ir Type Ref . resolved Type From Prototype ( ĊĠĠĠ Ġtype : ĠC one Kotlin Type Ċ ): ĠF ir Resolved Type Ref Ġ{ ĊĠĠĠ Ġreturn Ġbuild Resolved Type Ref Ġ{ ĊĠĠĠĠĠĠĠ Ġsource Ġ= Ġthis @ resolved Type From Prototype . source ĊĠĠĠĠĠĠĠ Ġthis . type Ġ= Ġtype ĊĠĠĠĠĠĠĠ Ġannotations Ġ+= Ġthis @ resolved Type From Prototype . annotations ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠF ir Type Ref . error Type From Prototype ( ĊĠĠĠ Ġdiagnostic : ĠC one Diagnostic Ċ ): ĠF ir ErrorType Ref Ġ{ ĊĠĠĠ Ġreturn Ġbuild ErrorType Ref Ġ{ ĊĠĠĠĠĠĠĠ Ġsource Ġ= Ġthis @ error Type From Prototype . source ĊĠĠĠĠĠĠĠ Ġthis . diagnostic Ġ= Ġdiagnostic ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠF ir Type Parameter . copy ( ĊĠĠĠ Ġbounds : ĠList < F ir Type Ref > Ġ= Ġthis . bounds , ĊĠĠĠ Ġannotations : ĠList < F ir Annotation Call > Ġ= Ġthis . annotations Ċ ): ĠF ir Type Parameter Ġ{ ĊĠĠĠ Ġreturn Ġbuild Type Parameter Ġ{ ĊĠĠĠĠĠĠĠ Ġsource Ġ= Ġthis @ copy . source ĊĠĠĠĠĠĠĠ Ġdeclaration Site Session Ġ= Ġthis @ copy . declaration Site Session ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġthis @ copy . name ĊĠĠĠĠĠĠĠ Ġsymbol Ġ= Ġthis @ copy . symbol ĊĠĠĠĠĠĠĠ Ġvariance Ġ= Ġthis @ copy . variance ĊĠĠĠĠĠĠĠ Ġis Re ified Ġ= Ġthis @ copy . is Re ified ĊĠĠĠĠĠĠĠ Ġthis . bounds Ġ+= Ġbounds ĊĠĠĠĠĠĠĠ Ġthis . annotations Ġ+= Ġannotations ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠF ir When Expression . copy ( ĊĠĠĠ Ġresult Type : ĠF ir Type Ref Ġ= Ġthis . type Ref , ĊĠĠĠ Ġcal lee Reference : ĠF ir Reference Ġ= Ġthis . callee Reference , ĊĠĠĠ Ġannotations : ĠList < F ir Annotation Call > Ġ= Ġthis . annotations Ċ ): ĠF ir When Expression Ġ= Ġbuild When Expression Ġ{ ĊĠĠĠ Ġsource Ġ= Ġthis @ copy . source ĊĠĠĠ Ġsubject Ġ= Ġthis @ copy . subject ĊĠĠĠ Ġsubject Variable Ġ= Ġthis @ copy . subject Variable ĊĠĠĠ Ġthis . callee Reference Ġ= Ġcal lee Reference ĊĠĠĠ Ġbranches Ġ+= Ġthis @ copy . branches ĊĠĠĠ Ġtype Ref Ġ= Ġresult Type ĊĠĠĠ Ġthis . annotations Ġ+= Ġannotations ĊĠĠĠ Ġused As Expression Ġ= Ġthis @ copy . used As Expression ĊĠĠĠ Ġex haust iveness Status Ġ= Ġthis @ copy . ex haust iveness Status Ċ } Ċ Ċ fun ĠF ir Try Expression . copy ( ĊĠĠĠ Ġresult Type : ĠF ir Type Ref Ġ= Ġthis . type Ref , ĊĠĠĠ Ġcal lee Reference : ĠF ir Reference Ġ= Ġthis . callee Reference , ĊĠĠĠ Ġannotations : ĠList < F ir Annotation Call > Ġ= Ġthis . annotations Ċ ): ĠF ir Try Expression Ġ= Ġbuild Try Expression Ġ{ ĊĠĠĠ Ġsource Ġ= Ġthis @ copy . source ĊĠĠĠ Ġtry Block Ġ= Ġthis @ copy . try Block ĊĠĠĠ Ġfinally Block Ġ= Ġthis @ copy . finally Block ĊĠĠĠ Ġthis . callee Reference Ġ= Ġcal lee Reference ĊĠĠĠ Ġcat ches Ġ+= Ġthis @ copy . cat ches ĊĠĠĠ Ġtype Ref Ġ= Ġresult Type ĊĠĠĠ Ġthis . annotations Ġ+= Ġannotations Ċ } Ċ Ċ fun ĠF ir Check NotNull Call . copy ( ĊĠĠĠ Ġresult Type : ĠF ir Type Ref Ġ= Ġthis . type Ref , ĊĠĠĠ Ġcal lee Reference : ĠF ir Reference Ġ= Ġthis . callee Reference , ĊĠĠĠ Ġannotations : ĠList < F ir Annotation Call > Ġ= Ġthis . annotations Ċ ): ĠF ir Check NotNull Call Ġ= Ġbuild Check NotNull Call Ġ{ ĊĠĠĠ Ġsource Ġ= Ġthis @ copy . source ĊĠĠĠ Ġthis . callee Reference Ġ= Ġcal lee Reference ĊĠĠĠ Ġargument List Ġ= Ġthis @ copy . argument List ĊĠĠĠ Ġthis . type Ref Ġ= Ġresult Type ĊĠĠĠ Ġthis . annotations Ġ+= Ġannotations Ċ } Ċ Ċ fun ĠF ir Declaration Status . copy ( ĊĠĠĠ Ġis Expect : ĠBoolean Ġ= Ġthis . is Expect , ĊĠĠĠ Ġnew Modal ity : ĠMod ality ? Ġ= Ġnull , ĊĠĠĠ Ġnew Visibility : ĠVisibility ? Ġ= Ġnull , ĊĠĠĠ Ġnew Effective Visibility : ĠEffect ive Visibility ? Ġ= Ġnull Ċ ): ĠF ir Declaration Status Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( this . is Expect Ġ== Ġis Expect Ġ&& Ġnew Modal ity Ġ== Ġnull Ġ&& Ġnew Visibility Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠF ir Declaration Status Impl ) Ġ{ Ġ" Unexpected Ġclass Ġ${ this :: class }" Ġ} ĊĠĠĠĠĠĠĠ Ġthis . resolved ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Visibility Ġ?: Ġvisibility , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Modal ity Ġ?: Ġmod ality !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Effective Visibility Ġ?: ĠEffect ive Visibility . Public ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . is Expect Ġ= Ġis Expect ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ