/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 - 2 0 2 1 ĠG uth ix Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġio . g uth ix . old scape . server Ċ Ċ import Ġkotlin . reflect . K Property Ċ import Ġkotlin . reflect . jvm . java Field Ċ Ċ interface ĠProperty Holder Ġ{ ĊĠĠĠ Ġval Ġproperties : ĠMutable Map < K Property <* >, ĠAny ?> Ċ } Ċ Ċ interface ĠPersistent Property Holder Ġ{ ĊĠĠĠ Ġval Ġpersistent Properties : ĠMutable Map < String , ĠAny > Ċ } Ċ Ċ class ĠProperty < in ĠC Ġ: ĠProperty Holder , ĠT Ġ: ĠAny ? >( ĊĠĠĠ Ġval Ġinitializer : ĠC . () Ġ-> ĠT Ġ= Ġ{ Ġthrow ĠIllegalStateException (" Not Ġinitialized .") Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoperator Ġfun ĠgetValue ( this Ref : ĠC , Ġproperty : ĠK Property < *> ): ĠT Ġ= Ġthis Ref . properties . get Or Put ( property ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinitializer ( this Ref ) ĊĠĠĠ Ġ} Ġas ĠT ĊĊĠĠĠ Ġoperator Ġfun ĠsetValue ( this Ref : ĠC , Ġproperty : ĠK Property <* >, Ġvalue : ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġthis Ref . properties [ property ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġval ĠK Property <* >. persistent Name Ġget () Ġ= Ġ"${ java Field ?. decl aring Class ?. name }.${ name }" Ċ Ċ class ĠPersistent Property < in ĠC Ġ: ĠPersistent Property Holder , ĠT Ġ: ĠAny >( ĊĠĠĠ Ġval Ġinitializer : ĠC . () Ġ-> ĠT Ġ= Ġ{ Ġthrow ĠIllegalStateException (" Not Ġinitialized .") Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoperator Ġfun ĠgetValue ( this Ref : ĠC , Ġproperty : ĠK Property < *> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ref . persistent Properties . get Or Put ( property . persistent Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitializer ( this Ref ) ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun ĠsetValue ( this Ref : ĠC , Ġproperty : ĠK Property <* >, Ġvalue : ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġ"${ property . java Field ?. decl aring Class ?. name }.${ property . name }" ĊĠĠĠĠĠĠĠ Ġthis Ref . persistent Properties [ key ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} Ċ }