package Ġsz . api . doc Ċ Ċ import Ġcom . fasterxml . jackson . annotation . JsonIgnore Ċ import Ġsz . api . doc . annotations . Desc Ċ import Ġsz . api . tools .* Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . full . member Properties Ċ import Ġkotlin . reflect . jvm . jvm Er asure Ċ Ċ // Ċ // ĠCreated Ġby Ġkk Ġon Ġ 1 7 / 8 / 2 4 . Ċ // Ċ Ċ class ĠField Schema Ġ{ ĊĊĠĠĠ Ġ@ Desc (" åľ¨ å¯¹è±¡ æłĳ éĩĮ æīĢ å¤Ħ çļĦ å±Ĥ çº§ ") ĊĠĠĠ Ġ@ JsonIgnore ĊĠĠĠ Ġvar Ġlevel Ġ= Ġ 1 ĊĊĠĠĠ Ġ@ Desc (" æĸ¹æ³ķ åıĤæķ° æĪĸèĢħ è¿ĶåĽŀ ç»ĵæŀľ ĠReply Ġä¸ŃçļĦ åŃĹæ®µ åĲįç§° ") ĊĠĠĠ Ġvar Ġname : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġ@ Desc (" åŃĹæ®µ æııè¿° ") ĊĠĠĠ Ġvar Ġdesc : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġ@ Desc (" åŃĹæ®µ çļĦ Json æķ°æį® ç±»åŀĭ ") ĊĠĠĠ Ġvar Ġtype : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġ@ Desc (" åŃĹæ®µ å¯¹åºĶçļĦ kotlin ç±»åŀĭ ") ĊĠĠĠ Ġ@ JsonIgnore ĊĠĠĠ Ġvar Ġkotlin _ class : ĠK Class < *> ? Ġ= Ġnull ĊĊĠĠĠ Ġval ĠclassName : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġkotlin _ class ?. qualified Name Ġ?: Ġ" undefined " ĊĊĠĠĠ Ġ@ Desc (" åĮħåĲ« çļĦ åŃĹæ®µ , Ġkey : Ġ åŃĹæ®µ åĲį ( name )") ĊĠĠĠ Ġ@ JsonIgnore ĊĠĠĠ Ġvar Ġfields : ĠMutable Map < String , ĠField Schema > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġfun Ġnode Text (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ name : Ġ$ desc Ġ[$ type ]" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Node ( field Schema : ĠField Schema , Ġnode : ĠTreeNode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfield Schema . fields . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġitem . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( schema . fields . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . children . add ( TreeNode ( item . value . node Text ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Node Ġ= ĠTreeNode ( item . value . node Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . children . add ( obj Node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Node ( schema , Ġobj Node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠJson Schema (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠTreeNode ( node Text ()) ĊĠĠĠĠĠĠĠ Ġhandle Node ( this , Ġroot ) ĊĠĠĠĠĠĠĠ Ġval Ġpretty Tree Ġ= ĠPretty Tree ( root ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpretty Tree . pretty Txt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġresolve Fields ( own ner Class : ĠK Class <* >, Ġown ner Schema : ĠField Schema ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Level Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġown ner Class . member Properties . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprop Schema Ġ= ĠField Schema () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprop Schema . level Ġ= Ġown ner Schema . level Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprop Schema . name Ġ= Ġit . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprop Schema . desc Ġ= Ġproperty Desc ( it . annotations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprop Schema . type Ġ= Ġjson Type ( it . returnType ). typeName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprop Schema . kotlin _ class Ġ= Ġit . returnType . jvm Er asure Ġ// it . returnType . java Type . typeName ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġown ner Schema . fields . put ( prop Schema . name , Ġprop Schema ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is List ( it . returnType ) Ġ|| ĠisArray ( it . returnType )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement K Class Ġ= Ġlist ElementType ( it . returnType ). kotlin ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Schema Ġ= ĠField Schema () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Schema . level Ġ= Ġprop Schema . level Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Schema . name Ġ= Ġ" element " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Schema . desc Ġ= Ġ" Element Ġof ĠList " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Schema . type Ġ= Ġelement K Class . simple Name !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Schema . kotlin _ class Ġ= Ġelement K Class Ġ// element K Class . java . typeName ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprop Schema . fields . put ( element Schema . name , Ġelement Schema ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element Schema . level Ġ< Ġmax Level Ġ&& Ġis Simple Object ( element K Class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Fields ( element K Class , Ġelement Schema ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is Map ( it . returnType )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey K Class Ġ= Ġmap KeyType ( it . returnType ). kotlin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Schema Ġ= ĠField Schema () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Schema . level Ġ= Ġprop Schema . level Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Schema . name Ġ= Ġ" key " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Schema . desc Ġ= Ġ" Key Ġof ĠMap " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Schema . type Ġ= Ġkey K Class . simple Name !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Schema . kotlin _ class Ġ= Ġkey K Class Ġ// key K Class . java . typeName ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue K Class Ġ= Ġmap ValueType ( it . returnType ). kotlin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Schema Ġ= ĠField Schema () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Schema . level Ġ= Ġprop Schema . level Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Schema . name Ġ= Ġ" value " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Schema . desc Ġ= Ġ" Value Ġof ĠMap " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Schema . type Ġ= Ġvalue K Class . simple Name !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Schema . kotlin _ class Ġ= Ġvalue K Class Ġ// value K Class . java . typeName ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprop Schema . fields . put ( key Schema . name , Ġkey Schema ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprop Schema . fields . put ( value Schema . name , Ġvalue Schema ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Schema . level Ġ< Ġmax Level Ġ&& Ġis Simple Object ( value K Class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Fields ( value K Class , Ġvalue Schema ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is Basic Type ( it . returnType )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprop Schema . fields . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Fields ( prop Schema . kotlin _ class !! , Ġprop Schema ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġproperty Desc ( annotations : ĠList < Annotation >): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanno Ġ= Ġannotations . find Ġ{ Ġit Ġis ĠDesc Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anno Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( anno Ġas ĠDesc ). value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ