package Ġcom . jay r ave . f alk on . mapper Ċ Ċ import Ġcom . jay r ave . f alk on . mapper . exceptions . Missing Converter Exception Ċ import Ġjava . lang . reflect . Type Ċ import Ġkotlin . reflect . K Property 1 Ċ import Ġkotlin . reflect . jvm . java Type Ċ Ċ @ Suppress (" unused ") Ċ object ĠTable Implementation Helper Ġ{ ĊĊĠĠĠ Ġ// Ġ-------------------------------- ----- ĠName Ġformat Ġ-------------------------------- ----------- ĊĊĠĠĠ Ġfun Ġcompute Formatted Name Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty : ĠK Property 1 < *, Ġ* >, Ġconfiguration : ĠTable Configuration ): ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Ġ= Ġconfiguration . name Formatter . format ( property . name ) ĊĊĠĠĠ Ġ// Ġ-------------------------------- ----- ĠName Ġformat Ġ-------------------------------- ----------- ĊĊĊĠĠĠ Ġ// Ġ-------------------------------- ------ ĠConverter s Ġ-------------------------------- ----------- ĊĊĠĠĠ Ġ// ĠFor Ġbuilding Ġconverter s Ġfor Ġenum ĊĠĠĠ Ġprivate Ġenum Ġclass ĠDummy Enum ĊĊĊĠĠĠ Ġfun Ġ< C > Ġget Converter For ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty : ĠK Property 1 < *, ĠC >, Ġconfiguration : ĠTable Configuration ): ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConverter < C > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġk Type Ġ= Ġproperty . returnType ĊĠĠĠĠĠĠĠ Ġval Ġjava Type Ġ= Ġk Type . java Type ĊĠĠĠĠĠĠĠ Ġval Ġconverter Ġ= Ġwhen Ġ( k Type . is Marked Nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġconfiguration . get Converter For Nullable Values Of < Any >( java Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġconfiguration . get Converter For NonNull Values Of < Any >( java Type ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġbuild Converter If Enum ( java Type , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġconverter Ġas ĠConverter < C >? Ġ?: Ġthrow Ġbuild Missing Converter Exception ( java Type , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġbuild Converter If Enum ( type : ĠType , Ġis Nullable : ĠBoolean ): ĠConverter < *> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! is ĠClass < *> Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! type . is Enum Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnullable Converter Ġ= ĠNullable Enum ByName Converter ( type Ġas ĠClass < Dummy Enum >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( is Nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġnullable Converter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠNullable To NonNull Converter ( nullable Converter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġbuild Missing Converter Exception ( type : ĠType , Ġis Nullable : ĠBoolean ): ĠMissing Converter Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnull ability Ġ= Ġwhen Ġ( is Nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ" nullable " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" non - null " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠMissing Converter Exception (" Converter Ġnot Ġfound Ġfor Ġ$ null ability Ġform Ġof Ġ$ type ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ-------------------------------- ------ ĠConverter s Ġ-------------------------------- ----------- ĊĊĊĠĠĠ Ġ// Ġ-------------------------------- -- ĠProperty Ġextractor Ġ-------------------------------- ------- ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġ[ Property Extractor ] Ġthat Ġjust Ġdoes Ġa Ġget Ġfor Ġthe Ġproperty Ġon Ġthe Ġinstance . ĊĠĠĠĠ Ġ* ĠFor Ġeg ., Ġif Ġ` item ` Ġis Ġthe Ġinstance Ġ& Ġ` price ` Ġis Ġthe Ġproperty , Ġthe Ġreturned Ġproperty ĊĠĠĠĠ Ġ* Ġextractor Ġdoes Ġthe Ġequivalent Ġof Ġ` item . price ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny , ĠC > Ġbuild Default Extractor For ( property : ĠK Property 1 < T , ĠC >): ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Extractor < T , ĠC > Ġ= ĠSimple Property Extractor ( property ) ĊĊĠĠĠ Ġ// Ġ-------------------------------- -- ĠProperty Ġextractor Ġ-------------------------------- ------- Ċ } Ċ