package Ġla . ser end ip ity . jackson _ kotlin _ inline _ class _ module ĊĊ Ċ import Ġcom . fasterxml . jackson . core . Json Parser Ċ import Ġcom . fasterxml . jackson . core . Version Ċ import Ġcom . fasterxml . jackson . databind . Bean Description Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Config Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Context Ċ import Ġcom . fasterxml . jackson . databind . Java Type Ċ import Ġcom . fasterxml . jackson . databind . Json Deserializer Ċ import Ġcom . fasterxml . jackson . databind . Key Deserializer Ċ import Ġcom . fasterxml . jackson . databind . Module Ċ import Ġcom . fasterxml . jackson . databind . de ser . Deserial izers Ċ import Ġcom . fasterxml . jackson . databind . de ser . Key Deserial izers Ċ import Ġkotlin . reflect . K Function Ċ import Ġkotlin . reflect . full . create Type Ċ import Ġkotlin . reflect . full . primary Constructor Ċ import Ġkotlin . reflect . jvm . is Accessible Ċ Ċ annotation Ġclass ĠEnable Inline Class Deserialize Ċ Ċ private Ġfun ĠClass <* >. get Accessible Primary Constructor (): ĠK Function < Any > Ġ{ ĊĠĠĠ Ġreturn ĠcheckNotNull ( kotlin . primary Constructor . apply Ġ{ Ġthis !!. is Accessible Ġ= Ġtrue Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" There Ġare Ġno Ġprimary Ġconstructor Ġin Ġthis Ġclass " ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ private Ġval ĠJava Type . is Inline Class : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġraw Class . is Annotation Present ( Enable Inline Class Deserialize :: class . java ) Ċ Ċ private Ġclass ĠInline Class Deserializer ( ĊĠĠĠ Ġraw Class : ĠClass < *> Ċ ) Ġ: ĠJson Deserializer < Any >() Ġ{ ĊĠĠĠ Ġprivate Ġval Ġconst Ġ= Ġraw Class . get Accessible Primary Constructor () ĊĠĠĠ Ġprivate Ġval Ġgetter : Ġ( Json Parser ) Ġ-> ĠAny Ġ= Ġwhen Ġ( const . parameters [ 0 ]. type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBoolean :: class . create Type () Ġ-> ĠJson Parser :: getValue As Boolean ĊĠĠĠĠĠĠĠ ĠInt :: class . create Type () Ġ-> ĠJson Parser :: getValue As Int ĊĠĠĠĠĠĠĠ ĠLong :: class . create Type () Ġ-> ĠJson Parser :: getValue As Long ĊĠĠĠĠĠĠĠ ĠFloat :: class . create Type () Ġ-> ĠJson Parser :: get Float Value ĊĠĠĠĠĠĠĠ ĠDouble :: class . create Type () Ġ-> ĠJson Parser :: getValue As Double ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTODO (" Unsupported Ġtype ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( p : ĠJson Parser , Ġctxt : ĠDeserial ization Context ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġconst . call ( getter ( p )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠInline Class Key Deserializer ( ĊĠĠĠ Ġraw Class : ĠClass < *> Ċ ) Ġ: ĠKey Deserializer () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġconst Ġ= Ġraw Class . get Accessible Primary Constructor () ĊĠĠĠ Ġoverride Ġfun Ġdeserialize Key ( key : ĠString ?, Ġctxt : ĠDeserial ization Context ?): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġconst . call ( key ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠKotlin Inline Class Module Ġ: ĠModule () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġversion () Ġ= ĠVersion . unknown Version () ĊĠĠĠ Ġoverride Ġfun Ġget ModuleName () Ġ= Ġjava Class . name ĊĊĠĠĠ Ġoverride Ġfun Ġsetup Module ( context : ĠSetup Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . add Key Deserial izers ( Key Deserial izers Ġ{ Ġtype , Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type . is Inline Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Key Deserial izers ĠInline Class Key Deserializer ( type . raw Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġcontext . add Deserial izers ( object Ġ: ĠDeserial izers . Base () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfind Bean Deserializer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠJava Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig : ĠDeserial ization Config ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbean Desc : ĠBean Description ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠJson Deserializer < *> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type . is Inline Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠInline Class Deserializer ( type . raw Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } ĊĊ