/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠAli ĠM og hn ie h Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . bl ure ng ine . blur . modules . stages Ċ Ċ import Ġjava . util . Collections Ċ import Ġjavax . annotation . Nonnull Ċ Ċ class ĠStage Change Data ( val Ġreason : ĠStage Change Reason ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ custom Data Ġ= ĠHashMap < Class <* >, ĠAny >() ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUn modifiable Ġcollection ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcustom Data : ĠCollection < Any > Ġ= ĠCollections . unmodifiable Collection (_ custom Data . values ) ĊĊĠĠĠ Ġoperator Ġfun Ġ< T > Ġget ( data Class : ĠClass < T >) Ġ= Ġ_ custom Data [ data Class ] Ġas ? ĠT ĊĊĠĠĠ Ġ@ Nonnull ĊĠĠĠ Ġfun Ġ< T > Ġget OrCreate ( data Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdata Ġ= Ġget ( data Class ) ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġdata Class . newInstance () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġget () Ġ= Ġget ( T :: class . java ) ĊĊĠĠĠ Ġ@ Nonnull ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġget OrCreate () Ġ= Ġget OrCreate ( T :: class . java ) ĊĊĠĠĠ Ġfun Ġput ( data : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( data . java Class Ġ! in Ġ_ custom Data ) Ġ{ Ġ"${ data . java Class } Ġis Ġalready Ġregistered ." Ġ} ĊĠĠĠĠĠĠĠ Ġ_ custom Data [ data . java Class ] Ġ= Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( data : ĠAny ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ custom Data . remove ( data . java Class ) Ġ== Ġdata ĊĠĠĠ Ġ} Ċ } Ċ