package Ġcom . netflix . spin n aker . ke el . apid ocs Ċ Ċ import Ġcom . fasterxml . jackson . annotation . Json Creator Ċ import Ġcom . fasterxml . jackson . module . kotlin . is Kotlin Class Ċ import Ġio . swagger . v 3 . o as . models . media . Schema Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Function Ċ import Ġkotlin . reflect . full . find Annotation Ċ import Ġkotlin . reflect . full . find Parameter ByName Ċ import Ġkotlin . reflect . full . primary Constructor Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . core . Ordered . HIG HE ST _ PREC ED ENCE Ċ import Ġorg . springframework . core . annotation . Order Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ /** Ċ Ġ* ĠAt tempts Ġto Ġdetermine Ġwhich Ġproperties Ġof Ġan Ġ` object ` Ġare Ġ` required ` Ġbased Ġon Ġthe Ġ[ Json Creator ] Ċ Ġ* Ġor Ġdefault Ġconstructor Ġin Ġthe Ġassociated ĠKotlin Ġclass . ĠAny Ġparameter Ġthat Ġis Ġnon - nullable Ġand Ġhas Ċ Ġ* Ġno Ġdefault Ġvalue Ġis Ġconsidered Ġrequired . Ċ Ġ* Ċ Ġ* Ġ@ see Ġkotlin . reflect . K Parameter . is Optional Ċ Ġ* Ġ@ see Ġkotlin . reflect . K Type . is Marked Nullable Ċ Ġ*/ Ċ @ Component Ċ @ Order ( HIG HE ST _ PREC ED ENCE ) Ġ// Ġneeds Ġto Ġrun Ġbefore ĠApi Annotation Model Converter Ċ class ĠKotlin Optional Property Converter Ġ: ĠAbstract Schema Customizer () Ġ{ ĊĊĠ Ġoverride Ġfun Ġcustomize ( schema : ĠSchema <* >, Ġtype : ĠClass <* >) Ġ{ ĊĠĠĠ Ġif Ġ( type . is Kotlin Class ()) Ġ{ ĊĠĠĠĠĠ Ġapply Required ( type . kotlin , Ġschema ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġapply Required ( kotlin Class : ĠK Class <* >, Ġschema : ĠSchema <* >) Ġ{ ĊĠĠĠ Ġif Ġ( schema . properties Ġ== Ġnull ) Ġreturn ĊĊĠĠĠ Ġval Ġconstructor Ġ= Ġkotlin Class . json Creator Ġ?: Ġkotlin Class . primary Constructor ĊĠĠĠ Ġif Ġ( constructor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġlog . warn (" No ĠJson Creator Ġor Ġconstructor Ġfound Ġfor Ġ${ kotlin Class . qualified Name }") ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġschema . properties . forEach Ġ{ Ġ( name , Ġproperty Schema ) Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġparam Ġ= Ġconstructor . find Parameter ByName ( name ) ĊĠĠĠĠĠĠĠ Ġif Ġ( param Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlog . warn (" No Ġparameter Ġ$ name Ġfound Ġon ĠJson Creator Ġor Ġconstructor Ġfor Ġ${ kotlin Class . qualified Name }") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! param . is Optional Ġ&& Ġ! param . type . is Marked Nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschema . mark Required ( name ) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschema . mark Optional ( name ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġproperty Schema . nullable Ġ= Ġparam . type . is Marked Nullable ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġ< T Ġ: ĠAny > ĠK Class < T >. json Creator : ĠK Function < T >? ĊĠĠĠ Ġget () Ġ= Ġconstructors . find Ġ{ Ġit . find Annotation < Json Creator >() Ġ!= Ġnull Ġ} ĊĊĠ Ġprivate Ġval Ġlog Ġby Ġlazy Ġ{ ĠLoggerFactory . getLogger ( java Class ) Ġ} Ċ } Ċ