package Ġnet . cord a . serialization . internal . amqp Ċ Ċ import Ġnet . cord a . serialization . internal . model .* Ċ import Ġjava . io . Not Serializable Exception Ċ Ċ interface ĠObject Builder Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġmake Provider ( type Information : ĠLocal Type Information . Composable ): Ġ() Ġ-> ĠObject Builder Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Provider ( type Information . type Identifier , Ġtype Information . constructor , Ġtype Information . properties ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġmake Provider ( type Identifier : ĠType Identifier , Ġconstructor : ĠLocal Constructor Information , Ġproperties : ĠMap < String , ĠLocal Property Information >): Ġ() Ġ-> ĠObject Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnon Calculated Properties Ġ= Ġproperties . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġ( name , Ġproperty ) Ġ-> Ġproperty . is Calculated Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġ( name , Ġ_) Ġ-> Ġname Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ(_, Ġproperty ) Ġ-> Ġproperty Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Indices Ġ= Ġnon Calculated Properties . map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLocal Property Information . Constructor Pa ired Property Ġ-> Ġit . constructor Slot . parameter Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLocal Property Information . Private Constructor Pa ired Property Ġ-> Ġit . constructor Slot . parameter Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to IntArray () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( property Indices . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( property Indices . size Ġ!= Ġnon Calculated Properties . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNot Serializable Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Some Ġbut Ġnot Ġall Ġproperties Ġof Ġ${ type Identifier . pretty Print ( false )} Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" are Ġconstructor - based ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ{ ĠConstructor Based Object Builder ( constructor , Ġproperty Indices ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgetter Setter Ġ= Ġnon Calculated Properties . filter Is Instance < Local Property Information . Getter Setter Property >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ{ ĠSetter Based Object Builder ( constructor , Ġgetter Setter ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinitialize () ĊĠĠĠ Ġfun Ġpopulate ( slot : ĠInt , Ġvalue : ĠAny ?) ĊĠĠĠ Ġfun Ġbuild (): ĠAny Ċ } Ċ Ċ class ĠSetter Based Object Builder ( ĊĠĠĠĠĠĠĠ Ġval Ġconstructor : ĠLocal Constructor Information , ĊĠĠĠĠĠĠĠ Ġval Ġproperties : ĠList < Local Property Information . Getter Setter Property >): ĠObject Builder Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtarget : ĠAny ĊĊĠĠĠ Ġoverride Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġtarget Ġ= Ġconstructor . observed Method . call () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpopulate ( slot : ĠInt , Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġproperties [ slot ]. observed Setter . invoke ( target , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild (): ĠAny Ġ= Ġtarget Ċ } Ċ Ċ class ĠConstructor Based Object Builder ( ĊĠĠĠĠĠĠĠ Ġval Ġconstructor : ĠLocal Constructor Information , ĊĠĠĠĠĠĠĠ Ġval Ġparameter Indices : ĠInt Array ): ĠObject Builder Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġparams Ġ= ĠarrayOf Null s < Any >( parameter Indices . size ) ĊĊĠĠĠ Ġoverride Ġfun Ġinitialize () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġpopulate ( slot : ĠInt , Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( slot Ġ>= Ġparameter Indices . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġparameter Index Ġ= Ġparameter Indices [ slot ] ĊĠĠĠĠĠĠĠ Ġif Ġ( parameter Index Ġ>= Ġparams . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġparams [ parameter Index ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild (): ĠAny Ġ= Ġconstructor . observed Method . call (* params ) Ċ } Ċ Ċ class ĠE volution Object Builder ( private Ġval Ġlocal Builder : ĠObject Builder , Ġval Ġslot Assignments : ĠInt Array ): ĠObject Builder Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġmake Provider ( type Identifier : ĠType Identifier , Ġconstructor : ĠLocal Constructor Information , Ġlocal Properties : ĠMap < String , ĠLocal Property Information >, Ġprovided Properties : ĠList < String >): Ġ() Ġ-> ĠObject Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Builder Provider Ġ= ĠObject Builder . make Provider ( type Identifier , Ġconstructor , Ġlocal Properties ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Property Indices Ġ= Ġlocal Properties . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ(_, Ġproperty ) Ġ-> Ġ! property . is Calculated Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Indexed Ġ{ Ġslot , Ġ( name , Ġ_) Ġ-> Ġname Ġto Ġslot Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrer out ed Indices Ġ= Ġprovided Properties . map Ġ{ ĠpropertyName Ġ-> Ġlocal Property Indices [ propertyName ] Ġ?: Ġ- 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to IntArray () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ{ ĠE volution Object Builder ( local Builder Provider (), Ġrer out ed Indices ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġlocal Builder . initialize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpopulate ( slot : ĠInt , Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġslot Assignment Ġ= Ġslot Assignments [ slot ] ĊĠĠĠĠĠĠĠ Ġif Ġ( slot Assignment Ġ!= Ġ- 1 ) Ġlocal Builder . populate ( slot Assignment , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild (): ĠAny Ġ= Ġlocal Builder . build () Ċ }