package Ġcom . kn . di agrams . generator . config Ċ Ċ import Ġcom . google . gson .* Ċ import Ġcom . intellij . psi . Psi Method Ċ import Ġcom . kn . di agrams . generator . cast Ċ import Ġcom . kn . di agrams . generator . graph . simple Signature Ċ import Ġcom . kn . di agrams . generator . in Read Action Ċ import Ġjava . lang . reflect . Type Ċ import Ġkotlin . reflect . K Property 1 Ċ import Ġkotlin . reflect . full . member Properties Ċ Ċ val Ġserializer : ĠGson Ġ= ĠGson Builder (). set Version ( 1 . 2 ) ĊĠĠĠĠĠĠĠ Ġ. set Pretty Print ing () ĊĠĠĠĠĠĠĠ Ġ. create () Ċ Ċ fun ĠtoJson With Comments ( config : ĠAny ) Ġ= Ġadd Comments ( serializer . toJson ( config ), Ġconfig ) Ċ Ċ fun ĠDiagram Configuration . metaData Section () Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġ| /' Ġdiagram Ġmeta Ġdata Ġstart ĊĠĠĠĠĠĠĠ Ġ| config =${ this . java Class . simple Name }; ĊĠĠĠĠĠĠĠ Ġ| ${ toJson With Comments ( this )} ĊĠĠĠĠĠĠĠ Ġ| diagram Ġmeta Ġdata Ġend Ġ'/ ĊĠĠĠ Ġ""" . trim Margin ("| ") Ċ Ċ @ Opt In ( Experimental Std lib Api :: class ) Ċ fun Ġadd Comments ( metadata : ĠString , Ġconfig : ĠAny ): ĠString Ġ{ ĊĠĠĠ Ġvar Ġnew Metadata Ġ= Ġmetadata ĊĠĠĠ Ġconfig :: class . member Properties ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . cast < K Property 1 < Any , Ġ* >>() ?. get ( config ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit :: class . java . declared Fields ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġf Ġ-> Ġf . is Annotation Present ( Comment With Enum Values :: class . java ) Ġ|| Ġf . is Annotation Present ( Comment WithValue :: class . java ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Ġ= Ġif Ġ( field . is Annotation Present ( Comment With Enum Values :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . type . fields . join ToString (", Ġ") Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġfield . getAnnotation ( Comment WithValue :: class . java ). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Metadata Ġ= Ġnew Metadata . replace ("\" ${ field . name } .* \ n ". to Regex ()) Ġ{ Ġmatch Ġ-> Ġmatch . value . substring Before ("\ n ") Ġ+ Ġ" Ġ// Ġ$ comment \ n " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġnew Metadata Ċ } Ċ Ċ fun ĠDiagram Configuration . Companion . load From Metadata ( diagram Text : ĠString ): ĠDiagram Configuration ? Ġ{ ĊĠĠĠ Ġval Ġmetadata Ġ= Ġdiagram Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. substring Before (" diagram Ġmeta Ġdata Ġend Ġ'/ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. substring After ("/ ' Ġdiagram Ġmeta Ġdata Ġstart ") ĊĊĠĠĠ Ġval Ġconfig Json Ġ= Ġmetadata . substring After ("; ") ĊĠĠĠ Ġval Ġconfig ClassName Ġ= Ġmetadata . substring Before ("; "). substring After (" config =") ĊĊĠĠĠ Ġval Ġconfig Type Ġ= ĠtypeOf ( config ClassName ) Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġreturn Ġserializer . fromJson ( config Json , Ġconfig Type ) Ġas ĠDiagram Configuration Ċ } Ċ Ċ fun ĠtypeOf ( className : ĠString ) Ġ= Ġsequence Of ( Call Configuration :: class . java , ĠStructure Configuration :: class . java , ĠFlow Configuration :: class . java ) ĊĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġit . simple Name Ġ== ĠclassName Ġ} ĊĊ Ċ @ Retention ( Annotation Retention . RUNTIME ) Ċ @ Target ( Annotation Target . FIELD ) Ċ annotation Ġclass ĠComment With Enum Values Ċ Ċ @ Retention ( Annotation Retention . RUNTIME ) Ċ @ Target ( Annotation Target . FIELD ) Ċ annotation Ġclass ĠComment WithValue ( val Ġvalue : ĠString ) Ċ