/* Ċ Ġ* ĠĠĠĠĠ ĠK ores Ġ- ĠJava Ġsource Ġand ĠByte code Ġgeneration Ġframework Ġ< https :// github . com / Jon athan xD / K ores > Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠ ĠThe ĠMIT ĠLicense Ġ( MIT ) Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠCopyright Ġ( c ) Ġ 2 0 2 2 ĠThe Real Bug gy / Jon athan xD Ġ( https :// github . com / Jon athan xD /) Ġ< jon athan . script er @ program mer . net > Ċ Ġ* ĠĠĠĠĠ ĠCopyright Ġ( c ) Ġcontributors Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* ĠĠĠĠĠ Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* ĠĠĠĠĠ Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* ĠĠĠĠĠ Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* ĠĠĠĠĠ Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* ĠĠĠĠĠ Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* ĠĠĠĠĠ Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠĠĠĠĠ ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠĠĠĠĠ ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠĠĠĠĠ ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠĠĠĠĠ ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠĠĠĠĠ ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠĠĠĠĠ ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġcom . k ores framework . k ores . serialization Ċ Ċ import Ġcom . github . jon athan xd . i utils .` object `. Late Init Ċ import Ġcom . github . jon athan xd . i utils . type . Type Util Ċ import Ġcom . k ores framework . k ores . base . K ores Annotation Ċ import Ġcom . k ores framework . k ores . base . Retention Ċ import Ġcom . k ores framework . k ores . type .* Ċ import Ġcom . k ores framework . k ores . util . from Source String Ċ import Ġcom . k ores framework . k ores . util . to Str Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlinx . serialization . descriptors . Serial Descriptor Ċ import Ġkotlinx . serialization . descriptors . build Class Serial Descriptor Ċ import Ġkotlinx . serialization . descriptors . element Ċ import Ġkotlinx . serialization . encoding .* Ċ import Ġjava . lang . reflect . Type Ċ Ċ object ĠAnnotation Serializer Ġ: ĠK Serializer < K ores Annotation > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġloader Ġ= Ġthis :: class . java . class Loader ĊĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= Ġbuild Class Serial Descriptor (" Annotation ") Ġ{ ĊĠĠĠĠĠĠĠ Ġelement < Type >(" type ") ĊĠĠĠĠĠĠĠ Ġelement < Map < String , ĠWr apped Annotation Value >> (" properties ") ĊĠĠĠĠĠĠĠ Ġelement < Retention >(" retention ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠK ores Annotation Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdecoder . decode Structure ( descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠL ate Init . late Ref < Type >(" type ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= ĠL ate Init . late Ref < Map < String , ĠAny >> (" type ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġretention Ġ= ĠL ate Init . late Ref < Retention >(" retention ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġindex Ġ= Ġdecode Element Index ( descriptor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġtype . init ( decode Serializable Element ( descriptor , Ġ 0 , ĠType Serializer )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġproperties . init ( decode Serializable Element ( descriptor , Ġ 1 , ĠAnnotation Map Serializer )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġretention . init ( decode Serializable Element ( descriptor , Ġ 2 , ĠRet ention . serializer ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComposite Decoder . DECODE _ DONE Ġ-> Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġindex : Ġ$ index ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ decode Structure ĠK ores Annotation ( type . value , Ġproperties . value , Ġretention . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠK ores Annotation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġencoder . encode Structure ( descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode Serializable Element ( descriptor , Ġ 0 , ĠType Serializer , Ġvalue . type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode Serializable Element ( descriptor , Ġ 1 , ĠAnnotation Map Serializer , Ġvalue . values ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode Serializable Element ( descriptor , Ġ 2 , ĠRet ention . serializer (), Ġvalue . retention ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }