/* Ċ Ġ* Ġ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 . descriptors . common izer . builder Ċ Ċ import Ġorg . jetbrains . kotlin . descriptors . Callable Member Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Declaration Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Property Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Source Element Ċ import Ġorg . jetbrains . kotlin . descriptors . common izer . Common ized Group Ċ import Ġorg . jetbrains . kotlin . descriptors . common izer . merge dt ree . ir . C ir Property Ċ import Ġorg . jetbrains . kotlin . descriptors . common izer . merge dt ree . ir . C ir Property Node Ċ import Ġorg . jetbrains . kotlin . descriptors . common izer . merge dt ree . ir . indexOf Common Ċ import Ġorg . jetbrains . kotlin . descriptors . impl . FieldDescriptor Impl Ċ import Ġorg . jetbrains . kotlin . descriptors . impl . Property Descriptor Impl Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor Factory Ċ import Ġorg . jetbrains . kotlin . resolve . constants . Annotation Value Ċ Ċ internal Ġfun ĠC ir Property Node . build Descriptors ( ĊĠĠĠ Ġcomponents : ĠGlobal Declarations Builder Components , ĊĠĠĠ Ġoutput : ĠCommon ized Group < Property Descriptor >, ĊĠĠĠ Ġcontaining Declarations : ĠList < Declaration Descriptor ?> Ċ ) Ġ{ ĊĠĠĠ Ġval Ġcommon Property Ġ= Ġcommon () ĊĠĠĠ Ġval Ġmark As Expect And Actual Ġ= Ġcommon Property Ġ!= Ġnull Ġ&& Ġcommon Property . kind Ġ!= ĠCallable Member Descriptor . Kind . SYN TH ES IZED ĊĊĠĠĠ Ġtarget . forEach Indexed Ġ{ Ġindex , Ġproperty Ġ-> ĊĠĠĠĠĠĠĠ Ġproperty ?. build Descriptor ( components , Ġoutput , Ġindex , Ġcontaining Declarations , Ġis Actual Ġ= Ġmark As Expect And Actual ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcommon Property ?. build Descriptor ( components , Ġoutput , ĠindexOf Common , Ġcontaining Declarations , Ġis Expect Ġ= Ġmark As Expect And Actual ) Ċ } Ċ Ċ private Ġfun ĠC ir Property . build Descriptor ( ĊĠĠĠ Ġcomponents : ĠGlobal Declarations Builder Components , ĊĠĠĠ Ġoutput : ĠCommon ized Group < Property Descriptor >, ĊĠĠĠ Ġindex : ĠInt , ĊĠĠĠ Ġcontaining Declarations : ĠList < Declaration Descriptor ? >, ĊĠĠĠ Ġis Expect : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġis Actual : ĠBoolean Ġ= Ġfalse Ċ ) Ġ{ ĊĠĠĠ Ġval Ġtarget Components Ġ= Ġcomponents . target Components [ index ] ĊĠĠĠ Ġval Ġcontaining Declaration Ġ= Ġcontaining Declarations [ index ] Ġ?: Ġerror (" No Ġcontaining Ġdeclaration Ġfor Ġproperty Ġ$ this ") ĊĊĠĠĠ Ġval Ġproperty Descriptor Ġ= ĠProperty Descriptor Impl . create ( ĊĠĠĠĠĠĠĠ Ġcontaining Declaration , ĊĠĠĠĠĠĠĠ Ġannotations . build Descriptors ( target Components ), ĊĠĠĠĠĠĠĠ Ġmod ality , ĊĠĠĠĠĠĠĠ Ġvisibility , ĊĠĠĠĠĠĠĠ Ġis Var , ĊĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠ Ġkind , ĊĠĠĠĠĠĠĠ ĠSource Element . NO _ SOURCE , ĊĠĠĠĠĠĠĠ Ġis Late Init , ĊĠĠĠĠĠĠĠ Ġis Const , ĊĠĠĠĠĠĠĠ Ġis Expect , ĊĠĠĠĠĠĠĠ Ġis Actual , ĊĠĠĠĠĠĠĠ Ġis External , ĊĠĠĠĠĠĠĠ Ġis Delegate ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġ( type Parameters , Ġtype Parameter Resolver ) Ġ= Ġtype Parameters . build Descriptors And Type Parameter Resolver ( ĊĠĠĠĠĠĠĠ Ġtarget Components , ĊĠĠĠĠĠĠĠ Ġcontaining Declaration . getType Parameter Resolver (), ĊĠĠĠĠĠĠĠ Ġproperty Descriptor ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġproperty Descriptor . setType ( ĊĠĠĠĠĠĠĠ ĠreturnType . build Type ( target Components , Ġtype Parameter Resolver ), ĊĠĠĠĠĠĠĠ Ġtype Parameters , ĊĠĠĠĠĠĠĠ Ġbuild Dispatch Receiver ( property Descriptor ), ĊĠĠĠĠĠĠĠ Ġextension Receiver ?. build Extension Receiver ( target Components , Ġtype Parameter Resolver , Ġproperty Descriptor ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġgetter Descriptor Ġ= Ġgetter ?. let Ġ{ Ġgetter Ġ-> ĊĠĠĠĠĠĠĠ ĠDescriptor Factory . create Getter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgetter . annotations , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgetter . is Default , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgetter . is External , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgetter . is Inline ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize ( null ) Ġ// Ġuse Ġreturn Ġtype Ġfrom Ġthe Ġproperty Ġdescriptor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsetter Descriptor Ġ= Ġsetter ?. let Ġ{ Ġsetter Ġ-> ĊĠĠĠĠĠĠĠ ĠDescriptor Factory . create Setter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetter . annotations , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetter . parameter Annotations , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetter . is Default , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetter . is External , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetter . is Inline , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetter . visibility , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSource Element . NO _ SOURCE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġbacking Field Ġ= Ġbacking Field Annotations ?. let Ġ{ ĠField Descriptor Impl ( it , Ġproperty Descriptor ) Ġ} ĊĠĠĠ Ġval Ġdelegate Field Ġ= Ġdelegate Field Annotations ?. let Ġ{ ĠField Descriptor Impl ( it , Ġproperty Descriptor ) Ġ} ĊĊĠĠĠ Ġproperty Descriptor . initialize ( ĊĠĠĠĠĠĠĠ Ġgetter Descriptor , ĊĠĠĠĠĠĠĠ Ġsetter Descriptor , ĊĠĠĠĠĠĠĠ Ġbacking Field , ĊĠĠĠĠĠĠĠ Ġdelegate Field ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcompile Time Initializer ?. let Ġ{ Ġconstant Value Ġ-> ĊĠĠĠĠĠĠĠ Ġcheck ( constant Value Ġ! is ĠAnnotation Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġtype Ġof Ġcompile Ġtime Ġconstant : Ġ${ constant Value :: class . java }, Ġ$ constant Value " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproperty Descriptor . set Compile Time Initializer ( target Components . storage Manager . create Nullable Lazy Value Ġ{ Ġconstant Value Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoutput [ index ] Ġ= Ġproperty Descriptor Ċ } Ċ