package Ġkotlin . properties Ċ Ċ import Ġjava . util . NoSuch ElementException Ċ import Ġkotlin . reflect . K Property Ċ Ċ /** Ċ Ġ* ĠStandard Ġproperty Ġdeleg ates . Ċ Ġ*/ Ċ public Ġobject ĠDeleg ates Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġproperty Ġdelegate Ġfor Ġa Ġread / write Ġproperty Ġwith Ġa Ġnon - ` null ` Ġvalue Ġthat Ġis Ġinitialized Ġnot Ġduring ĊĠĠĠĠ Ġ* Ġobject Ġconstruction Ġtime Ġbut Ġat Ġa Ġlater Ġtime . ĠTrying Ġto Ġread Ġthe Ġproperty Ġbefore Ġthe Ġinitial Ġvalue Ġhas Ġbeen ĊĠĠĠĠ Ġ* Ġassigned Ġresults Ġin Ġan Ġexception . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġ< T : ĠAny > Ġnot Null (): ĠRead Write Property < Any ?, ĠT > Ġ= ĠNot Null Var () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġproperty Ġdelegate Ġfor Ġa Ġread / write Ġproperty Ġthat Ġcalls Ġa Ġspecified Ġcallback Ġfunction Ġwhen Ġchanged . ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Value Ġthe Ġinitial Ġvalue Ġof Ġthe Ġproperty . ĊĠĠĠĠ Ġ* Ġ@ param ĠonChange Ġthe Ġcallback Ġwhich Ġis Ġcalled Ġafter Ġthe Ġchange Ġof Ġthe Ġproperty Ġis Ġmade . ĠThe Ġvalue Ġof Ġthe Ġproperty ĊĠĠĠĠ Ġ* Ġ Ġhas Ġalready Ġbeen Ġchanged Ġwhen Ġthis Ġcallback Ġis Ġinvoked . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġinline Ġfun Ġ< T > Ġobservable ( initial Value : ĠT , Ġcross inline ĠonChange : Ġ( property : ĠK Property <* >, ĠoldValue : ĠT , ĠnewValue : ĠT ) Ġ-> ĠUnit ): ĊĠĠĠĠĠĠĠ ĠRead Write Property < Any ?, ĠT > Ġ= Ġobject Ġ: ĠObservable Property < T >( initial Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Change ( property : ĠK Property <* >, ĠoldValue : ĠT , ĠnewValue : ĠT ) Ġ= ĠonChange ( property , ĠoldValue , ĠnewValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġproperty Ġdelegate Ġfor Ġa Ġread / write Ġproperty Ġthat Ġcalls Ġa Ġspecified Ġcallback Ġfunction Ġwhen Ġchanged , ĊĠĠĠĠ Ġ* Ġallowing Ġthe Ġcallback Ġto Ġv eto Ġthe Ġmodification . ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Value Ġthe Ġinitial Ġvalue Ġof Ġthe Ġproperty . ĊĠĠĠĠ Ġ* Ġ@ param ĠonChange Ġthe Ġcallback Ġwhich Ġis Ġcalled Ġbefore Ġa Ġchange Ġto Ġthe Ġproperty Ġvalue Ġis Ġattempted . ĊĠĠĠĠ Ġ* Ġ ĠThe Ġvalue Ġof Ġthe Ġproperty Ġhasn 't Ġbeen Ġchanged Ġyet , Ġwhen Ġthis Ġcallback Ġis Ġinvoked . ĊĠĠĠĠ Ġ* Ġ ĠIf Ġthe Ġcallback Ġreturns Ġ` true ` Ġthe Ġvalue Ġof Ġthe Ġproperty Ġis Ġbeing Ġset Ġto Ġthe Ġnew Ġvalue , ĊĠĠĠĠ Ġ* Ġ Ġand Ġif Ġthe Ġcallback Ġreturns Ġ` false ` Ġthe Ġnew Ġvalue Ġis Ġdiscarded Ġand Ġthe Ġproperty Ġremains Ġits Ġold Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġinline Ġfun Ġ< T > Ġv eto able ( initial Value : ĠT , Ġcross inline ĠonChange : Ġ( property : ĠK Property <* >, ĠoldValue : ĠT , ĠnewValue : ĠT ) Ġ-> ĠBoolean ): ĊĠĠĠĠĠĠĠ ĠRead Write Property < Any ?, ĠT > Ġ= Ġobject Ġ: ĠObservable Property < T >( initial Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Change ( property : ĠK Property <* >, ĠoldValue : ĠT , ĠnewValue : ĠT ): ĠBoolean Ġ= ĠonChange ( property , ĠoldValue , ĠnewValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġproperty Ġdelegate Ġfor Ġa Ġread / write Ġproperty Ġthat Ġstores Ġits Ġvalue Ġin Ġa Ġmap , Ġusing Ġthe Ġproperty Ġname ĊĠĠĠĠ Ġ* Ġas Ġa Ġkey . ĊĠĠĠĠ Ġ* Ġ@ param Ġmap Ġthe Ġmap Ġwhere Ġthe Ġproperty Ġvalues Ġare Ġstored . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" Delegate Ġproperty Ġto Ġthe Ġmap Ġitself Ġwithout Ġcreating Ġa Ġwrapper .", ĠReplace With (" map ", Ġ" kotlin . properties . get ", Ġ" kotlin . properties . set ")) ĊĠĠĠ Ġpublic Ġfun Ġ< T > Ġmap Var ( map : ĠMutable Map < in ĠString , ĠAny ?> ): ĠRead Write Property < Any ?, ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFixed Map Var < Any ?, ĠString , ĠT >( map , ĠpropertyName Selector , Ġthrow Key NotFound ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġproperty Ġdelegate Ġfor Ġa Ġread / write Ġproperty Ġthat Ġstores Ġits Ġvalue Ġin Ġa Ġmap , Ġusing Ġthe Ġproperty Ġname ĊĠĠĠĠ Ġ* Ġas Ġa Ġkey . ĊĠĠĠĠ Ġ* Ġ@ param Ġmap Ġthe Ġmap Ġwhere Ġthe Ġproperty Ġvalues Ġare Ġstored . ĊĠĠĠĠ Ġ* Ġ@ param Ġdefault Ġthe Ġfunction Ġreturning Ġthe Ġvalue Ġof Ġthe Ġproperty Ġfor Ġa Ġgiven Ġobject Ġif Ġit 's Ġmissing Ġfrom Ġthe Ġgiven Ġmap . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġ< T > Ġmap Var ( map : ĠMutable Map < in ĠString , ĠAny ? >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault : Ġ( this Ref : ĠAny ?, Ġdesc : ĠString ) Ġ-> ĠT ): ĠRead Write Property < Any ?, ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFixed Map Var < Any ?, ĠString , ĠT >( map , ĠpropertyName Selector , Ġdefault ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġproperty Ġdelegate Ġfor Ġa Ġread - only Ġproperty Ġthat Ġtakes Ġits Ġvalue Ġfrom Ġa Ġmap , Ġusing Ġthe Ġproperty Ġname ĊĠĠĠĠ Ġ* Ġas Ġa Ġkey . ĊĠĠĠĠ Ġ* Ġ@ param Ġmap Ġthe Ġmap Ġwhere Ġthe Ġproperty Ġvalues Ġare Ġstored . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" Delegate Ġproperty Ġto Ġthe Ġmap Ġitself Ġwithout Ġcreating Ġa Ġwrapper .", ĠReplace With (" map ", Ġ" kotlin . properties . get ")) ĊĠĠĠ Ġpublic Ġfun Ġ< T > Ġmap Val ( map : ĠMap < in ĠString , ĠAny ?> ): ĠReadOnly Property < Any ?, ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFixed Map Val < Any ?, ĠString , ĠT >( map , ĠpropertyName Selector , Ġthrow Key NotFound ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġproperty Ġdelegate Ġfor Ġa Ġread - only Ġproperty Ġthat Ġtakes Ġits Ġvalue Ġfrom Ġa Ġmap , Ġusing Ġthe Ġproperty Ġname ĊĠĠĠĠ Ġ* Ġas Ġa Ġkey . ĊĠĠĠĠ Ġ* Ġ@ param Ġmap Ġthe Ġmap Ġwhere Ġthe Ġproperty Ġvalues Ġare Ġstored . ĊĠĠĠĠ Ġ* Ġ@ param Ġdefault Ġthe Ġfunction Ġreturning Ġthe Ġvalue Ġof Ġthe Ġproperty Ġfor Ġa Ġgiven Ġobject Ġif Ġit 's Ġmissing Ġfrom Ġthe Ġgiven Ġmap . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġ< T > Ġmap Val ( map : ĠMap < in ĠString , ĠAny ? >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault : Ġ( this Ref : ĠAny ?, Ġdesc : ĠString ) Ġ-> ĠT ): ĠReadOnly Property < Any ?, ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFixed Map Val < Any ?, ĠString , ĠT >( map , ĠpropertyName Selector , Ġdefault ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ private Ġclass ĠNot Null Var < T : ĠAny >() Ġ: ĠRead Write Property < Any ?, ĠT > Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġvalue : ĠT ? Ġ= Ġnull ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠgetValue ( this Ref : ĠAny ?, Ġproperty : ĠK Property < *> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue Ġ?: Ġthrow ĠIllegalStateException (" Property Ġ${ property . name } Ġshould Ġbe Ġinitialized Ġbefore Ġget .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠsetValue ( this Ref : ĠAny ?, Ġproperty : ĠK Property <* >, Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġvalue ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠImplements Ġthe Ġcore Ġlogic Ġof Ġa Ġproperty Ġdelegate Ġfor Ġa Ġread / write Ġproperty Ġthat Ġcalls Ġcallback Ġfunctions Ġwhen Ġchanged . Ċ Ġ* Ġ@ param Ġinitial Value Ġthe Ġinitial Ġvalue Ġof Ġthe Ġproperty . Ċ Ġ*/ Ċ public Ġabstract Ġclass ĠObservable Property < T >( initial Value : ĠT ) Ġ: ĠRead Write Property < Any ?, ĠT > Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġvalue Ġ= Ġinitial Value ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠThe Ġcallback Ġwhich Ġis Ġcalled Ġbefore Ġa Ġchange Ġto Ġthe Ġproperty Ġvalue Ġis Ġattempted . ĊĠĠĠĠ Ġ* Ġ ĠThe Ġvalue Ġof Ġthe Ġproperty Ġhasn 't Ġbeen Ġchanged Ġyet , Ġwhen Ġthis Ġcallback Ġis Ġinvoked . ĊĠĠĠĠ Ġ* Ġ ĠIf Ġthe Ġcallback Ġreturns Ġ` true ` Ġthe Ġvalue Ġof Ġthe Ġproperty Ġis Ġbeing Ġset Ġto Ġthe Ġnew Ġvalue , ĊĠĠĠĠ Ġ* Ġ Ġand Ġif Ġthe Ġcallback Ġreturns Ġ` false ` Ġthe Ġnew Ġvalue Ġis Ġdiscarded Ġand Ġthe Ġproperty Ġremains Ġits Ġold Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġbefore Change ( property : ĠK Property <* >, ĠoldValue : ĠT , ĠnewValue : ĠT ): ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġcallback Ġwhich Ġis Ġcalled Ġafter Ġthe Ġchange Ġof Ġthe Ġproperty Ġis Ġmade . ĠThe Ġvalue Ġof Ġthe Ġproperty ĊĠĠĠĠ Ġ* Ġhas Ġalready Ġbeen Ġchanged Ġwhen Ġthis Ġcallback Ġis Ġinvoked . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġafter Change Ġ( property : ĠK Property <* >, ĠoldValue : ĠT , ĠnewValue : ĠT ): ĠUnit Ġ{} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠgetValue ( this Ref : ĠAny ?, Ġproperty : ĠK Property < *> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠsetValue ( this Ref : ĠAny ?, Ġproperty : ĠK Property <* >, Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠoldValue Ġ= Ġthis . value ĊĠĠĠĠĠĠĠ Ġif Ġ(! before Change ( property , ĠoldValue , Ġvalue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġafter Change ( property , ĠoldValue , Ġvalue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠImplements Ġthe Ġcore Ġlogic Ġfor Ġa Ġproperty Ġdelegate Ġthat Ġstores Ġproperty Ġvalues Ġin Ġa Ġmap . Ċ Ġ* Ġ@ param ĠT Ġthe Ġtype Ġof Ġthe Ġobject Ġthat Ġowns Ġthe Ġdeleg ated Ġproperty . Ċ Ġ* Ġ@ param ĠK Ġthe Ġtype Ġof Ġkey Ġin Ġthe Ġmap . Ċ Ġ* Ġ@ param ĠV Ġthe Ġtype Ġof Ġthe Ġproperty Ġvalue . Ċ Ġ*/ Ċ public Ġabstract Ġclass ĠMap Val < T , ĠK , Ġout ĠV >() Ġ: ĠReadOnly Property < T , ĠV > Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġmap Ġused Ġto Ġstore Ġthe Ġvalues Ġof Ġthe Ġproperties Ġof Ġthe Ġgiven Ġobject Ġinstance . ĊĠĠĠĠ Ġ* Ġ@ param Ġref Ġthe Ġobject Ġinstance Ġfor Ġwhich Ġthe Ġmap Ġis Ġrequested . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġmap ( ref : ĠT ): ĠMap < in ĠK , ĠAny ?> ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġmap Ġkey Ġused Ġto Ġstore Ġthe Ġvalues Ġof Ġthe Ġgiven Ġproperty . ĊĠĠĠĠ Ġ* Ġ@ param Ġproperty Ġthe Ġproperty Ġfor Ġwhich Ġthe Ġkey Ġis Ġrequested . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġkey ( property : ĠK Property < *> ): ĠK ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġproperty Ġvalue Ġto Ġbe Ġused Ġwhen Ġthe Ġmap Ġdoes Ġnot Ġcontain Ġthe Ġcorresponding Ġkey . ĊĠĠĠĠ Ġ* Ġ@ param Ġref Ġthe Ġobject Ġinstance Ġfor Ġwhich Ġthe Ġvalue Ġwas Ġrequested . ĊĠĠĠĠ Ġ* Ġ@ param Ġproperty Ġthe Ġproperty Ġfor Ġwhich Ġthe Ġvalue Ġwas Ġrequested . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġdefault ( ref : ĠT , Ġproperty : ĠK Property < *> ): ĠV Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠNoSuch ElementException (" The Ġvalue Ġfor Ġproperty Ġ${ property . name } Ġis Ġmissing Ġin Ġ$ ref .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠgetValue ( this Ref : ĠT , Ġproperty : ĠK Property <* >) Ġ: ĠV Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap ( this Ref ) ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġkey ( property ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmap . getOrElse ( key , Ġ{ Ġdefault ( this Ref , Ġproperty ) Ġ}) Ġas ĠV ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠImplements Ġthe Ġcore Ġlogic Ġfor Ġa Ġread / write Ġproperty Ġdelegate Ġthat Ġstores Ġproperty Ġvalues Ġin Ġa Ġmap . Ċ Ġ* Ġ@ param ĠT Ġthe Ġtype Ġof Ġthe Ġobject Ġthat Ġowns Ġthe Ġdeleg ated Ġproperty . Ċ Ġ* Ġ@ param ĠK Ġthe Ġtype Ġof Ġkey Ġin Ġthe Ġmap . Ċ Ġ* Ġ@ param ĠV Ġthe Ġtype Ġof Ġthe Ġproperty Ġvalue . Ċ Ġ*/ Ċ public Ġabstract Ġclass ĠMap Var < T , ĠK , ĠV >() Ġ: ĠMap Val < T , ĠK , ĠV >(), ĠRead Write Property < T , ĠV > Ġ{ ĊĠĠĠ Ġprotected Ġabstract Ġoverride Ġfun Ġmap ( ref : ĠT ): ĠMutable Map < in ĠK , ĠAny ?> ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠsetValue ( this Ref : ĠT , Ġproperty : ĠK Property <* >, Ġvalue : ĠV ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap ( this Ref ) ĊĠĠĠĠĠĠĠ Ġmap . put ( key ( property ), Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠT , Ġproperty : ĠK Property < *> ): ĠV Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper < Map Val >. getValue ( this Ref , Ġproperty ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠpropertyName Selector : Ġ( K Property <* >) Ġ-> ĠString Ġ= Ġ{ it . name } Ċ private Ġval Ġthrow Key NotFound : Ġ( Any ?, ĠAny ?) Ġ-> ĠNothing Ġ= Ġ{ this Ref , Ġkey Ġ-> Ġthrow ĠNoSuch ElementException (" The Ġvalue Ġfor Ġkey Ġ$ key Ġis Ġmissing Ġfrom Ġ$ this Ref .") Ġ} Ċ Ċ /** Ċ Ġ* ĠImplements Ġa Ġread - only Ġproperty Ġdelegate Ġthat Ġstores Ġthe Ġproperty Ġvalues Ġin Ġa Ġgiven Ġmap Ġinstance Ġand Ġuses Ġthe Ġgiven Ċ Ġ* Ġcallback Ġfunctions Ġfor Ġcalculating Ġthe Ġkey Ġand Ġthe Ġdefault Ġvalue Ġfor Ġeach Ġproperty . Ċ Ġ* Ġ@ param Ġmap Ġthe Ġmap Ġused Ġto Ġstore Ġthe Ġvalues . Ċ Ġ* Ġ@ param Ġkey Ġthe Ġfunction Ġto Ġcalculate Ġthe Ġmap Ġkey Ġfrom Ġa Ġproperty Ġmetadata Ġobject . Ċ Ġ* Ġ@ param Ġdefault Ġthe Ġfunction Ġreturning Ġthe Ġvalue Ġof Ġthe Ġproperty Ġfor Ġa Ġgiven Ġobject Ġif Ġit 's Ġmissing Ġfrom Ġthe Ġgiven Ġmap . Ċ Ġ*/ Ċ public Ġopen Ġclass ĠFixed Map Val < T , ĠK , Ġout ĠV >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmap : ĠMap < in ĠK , ĠAny ? >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġkey : Ġ( K Property <* >) Ġ-> ĠK , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdefault : Ġ( ref : ĠT , Ġkey : ĠK ) Ġ-> ĠV Ġ= Ġthrow Key NotFound Ċ ) Ġ: ĠMap Val < T , ĠK , ĠV >() Ġ{ ĊĠĠĠ Ġprotected Ġoverride Ġfun Ġmap ( ref : ĠT ): ĠMap < in ĠK , ĠAny ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġoverride Ġfun Ġkey ( property : ĠK Property < *> ): ĠK Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( key )( property ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġoverride Ġfun Ġdefault ( ref : ĠT , Ġproperty : ĠK Property < *> ): ĠV Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( default )( ref , Ġkey ( property )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠImplements Ġa Ġread / write Ġproperty Ġdelegate Ġthat Ġstores Ġthe Ġproperty Ġvalues Ġin Ġa Ġgiven Ġmap Ġinstance Ġand Ġuses Ġthe Ġgiven Ċ Ġ* Ġcallback Ġfunctions Ġfor Ġcalculating Ġthe Ġkey Ġand Ġthe Ġdefault Ġvalue Ġfor Ġeach Ġproperty . Ċ Ġ* Ġ@ param Ġmap Ġthe Ġmap Ġused Ġto Ġstore Ġthe Ġvalues . Ċ Ġ* Ġ@ param Ġkey Ġthe Ġfunction Ġto Ġcalculate Ġthe Ġmap Ġkey Ġfrom Ġa Ġproperty Ġmetadata Ġobject . Ċ Ġ* Ġ@ param Ġdefault Ġthe Ġfunction Ġreturning Ġthe Ġvalue Ġof Ġthe Ġproperty Ġfor Ġa Ġgiven Ġobject Ġif Ġit 's Ġmissing Ġfrom Ġthe Ġgiven Ġmap . Ċ Ġ*/ Ċ public Ġopen Ġclass ĠFixed Map Var < T , ĠK , ĠV >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmap : ĠMutable Map < in ĠK , ĠAny ? >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġkey : Ġ( K Property <* >) Ġ-> ĠK , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdefault : Ġ( ref : ĠT , Ġkey : ĠK ) Ġ-> ĠV Ġ= Ġthrow Key NotFound Ċ ) Ġ: ĠMap Var < T , ĠK , ĠV >() Ġ{ ĊĠĠĠ Ġprotected Ġoverride Ġfun Ġmap ( ref : ĠT ): ĠMutable Map < in ĠK , ĠAny ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġoverride Ġfun Ġkey ( property : ĠK Property < *> ): ĠK Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( key )( property ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġoverride Ġfun Ġdefault ( ref : ĠT , Ġproperty : ĠK Property < *> ): ĠV Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( default )( ref , Ġkey ( property )) ĊĠĠĠ Ġ} Ċ } Ċ