package Ġcom . new m cs . fil ive Ċ Ċ import Ġcom . google . gson .* Ċ import Ġcom . new m cs . fil ive . atomic . misc . Atomic Except Field Ċ import Ġcom . new m cs . fil ive . concurrent . Periodic Object Ċ import Ġcom . new m cs . fil ive . handler . I Object Handler Ċ import Ġcom . new m cs . fil ive . serialize . Default Serializer Ċ import Ġcom . new m cs . fil ive . serialize . Serialize Adapter Ċ import Ġjava . lang . reflect . Field Ċ import Ġjava . lang . reflect . Modifier Ċ import Ġjava . lang . reflect . Parameterized Type Ċ import Ġjava . lang . reflect . Type Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . full . primary Constructor Ċ Ċ /** Ċ Ġ* ĠI Object Ġis Ġan Ġautomatic Ġserial izable Ġclass Ġthat Ġcan Ġdetect Ġthe Ġvalues Ġthat Ġneed Ġserialization Ċ Ġ* Ġfor Ġdefined Ġfields Ġand Ġclass Ġtypes , Ġand Ġbuild Ġthe Ġadapter . ĠThis Ġsaves Ġdevelopment Ġtime Ġby Ċ Ġ* Ġelimin ating Ġthe Ġdeveloper Ġwriting Ġan Ġadapter Ġand Ġregistering Ġit . Ġit Ġis Ġnot Ġan Ġabstract Ġclass , Ċ Ġ* Ġbut Ġit Ġis Ġnot Ġintended Ġto Ġbe Ġused Ġby Ġitself ; Ġit Ġinherits Ġfrom Ġchild Ġclasses Ġand Ġrecogn izes Ċ Ġ* Ġthe Ġvalues Ġof Ġchild Ġfields . Ċ Ġ* Ċ Ġ* Ġ@ param ĠEntity ĠThe Ġclass Ġtype Ġof Ġchild Ġclass Ġonly , Ġwhich Ġis Ġinherited Ċ Ġ* Ġ@ since Ġ 2 . 0 . 0 Ċ Ġ* Ġ@ author Ġr us kon ert Ċ Ġ*/ Ċ @ Suppress (" Member Visibility Can Be Private ", Ġ" UN CHECK ED _ CAST ") Ċ open Ġclass ĠI Object < Entity Ġ: ĠI Object < Entity >> Ġ: ĠPeriod ic Object < I Object Handler < *> >( UN REFER ENC ED _ UNIQUE _ ID ) Ċ { ĊĠĠĠ Ġ// ĠThe Ġvalue Ġof Ġclass Ġof Ġreferenced Ġtype Ġat Ġthe Ġchild . ĊĠĠĠ Ġ@ Atomic Except Field ĊĠĠĠ Ġprivate Ġvar Ġreference Ġ: ĠType Ġ= Ġ( java Class . generic Super class Ġas ĠParameter ized Type ). actual Type Arguments [ 0 ] ĊĊĠĠĠ Ġfun Ġget Reference () Ġ: ĠClass < Entity > ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . reference Ġas ĠClass < Entity > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġto Ġthe Ġentity Ġcollection , Ġwhich Ġsame s Ġthe Ġtype Ġof Ġthis Ġentity . ĊĠĠĠĠ Ġ* ĠThis Ġwill Ġbe Ġhave Ġthe Ġunique Ġid , ĠIt Ġc ans Ġdistinguish ing Ġthe Ġobject Ġcompare Ġwith Ġothers . ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġtask Ġof Ġhook ed Ġcollection Ġis Ġenabled , Ġthe Ġcollection Ġcan Ġdetect Ġit Ġthat Ġabout ĊĠĠĠĠ Ġ* Ġchanged Ġthis Ġentity . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontain able ĠDetermines Ġthe Ġcollection Ġof Ġthis Ġentity 's Ġbase Ġcan Ġbe Ġbuilt Ġto Ġthe Ġdatabase Ġform ĊĠĠĠĠ Ġ* Ġ@ return ĠReturn Ġthis Ġentity Ġthat Ġwas Ġcompleted Ġsetting Ġthe Ġreference Ġto Ġthe Ġcollection ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġcreate ( contain able Ġ: ĠBoolean Ġ= Ġtrue ) Ġ: ĠEntity ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġthis ĊĠĠĠĠĠĠĠ ĠI Object Collector . set Reference ( obj , Ġcontain able ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġas ĠEntity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġthe Ġentity Ġwithout Ġhook ing Ġto Ġthe Ġcollection . ĠIt Ġis Ġrecommended Ġwhen ĊĠĠĠĠ Ġ* Ġit Ġjust Ġuses Ġfor Ġsingleton - based . Ġit Ġhas Ġno Ġunique Ġid Ġ& Ġneeds Ġto Ġadd Ġthe ĊĠĠĠĠ Ġ* Ġidentifier Ġfield Ġname Ġthat Ġcan Ġbe Ġspecified . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġcreate In dependent ( is Un referenced : ĠBoolean Ġ= Ġtrue ) Ġ: ĠEntity ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! is Un referenced ) ĠI Object Collector . set Reference ( obj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcl z Ġ: ĠClass < out ĠI Object <* >> ? Ġ= Ġobj :: class . java . super class Ġas ĠClass < out ĠI Object <* >> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile ( cl z Ġ!= Ġnull ) Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( f Ġin Ġcl z . declared Fields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( f . name Ġ== Ġ" uid " Ġ&& Ġf . decl aring Class Ġ== ĠI Object :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI Object Util . change Annotation Value ( f . getDeclared Annotation ( Atomic Except Field :: class . java ), Ġ" Is Expected ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf . set ( obj , ĠUUID . randomUUID (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcl z Ġ= Ġcl z :: class . java . super class Ġas ? ĠClass < out ĠI Object <* >> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( cl z Ġ== ĠAny :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . set Enable ( Standard . STD _ HANDLER ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġas ĠEntity ĊĠĠĠ Ġ} ĊĠĠĠĠĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Atomic Except Field ĊĠĠĠ Ġprivate Ġvar Ġcollection Ġ: ĠI Object Collector < Entity >? Ġ= Ġnull ĊĠĠĠ Ġfun Ġget I Object Collector () Ġ: ĠI Object Collector < Entity >? Ġ= Ġthis . collection ĊĠĠĠ Ġfun Ġdisconnect Collection () Ġ{ Ġthis . collection Ġ= Ġnull Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġentity Ġfrom Ġentity Ġcollection Ġthrough Ġthe Ġspecific Ġvalue . ĊĠĠĠĠ Ġ* ĠTo Ġget Ġthe Ġvalue , Ġin ĠCollection , ĠIt Ġneeds Ġto Ġregister Ġthe Ġfield Ġname Ġin ĊĠĠĠĠ Ġ* Ġidentifier Ġso Ġyou Ġcan Ġfind Ġthe ĠEntity . ĊĠĠĠĠ Ġ* Ġ@ param Ġreference Object ĠAny Ġvalues Ġthat Ġcan Ġbe Ġreferred Ġto Ġas Ġcl ues Ġor Ġinformation ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Ġget Ġthe ĠEntity ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġthe Ġapplicable Ġentity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġget Entity ( reference Object : ĠAny ?) Ġ: ĠEntity ? ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġref Ġ= Ġthis . collection Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġref . getEntity ( reference Object ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġstring Ġthat Ġwas Ġserialized Ġof Ġthis Ġentity . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstringify ( is Pretty Ġ: ĠBoolean Ġ= Ġfalse ) Ġ: ĠString ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġthis . get Serialize Elements () ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġthis . configure Serialize Builder () ĊĠĠĠĠĠĠĠ Ġif ( is Pretty ) Ġbuilder . set Pretty Print ing () ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . create (). toJson ( element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġelement Ġof Ġjson Ġobject Ġthat Ġwas Ġserialized Ġof Ġthis Ġentity . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Serialize Elements () Ġ: ĠJson Element ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠ Ġfor ( field Ġin Ġthis . get Serializable Entity Fields ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . addProperty Of Field ( jsonObject , Ġfield , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠjsonObject ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġadd Property Of Field ( jsonObject Ġ: ĠJsonObject , Ġfield Ġ: ĠField , Ġtarget Ġ: ĠAny ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ: ĠString Ġ= Ġfield . name ĊĠĠĠĠĠĠĠ Ġval Ġvalue : ĠAny ? Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . get ( target ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch (_ Ġ: ĠIllegalArgumentException ){ Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġcatch (_ Ġ: ĠIllegal AccessException ) Ġ Ġ{ Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġif ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠjsonObject . add ( fieldName , ĠJson Null . INSTANCE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠI Object Util . setProperty ( jsonObject , ĠfieldName , Ġvalue , Ġthis . configure Serialize Builder (), Ġthis . ignore Transient ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġget Serializable Entity Fields ( specific Ġ: ĠList < String >? Ġ= Ġnull ) Ġ: ĠIterable < Field > ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield List Ġ= Ġthis . get Val uable Fields ( this . ignore Transient ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( specific Ġ== Ġnull ) Ġfield List ĊĠĠĠĠĠĠĠ Ġelse Ġfield List . filter Ġ{ Ġfield : ĠField Ġ-> Ġspecific . contains ( field . name ) Ġ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Val uable Fields ( ignore Transient : ĠBoolean ) Ġ: ĠIterable < Field > ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġf List Ġ= ĠArrayList < Field >() ĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= Ġthis . get Declare Valid Fields (). to Mutable List () ĊĊĠĠĠĠĠĠĠ Ġval Ġuid Field Ġ= ĠI Object Collector . find I Object Field ( this :: class . java , Ġ" uid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRuntimeException (" Not Ġfound Ġ' uid ' Ġfield ! ĠDoes n 't Ġsomething Ġwrong ?") ĊĠĠĠĠĠĠĠ Ġval Ġatomic Except Field Ġ= Ġ( uid Field . annotations [ 0 ] Ġas ? ĠAtomic Except Field ) Ġ?: Ġthrow ĠRuntimeException (" Oh Ġno , Ġsomething Ġwas Ġchanged Ġby Ġone ") ĊĠĠĠĠĠĠĠ Ġif ( atomic Except Field . Is Expected ) Ġfields . add ( uid Field ) ĊĠĠĠĠĠĠĠ Ġfor ( f Ġin Ġfields ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( ignore Transient ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġfield Ġthat Ġwas Ġannotated Ġit Ġis Ġno Ġneed Ġto Ġserialize Ġbecause Ġthey Ġjust Ġuse Ġfor Ġinternal . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġnamed Ġ' Companion ' Ġis Ġdefault Ġobject Ġclass Ġof ĠKotlin , Ġwhich Ġcollected Ġthe Ġstatic Ġfields Ġ& Ġmethods . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTherefore Ġno Ġneed Ġto Ġserialize Ġthis Ġfield . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(!( f . type . name . endsWith ("\ $ Companion ") Ġ|| ĠI Object Util . is Internal Field ( f ))) Ġf List . add ( f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( f . type . name . endsWith ("\ $ Companion ")) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIt Ġcan 't Ġbe Ġignored Ġthe Ġtransient Ġannotation , ĠBecause Ġ' ignore Transient ' Ġis Ġfalse . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! Modifier . is Transient ( f . modifiers ) Ġ&& Ġ! I Object Util . is Internal Field ( f )) Ġf List . add ( f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch ( e Ġ: ĠNoSuch Field Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġf List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġstring Ġof Ġchild 's Ġclass Ġname . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġreferenced For Ġ: ĠString ĊĊĠĠĠ Ġ@ Atomic Except Field ĊĠĠĠ Ġprivate Ġval Ġserialize Adapters Ġ: ĠMutable List < Serialize Adapter <* >> ĊĠĠĠ Ġfun Ġget Serialize Adapters () Ġ: ĠList < Serialize Adapter <* >> Ġ= Ġthis . serialize Adapters ĊĊĠĠĠ Ġprivate Ġfun ĠgetDefault Adapter Init () Ġ: ĠArray < out ĠSerialize Adapter <* >> ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Adapter () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch ( e : ĠNotImplementedError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Adapter () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . serialize Adapters Ġ= Ġthis . getDefault Adapter Init (). to Mutable List () ĊĠĠĠĠĠĠĠ Ġthis . serialize Adapters . add ( Default Serializer . create With Selection ( this . getReference ())) ĊĠĠĠĠĠĠĠ Ġthis . referenced For Ġ= Ġthis . reference . typeName ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġ& ĠConfigure Ġthe Ġgson Ġbuilder Ġfor ĠI Object ĠType . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġconfigure Serialize Builder ( target Builder Ġ: ĠGson Builder Ġ= ĠGson Builder ()) Ġ: ĠGson Builder ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġfor ( adapter Ġin Ġthis . get Serialize Adapters ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Builder . register Type Adapter ( adapter . getReference (), Ġadapter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDefault Serializer 's Ġtarget Ġis ĠI Object Ġclass , Ġbut Ġscope Ġis ĠAny . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIt Ġneeds Ġto Ġdefine Ġthe Ġclass Ġfor Ġaccurate Ġserial izing . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( adapter Ġis ĠDefault Serializer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Builder . register Type Adapter ( this . getReference (), Ġadapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtarget Builder . serialize Null s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister Serialize Adapter ( var arg Ġadapter Ġ: ĠSerialize Adapter <* >) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . serialize Adapters . addAll ( adapter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister Serialize Adapter ( var arg Ġadapters Ġ: ĠK Class < out ĠSerialize Adapter <* >>) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġfor ( k Clazz Ġin Ġadapters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Constructor Ġ= Ġk Clazz . primary Constructor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( adapter Constructor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġconstructor Ġof Ġadapter Ġmust Ġbe Ġhave Ġthe Ġempty Ġparameter . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( adapter Constructor . parameters . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . serialize Adapters . add ( adapter Constructor . call ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister Serialize Adapter ( var arg Ġadapters Ġ: ĠClass < out ĠSerialize Adapter <* >>) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġfor ( k Clazz Ġin Ġadapters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Constructor Ġ= Ġk Clazz . construct ors [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( adapter Constructor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġconstructor Ġof Ġadapter Ġmust Ġbe Ġhave Ġthe Ġempty Ġparameter . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( adapter Constructor . parameters . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . serialize Adapters . add ( adapter Constructor . newInstance () Ġas ĠSerialize Adapter <* >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Atomic Except Field ĊĠĠĠ Ġprivate Ġvar Ġignore Transient Ġ: ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġfun Ġdisable Transient ( status Ġ: ĠBoolean ) Ġ{ Ġthis . ignore Transient Ġ= Ġstatus Ġ} ĊĊĠĠĠ Ġfun Ġapply From Base Element ( serialize Ġ: ĠString ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= ĠJson Parser . parse String ( serialize ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . apply From Base Element ( fields ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply From Base Element ( fields Ġ: ĠJson Element ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠI Object Collector . deserialize From Class ( fields , Ġthis :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRuntimeException (" Cannot Ġcreate Ġnew Ġinstance Ġfrom Ġdeserialize From Class ĠClass < ${ this :: class . java . name }> Ġfunction ") ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . apply From Base Element ( instance ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply From Base Element ( v ictim Ġ: ĠI Object < Entity >) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( v ictim :: class . java Ġ== Ġthis :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġv ictim . get Serializable Entity Fields ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI Object Util . apply Field ( k , Ġv ictim , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġreference . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġthis . get UniqueId (). hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( collection ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġserialize Adapters . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġignore Transient . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( other Ġis ĠI Object <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . stringify () Ġ== Ġother . stringify () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . stringify () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġsub Completed ( handle Instance Ġ: ĠAny ? Ġ= Ġnull ) Ġ: ĠBoolean ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġthe Ġentity Ġfrom Ġhandled Ġcollection . ĊĠĠĠĠĠĠĠĠ Ġ* ĠWhen Ġyou Ġimport Ġan ĠEntity , Ġuse Ġ' previous ' Ġto Ġget Ġthe Ġbest Ġmatching Ġobject . ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġnull Ġif Ġnothing Ġelse Ġis Ġavailable . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġprevious ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġbody ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠThe Ġentity Ġwhich Ġis Ġselected Ġby Ġcollector ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< U Ġ: ĠI Object < U >> Ġget Entity ( previous : ĠAny ?, Ġbody : ĠClass < U >) Ġ: ĠU ? ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcollector Ġ= ĠI Object Collector . getEntity Collection ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcollector ?. getEntity ( previous ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠEvery Ġobject Ġthat Ġhas Ġa ĠI Object Ġtype Ġhas Ġa Ġunique ĠID . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġis Ġa Ġtemporary Ġvalue Ġthat Ġis Ġused Ġwhen Ġthe Ġobject Ġhas ĊĠĠĠĠĠĠĠĠ Ġ* Ġnot Ġyet Ġbeen Ġregistered Ġin Ġcollection . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Atomic Except Field ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠUN REFER ENC ED _ UNIQUE _ ID Ġ= Ġ" Please _ call _ the _ method _ # create _ if _ you _ want _ to _ identity " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġadapters Ġas Ġdefault Ġfor ĠI Object Ġtype . ĊĠĠĠĠĠĠĠĠ Ġ* ĠIt Ġneeds Ġto Ġregister Ġfor Ġthat Ġconstructing Ġthe ĠGson Builder Ġor Ġspecifically ĊĠĠĠĠĠĠĠĠ Ġ* Ġde / serialization . ĠIt Ġalso Ġuses Ġto Ġinitialize Ġfor Ġthe Ġserialize Adapter Ġfield ĊĠĠĠĠĠĠĠĠ Ġ* Ġif Ġthe Ġcustomize Ġadapter Ġis Ġnot Ġimplemented . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠgetDefault Adapter () Ġ: ĠArray < out ĠSerialize Adapter <* >> ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThere 's Ġno Ġadapter . ĠIt Ġwill Ġbe Ġadded Ġin Ġthe Ġfuture . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġadapters Ġas Ġdefault Ġfor Ġspecific ĠI Object Ġtype . ĊĠĠĠĠĠĠĠĠ Ġ* ĠIt Ġneeds Ġto Ġregister Ġfor Ġthat Ġconstructing Ġthe ĠGson Builder Ġor Ġspecifically ĊĠĠĠĠĠĠĠĠ Ġ* Ġde / serialization . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠgetDefault Adapter ( clazz Type Ġ: ĠClass < out ĠI Object <* >>) Ġ: ĠList < Serialize Adapter <* >> ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( clazz Type . construct ors [ 0 ]. newInstance () Ġas ĠI Object < *> ). serialize Adapters ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġdefault Ġgson Builder Ġfrom ĠI Object Ġtype . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Builder With Adapter ( clazz Type : ĠClass < out ĠI Object <* >>) Ġ: ĠGson Builder ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( clazz Type . construct ors [ 0 ]. newInstance () Ġas ĠI Object < *> ). configure Serialize Builder () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }