package Ġcom . y oked ox Ċ Ċ import Ġjavax . lang . model . type .* Ċ import Ġjavax . lang . model . util . Abstract Type Visitor 9 Ċ Ċ fun ĠtoJson ( type Mirror : ĠType Mirror ?): ĠJson Value Ġ{ ĊĠ Ġif Ġ( type Mirror Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġreturn ĠJson Value ( null ) ĊĠ Ġ} ĊĠ Ġval Ġbase Ġ= Ġmutable Map Of < String , ĠAny ? >( ĊĠĠĠ Ġ" kind " Ġto Ġtype Mirror . kind . name , ĊĠĠĠ Ġ" annotations " Ġto ĠtoJson ( type Mirror . annotation Mir rors ) ĊĠ Ġ) ĊĠ Ġbase . put All ( Json Type Visitor (). visit ( type Mirror )) ĊĠ Ġreturn ĠJson Value ( base ) Ċ } Ċ Ċ fun ĠtoJson ( list : ĠIterable < Type Mirror >): ĠJson Value Ġ{ ĊĠ Ġreturn ĠtoJson ( list . map Ġ{ ĠtoJson ( it ) Ġ}) Ċ } Ċ Ċ class ĠJson Type Visitor Ġ: ĠAbstract Type Visitor 9 < JsonObject , ĠVoid >() Ġ{ ĊĠ Ġoverride Ġfun Ġvisit Primitive ( t : ĠPrimitive Type , Ġp : ĠVoid ?): ĠJsonObject Ġ{ ĊĠĠĠ Ġreturn Ġmap Of () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit Null ( t : ĠNull Type , Ġp : ĠVoid ?): ĠJsonObject Ġ{ ĊĠĠĠ Ġreturn Ġmap Of () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit Array ( t : ĠArray Type , Ġp : ĠVoid ?): ĠJsonObject Ġ{ ĊĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠ Ġ" component Type " Ġto ĠtoJson ( t . component Type ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit Declared ( t : ĠDecl ared Type , Ġp : ĠVoid ?): ĠJsonObject Ġ{ ĊĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠ Ġ// ĠTODO : Ġas Element ? Ġor Ġwill Ġthat Ġlead Ġus Ġin Ġto Ġcircle ? ĊĠĠĠĠĠ Ġ" enc lo sing Type " Ġto ĠtoJson ( t . enc lo sing Type ), ĊĠĠĠĠĠ Ġ" type Arguments " Ġto ĠtoJson ( t . type Arguments ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit Error ( t : ĠError Type , Ġp : ĠVoid ?): ĠJsonObject Ġ{ ĊĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠ Ġ// ĠTODO : Ġas Element ? Ġor Ġwill Ġthat Ġlead Ġus Ġin Ġto Ġcircle ? ĊĠĠĠĠĠ Ġ" enc lo sing Type " Ġto ĠtoJson ( t . enc lo sing Type ), ĊĠĠĠĠĠ Ġ" type Arguments " Ġto ĠtoJson ( t . type Arguments ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit Type Variable ( t : ĠType Variable , Ġp : ĠVoid ?): ĠJsonObject Ġ{ ĊĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠ Ġ" upper Bound " Ġto ĠtoJson ( t . upper Bound ), ĊĠĠĠĠĠ Ġ" lower Bound " Ġto ĠtoJson ( t . lower Bound ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit Wildcard ( t : ĠW ildcard Type , Ġp : ĠVoid ?): ĠJsonObject Ġ{ ĊĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠ Ġ" extends Bound " Ġto ĠtoJson ( t . extends Bound ), ĊĠĠĠĠĠ Ġ" super Bound " Ġto ĠtoJson ( t . super Bound ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit Executable ( t : ĠExec utable Type , Ġp : ĠVoid ?): ĠJsonObject Ġ{ ĊĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠ Ġ" type Variables " Ġto ĠtoJson ( t . type Variables ), ĊĠĠĠĠĠ Ġ" returnType " Ġto ĠtoJson ( t . returnType ), ĊĠĠĠĠĠ Ġ" parameter Types " Ġto ĠtoJson ( t . parameter Types ), ĊĠĠĠĠĠ Ġ" receiver Type " Ġto ĠtoJson ( t . receiver Type ), ĊĠĠĠĠĠ Ġ" throw n Types " Ġto ĠtoJson ( t . throw n Types ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit No Type ( t : ĠNo Type , Ġp : ĠVoid ?): ĠJsonObject Ġ{ ĊĠĠĠ Ġreturn Ġmap Of () Ġ// ĠNothing Ġto Ġadd Ġover Ġbase ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit Union ( t : ĠUnion Type , Ġp : ĠVoid ?): ĠJsonObject Ġ{ ĊĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠ Ġ" altern atives " Ġto ĠtoJson ( t . altern atives ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit Intersection ( t : ĠIntersection Type , Ġp : ĠVoid ?): ĠJsonObject Ġ{ ĊĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠ Ġ" bounds " Ġto ĠtoJson ( t . bounds ) ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ