/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 Ġ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 . resolve . transformers Ċ Ċ import Ġorg . jetbrains . kotlin . descriptors . Modal ity Ċ import Ġorg . jetbrains . kotlin . descriptors . Vis ibilities Ċ import Ġorg . jetbrains . kotlin . fir .* Ċ import Ġorg . jetbrains . kotlin . fir . declarations . F ir Resolve Phase Ċ import Ġorg . jetbrains . kotlin . fir . declarations . add Default Bound If Ne cessary Ċ import Ġorg . jetbrains . kotlin . fir . declarations . impl . F ir Declaration Status Impl Ċ import Ġorg . jetbrains . kotlin . fir . declarations . impl . F ir Simple Function Impl Ċ import Ġorg . jetbrains . kotlin . fir . declarations . impl . F ir Type Parameter Impl Ċ import Ġorg . jetbrains . kotlin . fir . declarations . impl . F ir Value Parameter Impl Ċ import Ġorg . jetbrains . kotlin . fir . expressions .* Ċ import Ġorg . jetbrains . kotlin . fir . expressions . impl . F ir Function Call Impl Ċ import Ġorg . jetbrains . kotlin . fir . references . F ir Reference Ċ import Ġorg . jetbrains . kotlin . fir . references . impl . F ir Stub Reference Ċ import Ġorg . jetbrains . kotlin . fir . resolve . Body Resolve Components Ċ import Ġorg . jetbrains . kotlin . fir . resolve . calls .* Ċ import Ġorg . jetbrains . kotlin . fir . resolve . inference . F ir Call Comp leter Ċ import Ġorg . jetbrains . kotlin . fir . resolve . transformers . body . resolve . F ir Abstract Body Resolve Transformer Ċ import Ġorg . jetbrains . kotlin . fir . resolve . with Null ability Ċ import Ġorg . jetbrains . kotlin . fir . symbols . Callable Id Ċ import Ġorg . jetbrains . kotlin . fir . symbols . Synt hetic Callable Id Ċ import Ġorg . jetbrains . kotlin . fir . symbols . impl . F ir Named Function Symbol Ċ import Ġorg . jetbrains . kotlin . fir . symbols . impl . F ir Type Parameter Symbol Ċ import Ġorg . jetbrains . kotlin . fir . symbols . impl . F ir Variable Symbol Ċ import Ġorg . jetbrains . kotlin . fir . types .* Ċ import Ġorg . jetbrains . kotlin . fir . types . impl . Con e Type ParameterType Impl Ċ import Ġorg . jetbrains . kotlin . fir . types . impl . F ir Resolved Type Ref Impl Ċ import Ġorg . jetbrains . kotlin . fir . types . impl . F ir Type Projection With Variance Impl Ċ import Ġorg . jetbrains . kotlin . fir . visitor s . Composite Transform Result Ċ import Ġorg . jetbrains . kotlin . fir . visitor s . F ir Transformer Ċ import Ġorg . jetbrains . kotlin . fir . visitor s . compose Ċ import Ġorg . jetbrains . kotlin . name . Name Ċ import Ġorg . jetbrains . kotlin . resolve . calls . tasks . Explicit Receiver Kind Ċ import Ġorg . jetbrains . kotlin . types . Variance Ċ Ċ class ĠF ir Synt hetic Call Generator ( ĊĠĠĠ Ġprivate Ġval Ġcomponents : ĠF ir Abstract Body Resolve Transformer . Body Resolve Transformer Components , ĊĠĠĠ Ġprivate Ġval Ġcall Comp leter : ĠF ir Call Comp leter Ċ ) Ġ: ĠBody Resolve Components Ġby Ġcomponents Ġ{ ĊĠĠĠ Ġprivate Ġval Ġwhen Select Function : ĠF ir Simple Function Impl Ġ= Ġgenerate Synt hetic Select Function ( Synt hetic Callable Id . WHEN ) ĊĠĠĠ Ġprivate Ġval Ġtry Select Function : ĠF ir Simple Function Impl Ġ= Ġgenerate Synt hetic Select Function ( Synt hetic Callable Id . TRY ) ĊĠĠĠ Ġprivate Ġval Ġid Function : ĠF ir Simple Function Impl Ġ= Ġgenerate Synt hetic Select Function ( Synt hetic Callable Id . ID ) ĊĠĠĠ Ġprivate Ġval ĠcheckNotNull Function : ĠF ir Simple Function Impl Ġ= Ġgenerate Synt hetic Check NotNull Function () ĊĊĠĠĠ Ġfun Ġgenerate Cal lee For When Expression ( when Expression : ĠF ir When Expression ): ĠF ir When Expression ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstub Reference Ġ= Ġwhen Expression . callee Reference ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠInvest igate : Ġassertion Ġfailed Ġin ĠMod ular ized Test ĊĠĠĠĠĠĠĠ Ġ// Ġassert ( stub Reference Ġis ĠF ir Stub Reference ) ĊĠĠĠĠĠĠĠ Ġif Ġ( stub Reference Ġ! is ĠF ir Stub Reference ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġwhen Expression . branches . map Ġ{ Ġit . result Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġreference Ġ= Ġgenerate Cal lee Reference With Candidate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Select Function , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSynt hetic Callable Id . WHEN . callable Name ĊĠĠĠĠĠĠĠ Ġ) Ġ?: Ġreturn Ġnull Ġ// ĠTODO ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Expression . transform Cal lee Reference ( Update Reference , Ġreference ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Cal lee For Try Expression ( try Expression : ĠF ir Try Expression ): ĠF ir Try Expression ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstub Reference Ġ= Ġtry Expression . callee Reference ĊĠĠĠĠĠĠĠ Ġassert ( stub Reference Ġis ĠF ir Stub Reference ) ĊĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġmutable ListOf < F ir Expression >() ĊĊĠĠĠĠĠĠĠ Ġwith ( try Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ+= Ġtry Block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcat ches . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ+= Ġit . block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġreference Ġ= Ġgenerate Cal lee Reference With Candidate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Select Function , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSynt hetic Callable Id . TRY . callable Name ĊĠĠĠĠĠĠĠ Ġ) Ġ?: Ġreturn Ġnull Ġ// ĠTODO ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Expression . transform Cal lee Reference ( Update Reference , Ġreference ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Cal lee For Check NotNull Call ( checkNotNull Call : ĠF ir Check NotNull Call ): ĠF ir Check NotNull Call ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstub Reference Ġ= ĠcheckNotNull Call . callee Reference ĊĠĠĠĠĠĠĠ Ġif Ġ( stub Reference Ġ! is ĠF ir Stub Reference ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġreference Ġ= Ġgenerate Cal lee Reference With Candidate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcheckNotNull Function , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcheckNotNull Call . arguments , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSynt hetic Callable Id . CHECK _ NOT _ NULL . callable Name ĊĠĠĠĠĠĠĠ Ġ) Ġ?: Ġreturn Ġnull Ġ// ĠTODO ĊĊĠĠĠĠĠĠĠ Ġreturn ĠcheckNotNull Call . transform Cal lee Reference ( Update Reference , Ġreference ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve Callable Reference With Synt hetic Outer Call ( ĊĠĠĠĠĠĠĠ Ġcallable Reference Access : ĠF ir Callable Reference Access , ĊĠĠĠĠĠĠĠ Ġexpected Type Ref : ĠF ir Type Ref ? ĊĠĠĠ Ġ): ĠF ir Callable Reference Access ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= ĠlistOf ( callable Reference Access ) ĊĊĠĠĠĠĠĠĠ Ġval Ġreference Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Cal lee Reference With Candidate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Function , Ġarguments , ĠSynt hetic Callable Id . ID . callable Name , ĠCall Kind . Synt hetic Id For Callable References Resolution ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġfake Call Element Ġ= ĠF ir Function Call Impl ( null ). copy ( callee Reference Ġ= Ġreference , Ġarguments Ġ= Ġarguments ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcall Comp leter . complete Call ( fake Call Element , Ġexpected Type Ref ). arguments [ 0 ] Ġas ĠF ir Callable Reference Access ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Cal lee Reference With Candidate ( ĊĠĠĠĠĠĠĠ Ġfunction : ĠF ir Simple Function Impl , ĊĠĠĠĠĠĠĠ Ġarguments : ĠList < F ir Expression >, ĊĠĠĠĠĠĠĠ Ġname : ĠName , ĊĠĠĠĠĠĠĠ Ġcall Kind : ĠCall Kind Ġ= ĠCall Kind . Synt hetic Select ĊĠĠĠ Ġ): ĠF ir Named Reference With Candidate ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcall Info Ġ= Ġgenerate Call Info ( name , Ġarguments , Ġcall Kind ) ĊĠĠĠĠĠĠĠ Ġval Ġcandidate Ġ= Ġgenerate Candidate ( call Info , Ġfunction ) ĊĠĠĠĠĠĠĠ Ġval Ġapplic ability Ġ= Ġresolution Stage Runner . process Candidate ( candidate ) ĊĠĠĠĠĠĠĠ Ġif Ġ( applic ability Ġ<= ĠC andidate Applic ability . IN AP PL IC ABLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠF ir Named Reference With Candidate ( null , Ġname , Ġcandidate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Candidate ( call Info : ĠCall Info , Ġfunction : ĠF ir Simple Function Impl ): ĠC andidate Ġ= ĊĠĠĠĠĠĠĠ ĠC andidate Factory ( components , Ġcall Info ). create Candidate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsymbol Ġ= Ġfunction . symbol , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexplicit Receiver Kind Ġ= ĠExplicit Receiver Kind . NO _ EX PL IC IT _ RECE IVER ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Call Info ( name : ĠName , Ġarguments : ĠList < F ir Expression >, Ġcall Kind : ĠCall Kind ) Ġ= ĠCall Info ( ĊĠĠĠĠĠĠĠ Ġcall Kind Ġ= Ġcall Kind , ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠ Ġexplicit Receiver Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġarguments Ġ= Ġarguments , ĊĠĠĠĠĠĠĠ Ġis Safe Call Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġtype Arguments Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġsession Ġ= Ġsession , ĊĠĠĠĠĠĠĠ Ġcontaining File Ġ= Ġfile , ĊĠĠĠĠĠĠĠ Ġimplicit Receiver Stack Ġ= Ġimplicit Receiver Stack ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Synt hetic Select Function ( callable Id : ĠCallable Id ): ĠF ir Simple Function Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSynt hetic Ġfunction Ġsignature : ĊĠĠĠĠĠĠĠ Ġ// ĠĠ Ġfun Ġ< K > Ġselect ( var arg Ġvalues : ĠK ): ĠK ĊĠĠĠĠĠĠĠ Ġval Ġfunction Symbol Ġ= ĠF ir Synt hetic Function Symbol ( callable Id ) ĊĠĠĠĠĠĠĠ Ġval Ġtype Parameter Symbol Ġ= ĠF ir Type Parameter Symbol () ĊĠĠĠĠĠĠĠ Ġval Ġtype Parameter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ir Type Parameter Impl ( null , Ġsession , ĠName . identifier (" K "), Ġtype Parameter Symbol , ĠVari ance . IN VARIANT , Ġfalse ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Default Bound If Ne cessary () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠreturnType Ġ= ĠF ir Resolved Type Ref Impl ( null , ĠC one Type ParameterType Impl ( type Parameter Symbol . to Lookup Tag (), Ġfalse )) ĊĊĠĠĠĠĠĠĠ Ġval Ġargument Type Ġ= ĠF ir Resolved Type Ref Impl ( null , ĠreturnType . cone Type Unsafe < Con e Kotlin Type >(). create ArrayOf ( session )) ĊĠĠĠĠĠĠĠ Ġval Ġtype Argument Ġ= ĠF ir Type Projection With Variance Impl ( null , ĠreturnType , ĠVari ance . IN VARIANT ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate Member Function ( session , Ġfunction Symbol , Ġcallable Id . callable Name , Ġtype Argument . type Ref ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Parameters Ġ+= Ġtype Parameter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Parameters Ġ+= Ġargument Type . to Value Parameter ( session , Ġ" branches ", Ġis Var arg Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Synt hetic Check NotNull Function (): ĠF ir Simple Function Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSynt hetic Ġfunction Ġsignature : ĊĠĠĠĠĠĠĠ Ġ// ĠĠ Ġfun Ġ< K > ĠcheckNotNull ( arg : ĠK ?): ĠK ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote : ĠThe Ġupper Ġbound Ġof Ġ` K ` Ġcannot Ġbe Ġ` Any ` Ġbecause Ġof Ġthe Ġfollowing Ġcase : ĊĠĠĠĠĠĠĠ Ġ// ĠĠ Ġfun Ġ< X > Ġtest ( a : ĠX ) Ġ= Ġa !! ĊĠĠĠĠĠĠĠ Ġ// Ġ` X ` Ġis Ġnot Ġa Ġsubtype Ġof Ġ` Any ` Ġand Ġhence Ġcannot Ġsatisfy Ġ` K ` Ġif Ġit Ġhad Ġan Ġupper Ġbound Ġof Ġ` Any `. ĊĠĠĠĠĠĠĠ Ġval Ġfunction Symbol Ġ= ĠF ir Synt hetic Function Symbol ( Synt hetic Callable Id . CHECK _ NOT _ NULL ) ĊĠĠĠĠĠĠĠ Ġval Ġtype Parameter Symbol Ġ= ĠF ir Type Parameter Symbol () ĊĠĠĠĠĠĠĠ Ġval Ġtype Parameter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ir Type Parameter Impl ( null , Ġsession , ĠName . identifier (" K "), Ġtype Parameter Symbol , ĠVari ance . IN VARIANT , Ġfalse ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Default Bound If Ne cessary () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠreturnType Ġ= ĠF ir Resolved Type Ref Impl ( null , ĠC one Type ParameterType Impl ( type Parameter Symbol . to Lookup Tag (), Ġfalse )) ĊĊĠĠĠĠĠĠĠ Ġval Ġargument Type Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ir Resolved Type Ref Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĠreturnType . cone Type Unsafe < Con e Kotlin Type >(). with Null ability ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC one Null ability . NULL ABLE , Ġsession . inference Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġtype Argument Ġ= ĠF ir Type Projection With Variance Impl ( null , ĠreturnType , ĠVari ance . IN VARIANT ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate Member Function ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Symbol , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSynt hetic Callable Id . CHECK _ NOT _ NULL . callable Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Argument . type Ref ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Parameters Ġ+= Ġtype Parameter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Parameters Ġ+= Ġargument Type . to Value Parameter ( session , Ġ" arg ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Member Function ( session : ĠF ir Session , Ġsymbol : ĠF ir Named Function Symbol , Ġname : ĠName , ĠreturnType : ĠF ir Type Ref ): ĠF ir Simple Function Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠF ir Declaration Status Impl ( Vis ibilities . PUBLIC , ĠMod ality . FINAL ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Expect Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Actual Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Override Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Operator Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn fix Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Inline Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Tail Rec Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis External Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Suspend Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠF ir Simple Function Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Ġ= Ġsession , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsymbol Ġ= Ġsymbol , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġstatus , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Type Ref Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠreturnType Ref Ġ= ĠreturnType ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . resolve Phase Ġ= ĠF ir Resolve Phase . BODY _ RESOL VE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠF ir Resolved Type Ref . to Value Parameter ( session : ĠF ir Session , Ġname : ĠString , Ġis Var arg : ĠBoolean Ġ= Ġfalse ): ĠF ir Value Parameter Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠName . identifier ( name ) ĊĠĠĠĠĠĠĠ Ġreturn ĠF ir Value Parameter Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Ġ= Ġsession , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠreturnType Ref Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Cross inline Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis N oin line Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Var arg Ġ= Ġis Var arg , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsymbol Ġ= ĠF ir Variable Symbol ( name ) ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . resolve Phase Ġ= ĠF ir Resolve Phase . BODY _ RESOL VE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġobject ĠUpdate Reference Ġ: ĠF ir Transformer < F ir Named Reference With Candidate >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< E Ġ: ĠF ir Element > Ġtransform Element ( element : ĠE , Ġdata : ĠF ir Named Reference With Candidate ): ĠComposite Transform Result < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġelement . compose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtransform Reference ( reference : ĠF ir Reference , Ġdata : ĠF ir Named Reference With Candidate ): ĠComposite Transform Result < F ir Reference > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . compose () ĊĠĠĠ Ġ} Ċ }