package Ġcom . fasterxml . jackson . module . kotlin Ċ Ċ import Ġcom . fasterxml . jackson . annotation . Json Creator Ċ import Ġcom . fasterxml . jackson . annotation . JsonProperty Ċ import Ġcom . fasterxml . jackson . databind . PropertyName Ċ import Ġcom . fasterxml . jackson . databind . cfg . Mapper Config Ċ import Ġcom . fasterxml . jackson . databind . int rospect .* Ċ import Ġcom . fasterxml . jackson . databind . util . Bean Util Ċ import Ġjava . lang . reflect . Constructor Ċ import Ġjava . lang . reflect . Method Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Function Ċ import Ġkotlin . reflect . K Parameter Ċ import Ġkotlin . reflect . full . comp anion Object Ċ import Ġkotlin . reflect . full . declared Functions Ċ import Ġkotlin . reflect . full . member Properties Ċ import Ġkotlin . reflect . full . primary Constructor Ċ import Ġkotlin . reflect . jvm . internal . Kotlin Reflection Internal Error Ċ import Ġkotlin . reflect . jvm . java Type Ċ import Ġkotlin . reflect . jvm . kotlin Function Ċ Ċ internal Ġclass ĠKotlin Names Annotation Int ros pector ( val Ġmodule : ĠKotlin Module , Ġval Ġcache : ĠReflection Cache , Ġval Ġignored Classes For Imp lying Json Creator : ĠSet < K Class <* >>) Ġ: ĠN op Annotation Int ros pector () Ġ{ ĊĠĠĠ Ġ/* ĊĠĠĠ Ġoverride Ġpublic Ġfun Ġfind Name For Deserialization ( annotated : ĠAnnot ated ?): ĠProperty Name ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġshould Ġnot Ġdo Ġint rospection Ġhere , Ġonly Ġfor Ġexplicit Ġnaming Ġby Ġannotations ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ// Ġsince Ġ 2 . 4 ĊĠĠĠ Ġoverride Ġfun Ġfind Implicit PropertyName ( config : ĠMapper Config <* >, Ġmember : ĠAnnot ated Member ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( member Ġis ĠAnnot ated Parameter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsimple Name Ġ= Ġfind Kotlin ParameterName ( member ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( simple Name Ġ== Ġnull ) Ġnull Ġelse ĠBean Util . std M angle PropertyName ( simple Name , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġsince Ġ 2 . 1 1 : Ġsupport ĠKotlin 's Ġway Ġof Ġhandling Ġ" is X xx " Ġbacked Ġproperties Ġwhere ĊĠĠĠ Ġ// Ġlogical Ġproperty Ġname Ġneeds Ġto Ġremain Ġ" is X xx " Ġand Ġnot Ġbecome Ġ" xxx " Ġas Ġwith ĠJava ĠBe ans ĊĠĠĠ Ġ// Ġ( see Ġhttps :// kotlin lang . org / docs / reference / java - to - kotlin - interop . html Ġand ĊĠĠĠ Ġ// Ġ Ġhttps :// github . com / F aster XML / jackson - databind / issues / 2 5 2 7 ĊĠĠĠ Ġ// Ġ Ġfor Ġdetails ) ĊĠĠĠ Ġoverride Ġfun Ġfind Rename By Field ( config : ĠMapper Config <* >, ĊĠĠĠĠĠĠĠ Ġfield : ĠAnnot ated Field , Ġimpl Name : ĠProperty Name ): ĠProperty Name ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorig Simple Ġ= Ġimpl Name . simple Name ĊĠĠĠĠĠĠĠ Ġif Ġ( field . decl aring Class . is Kotlin Class () Ġ&& Ġorig Simple . startsWith (" is ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm angled Name : ĠString ? Ġ= ĠBean Util . std M angle PropertyName ( orig Simple , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( mangled Name Ġ!= Ġnull ) Ġ&& Ġ! mangled Name . equals ( orig Simple )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠProperty Name . construct ( mangled Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġfind Creator Annotation ( config : ĠMapper Config <* >, Ġmember : ĠAnnot ated ): ĠJson Creator . Mode ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġadd Ġa ĠJson Creator Ġto Ġany Ġconstructor Ġif Ġone Ġis Ġdeclared Ġalready ĊĊĠĠĠĠĠĠĠ Ġif Ġ( member Ġis ĠAnnot ated Constructor Ġ&& Ġ! member . decl aring Class . is Enum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġhas Ġparameters , Ġis Ġa ĠKotlin Ġclass , Ġand Ġthe Ġparameters Ġall Ġhave Ġparameter Ġannotations , Ġthen Ġpret end Ġwe Ġhave Ġa ĠJson Creator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( member . getParameter Count () Ġ> Ġ 0 Ġ&& Ġmember . decl aring Class . is Kotlin Class ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfound Ġ= Ġcache . check Constructor Is Creator Annotated ( member ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Class Ġ= Ġcache . kotlin From Java ( member . decl aring Class Ġas ĠClass < Any >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Constructor Ġ= Ġcache . kotlin From Java ( member . annotated Ġas ĠConstructor < Any >) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( k Constructor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Primary Constructor Ġ= Ġk Class . primary Constructor Ġ== Ġk Constructor Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( k Class . primary Constructor Ġ== Ġnull Ġ&& Ġk Class . construct ors . size Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Names Ġ= Ġk Class . member Properties . map Ġ{ Ġit . name Ġ}. toSet () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠK Function <* >. is Possible Single String (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġparameters . size Ġ== Ġ 1 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters [ 0 ]. name Ġ! in Ġproperty Names Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters [ 0 ]. type . java Type Ġ== ĠString :: class . java Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters [ 0 ]. annotations . none Ġ{ Ġit . annotation Class . java Ġ== ĠJson Property :: class . java Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠCollection < K Function <* >> . filter Out Single String Call ables (): ĠCollection < K Function <* >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . filter Ġ{ Ġ! it . is Possible Single String () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġany Constructor Has Json Creator Ġ= Ġk Class . construct ors . filter Out Single String Call ables () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . annotations . any Ġ{ Ġit . annotation Class . java Ġ== ĠJson Creator :: class . java Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġany Companion Method Is Json Creator Ġ= Ġmember . type . raw Class . kotlin . comp anion Object ?. declared Functions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Out Single String Call ables ()?. any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . annotations . any Ġ{ Ġit . annotation Class . java Ġ== ĠJ vm Static :: class . java Ġ} Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . annotations . any Ġ{ Ġit . annotation Class . java Ġ== ĠJson Creator :: class . java Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġ Ġshould Ġwe Ġdo Ġthis Ġcheck Ġor Ġnot ? Ġ ĠIt Ġcould Ġcause Ġfailures Ġif Ġwe Ġmiss Ġanother Ġway Ġa Ġproperty Ġcould Ġbe Ġset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġval Ġrequired Properties Ġ= Ġk Class . declared Member Properties . filter Ġ{! it . returnType . is Marked Nullable Ġ}. map Ġ{ Ġit . name Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġval Ġare All Required Parameters In Constructor Ġ= Ġk Constructor . parameters . all Ġ{ Ġrequired Properties . contains ( it . name ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġare All Parameters Valid Ġ= Ġk Constructor . parameters . size Ġ== Ġk Constructor . parameters . count Ġ{ Ġit . name Ġ!= Ġnull Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Single String Constructor Ġ= Ġk Constructor . is Possible Single String () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimp ly Creator Annotation Ġ= Ġis Primary Constructor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ!( any Constructor Has Json Creator Ġ|| Ġany Companion Method Is Json Creator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġare All Parameters Valid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! is Single String Constructor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġk Class Ġ! in Ġignored Classes For Imp lying Json Creator ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimp ly Creator Annotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJson Creator . Mode . PROPERTIES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprotected Ġfun Ġfind Kotlin ParameterName ( param : ĠAnnot ated Parameter ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( param . decl aring Class . is Kotlin Class ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmember Ġ= Ġparam . getOwner (). get Member () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġif Ġ( member Ġis ĠConstructor <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġctor Ġ= Ġ( member Ġas ĠConstructor < Any >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġctor Parm Count Ġ= Ġctor . parameter Types . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk tor Parm Count Ġ= Ġtry Ġ{ Ġctor . kotlin Function ?. parameters ?. size Ġ?: Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( ex : ĠKotlin Reflection Internal Error ) Ġ{ Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( ex : ĠUnsupportedOperationException ) Ġ{ Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ktor Parm Count Ġ> Ġ 0 Ġ&& Ġk tor Parm Count Ġ== Ġctor Parm Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctor . kotlin Function ?. parameters ?. get ( param . index )?. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( member Ġis ĠMethod ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġmember . kotlin Function ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Param Kind Ġ= Ġtemp ?. parameters ?. first OrNull ()?. kind ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġif Ġ( first Param Kind Ġ!= ĠK Parameter . Kind . VALUE ) Ġparam . index Ġ+ Ġ 1 Ġelse Ġparam . index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpar m Count Ġ= Ġtemp ?. parameters ?. size Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parm Count Ġ> Ġidx ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp ?. parameters ?. get ( idx )?. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠKotlin Reflection Internal Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġname ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ Ċ } Ċ