package Ġcom . rx http . compiler . k sp Ċ Ċ import Ġcom . google . devtools . k sp . K sp Experimental Ċ import Ġcom . google . devtools . k sp . get Annotations ByType Ċ import Ġcom . google . devtools . k sp . is Public Ċ import Ġcom . google . devtools . k sp . processing . K SP Logger Ċ import Ġcom . google . devtools . k sp . processing . Resolver Ċ import Ġcom . google . devtools . k sp . symbol . Class Kind Ċ import Ġcom . google . devtools . k sp . symbol . KS Class Declaration Ċ import Ġcom . google . devtools . k sp . symbol . KS File Ċ import Ġcom . google . devtools . k sp . symbol . KS Property Declaration Ċ import Ġcom . google . devtools . k sp . symbol . KS Visitor Void Ċ import Ġcom . google . devtools . k sp . symbol . Modifier Ċ import Ġcom . squareup . kotlin po et . Fun Spec Ċ import Ġcom . squareup . kotlin po et . k sp . Kotlin Po et K sp Preview Ċ import Ġrx http . wrapper . annotation . Ok Client Ċ import Ġjava . util .* Ċ Ċ class ĠOk Client Visitor ( ĊĠĠĠ Ġprivate Ġval Ġresolver : ĠResolver , ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠK SP Logger Ċ ) Ġ: ĠK S Visitor Void () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġelement Map Ġ= ĠLinkedHashMap < String , ĠK S Property Declaration >() ĊĊĠĠĠ Ġ@ Opt In ( K sp Experimental :: class ) ĊĠĠĠ Ġoverride Ġfun Ġvisit Property Declaration ( property : ĠK S Property Declaration , Ġdata : ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty . check Ok Client Property () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= Ġproperty . get Annotations ByType ( Ok Client :: class ). first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġname Ġ= Ġannotation ?. name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġproperty . simple Name . asString (). first Letter UpperCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element Map . containsKey ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġvariable Ġ'${ property . simple Name . asString () }' Ġin Ġthe Ġ@ Ok Client Ġannotation Ġ' name Ġ= Ġ$ name ' Ġis Ġduplicated " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNoSuch ElementException ( msg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Map [ name ] Ġ= Ġproperty ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch ElementException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( e , Ġproperty ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Kotlin Po et K sp Preview ĊĠĠĠ Ġfun Ġget Fun List (): ĠList < Fun Spec > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġelement Map . map NotNull Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġentry . key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġks Property Ġ= Ġentry . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmember Name Ġ= Ġks Property . to Member Name () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFun Spec . builder (" set $ key ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġset Ok Client (% M )", Ġmember Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ K sp Experimental Ċ @ Throws ( NoSuch ElementException :: class ) Ċ private Ġfun ĠK S Property Declaration . check Ok Client Property () Ġ{ ĊĠĠĠ Ġval Ġvariable Name Ġ= Ġsimple Name . asString () ĊĊĠĠĠ Ġval ĠclassName Ġ= Ġ" okhttp 3 . Ok HttpClient " ĊĠĠĠ Ġval Ġks Class Ġ= Ġtype . resolve (). declaration Ġas ? ĠK S Class Declaration ĊĠĠĠ Ġif Ġ(! ks Class . instance Of ( className )) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠNoSuch ElementException (" The Ġvariable Ġ'$ variable Name ' Ġmust Ġbe ĠOk HttpClient ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcur Parent Ġ= Ġparent ĊĠĠĠ Ġwhile Ġ( cur Parent Ġis ĠK S Class Declaration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! cur Parent . is Public ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" The Ġclass Ġ'${ cur Parent . qualified Name ?. asString () }' Ġmust Ġbe Ġpublic " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNoSuch ElementException ( msg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcur Parent Ġ= Ġcur Parent . parent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ(! is Public ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠNoSuch ElementException (" The Ġvariable Ġ'$ variable Name ' Ġmust Ġbe Ġpublic ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( is Java () Ġ&& ĠModifier . JAVA _ STATIC Ġ! in Ġmodifiers ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠNoSuch ElementException (" The Ġvariable Ġ'$ variable Name ' Ġmust Ġbe Ġstatic ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( is Kotlin ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġparent ĊĠĠĠĠĠĠĠ Ġ// åľ¨ kt æĸĩä»¶ éĩĮ ï¼Į è¯´æĺİ æĺ¯ é¡¶ çº§ åıĺéĩı ï¼Į å±ŀ äºİ åĲĪ æ³ķ ï¼Į çĽ´æİ¥ è¿ĶåĽŀ ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġis ĠK S File ) Ġreturn ĊĠĠĠĠĠĠĠ Ġ// åľ¨ ä¼ ´ çĶŁ å¯¹è±¡ éĩĮéĿ¢ ï¼Į æĺ¯ åĲĪ æ³ķ çļĦ ï¼Į çĽ´æİ¥ è¿ĶåĽŀ ĊĠĠĠĠĠĠĠ Ġif Ġ(( parent Ġas ? ĠK S Class Declaration )?. is Companion Object Ġ== Ġtrue ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ(( parent Ġas ? ĠK S Class Declaration )?. class Kind Ġ!= ĠClass Kind . OBJECT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¿ħ éľĢè¦ģ å£°æĺİ åľ¨ object å¯¹è±¡ éĩĮ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNoSuch ElementException (" The Ġvariable Ġ'$ variable Name ' Ġmust Ġbe Ġdeclared Ġin Ġthe Ġobject ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }