package Ġcom . d eng jian . annotation practice . my ret rofit Ċ Ċ import Ġcom . d eng jian . annotation practice . my ret rofit . annotation . Field Ċ import Ġcom . d eng jian . annotation practice . my ret rofit . annotation . GET Ċ import Ġcom . d eng jian . annotation practice . my ret rofit . annotation . POST Ċ import Ġcom . d eng jian . annotation practice . my ret rofit . annotation . Query Ċ import Ġokhttp 3 . Call Ċ import Ġokhttp 3 . Form Body Ċ import Ġokhttp 3 . Http Url Ċ import Ġokhttp 3 . Request Ċ import Ġjava . lang . reflect . Method Ċ Ċ class ĠService Method ( builder : ĠBuilder ) Ġ{ ĊĠĠĠ Ġinternal Ġvar ĠbaseUrl : ĠHttp Url ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġcall Factory : ĠCall . Factory ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġhttp Method : ĠString ? Ġ= Ġbuilder . http Method ĊĠĠĠ Ġinternal Ġvar Ġurl Builder : ĠHttp Url . Builder ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġform Build : ĠForm Body . Builder ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġrelative Url : ĠString ? Ġ= Ġbuilder . relative Url ĊĠĠĠ Ġprivate Ġval Ġhas Body : ĠBoolean Ġ= Ġbuilder . has Body ĊĠĠĠ Ġprivate Ġval Ġparameter Handler Ġ= Ġbuilder . parameter Handler ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠbaseUrl Ġ= Ġbuilder . my Ret rofit . baseUrl ĊĠĠĠĠĠĠĠ Ġcall Factory Ġ= Ġbuilder . my Ret rofit . call Factory ĊĊĠĠĠĠĠĠĠ Ġif Ġ( has Body ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġform Build Ġ= ĠForm Body . Builder (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġinvoke ( args : ĠArray < Any >): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( baseUrl ) Ġ{ Ġ" baseUrl Ġrequired !" Ġ} ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( relative Url ) Ġ{ Ġ" URL Ġparams Ġrequired !" Ġ} ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ 1 Ġ Ġ å¤ĦçĲĨ è¯·æ±Ĥ çļĦ åľ°åĿĢ ä¸İ åıĤæķ° ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġparameter Handler . forEach Ġ{ Ġhandler Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . apply ( this @ Service Method , Ġargs [ index ]. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ æľĢç»Ī è¯·æ±Ĥ åľ°åĿĢ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġurl Builder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Builder Ġ= ĠbaseUrl !!. newBuilder ( relative Url ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( url Builder ) Ġ{ Ġ" Url Builder Ġfailed !" Ġ} ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( http Method ) Ġ{ Ġ" http Method Ġcan Ġnot Ġbe Ġnull !" Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġurl Builder !!. build () ĊĊĠĠĠĠĠĠĠ Ġ// Ġè¯·æ±Ĥ ä½ĵ ĊĠĠĠĠĠĠĠ Ġval Ġform Body Ġ= Ġform Build ?. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url ( url ). method ( http Method !! , Ġform Body ). build () ĊĠĠĠĠĠĠĠ Ġreturn Ġcall Factory ?. new Call ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġget è¯·æ±Ĥ , Ġ ĠæĬ Ĭ Ġk - v Ġæĭ ¼ åĪ° url éĩĮéĿ¢ ĊĠĠĠ Ġfun Ġadd QueryParameter ( key : ĠString , Ġvalue : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( baseUrl ) Ġ{ Ġ" baseUrl Ġrequired !" Ġ} ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( relative Url ) Ġ{ Ġ" URL Ġparams Ġrequired !" Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( url Builder Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Builder Ġ= ĠbaseUrl !!. newBuilder ( relative Url ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġurl Builder !!. add QueryParameter ( key , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPost ĠĠ ĠæĬ Ĭ k - v Ġ æĶ¾ åĪ° Ġè¯·æ±Ĥ ä½ĵ ä¸Ń ĊĠĠĠ Ġfun Ġadd File d Parameter ( key : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( form Build ) Ġ{ Ġ" post Ġmust Ġhas Ġform Build !" Ġ} ĊĠĠĠĠĠĠĠ Ġform Build !!. add ( key , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBuilder ( val Ġmy Ret rofit : ĠMy Ret rofit , Ġprivate Ġval Ġmethod : ĠMethod ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġparameter Handler Ġ= ĠArrayList < Parameter Handler >() ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġhttp Method : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġrelative Url : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġhas Body : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ æĸ¹æ³ķ ä¸ĬçļĦ æīĢæľīçļĦ æ³¨è§£ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmethod Annotations : ĠArray < Annotation > Ġ= Ġmethod . annotations ĊĠĠĠĠĠĠĠ Ġ// Ġ èİ·å¾Ĺ æĸ¹æ³ķ åıĤæķ° çļĦ æīĢæľīçļĦ æ³¨è§£ Ġ( ä¸Ģä¸ª åıĤæķ° åı¯ä»¥ æľī å¤ļä¸ª æ³¨è§£ , ä¸Ģä¸ª æĸ¹æ³ķ åıĪ ä¼ļ æľī å¤ļä¸ª åıĤæķ° ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġparameter Annotations : ĠArray < Array < Annotation >> Ġ= Ġmethod . parameter Annotations ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠService Method Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 Ġ è§£æŀĲ æĸ¹æ³ķ ä¸ĬçļĦ æ³¨è§£ , Ġåıª å¤ĦçĲĨ POST ä¸İ GET ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Annotations . forEach Ġ{ Ġmethod Annotation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( method Annotation Ġis ĠPOST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è®°å½ķ å½ĵåīį è¯·æ±Ĥ æĸ¹å¼ı ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Method Ġ= Ġ" POST " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è®°å½ķ è¯·æ±Ĥ url çļĦ path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Url Ġ= Ġmethod Annotation . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Body Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( method Annotation Ġis ĠGET ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è®°å½ķ å½ĵåīį è¯·æ±Ĥ æĸ¹å¼ı ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Method Ġ= Ġ" GET " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è®°å½ķ è¯·æ±Ĥ url çļĦ path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Url Ġ= Ġmethod Annotation . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Body Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 2 Ġ è§£æŀĲ æĸ¹æ³ķ åıĤæķ° çļĦ æ³¨è§£ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlen Ġ= Ġparameter Annotations . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 . until ( len )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä¸Ģä¸ª åıĤæķ° ä¸ĬçļĦ æīĢæľīçļĦ æ³¨è§£ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotations Ġ= Ġparameter Annotations [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤ĦçĲĨ åıĤæķ° ä¸ĬçļĦ æ¯ı ä¸Ģä¸ª æ³¨è§£ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . forEach Ġ{ Ġannotation -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// todo Ġåı¯ä»¥ åĬł ä¸Ģä¸ª åĪ¤æĸŃ : å¦Ĥæŀľ http Method æĺ¯ get è¯·æ±Ĥ , çİ°åľ¨ åıĪ è§£æŀĲ åĪ° File d æ³¨è§£ , åı¯ä»¥ æıĲç¤º ä½¿çĶ¨ èĢħ ä½¿çĶ¨ Query æ³¨è§£ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotation Ġis ĠField ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¾ĹåĪ° æ³¨è§£ ä¸ĬçļĦ value : Ġè¯·æ±Ĥ åıĤæķ° çļĦ key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan Value Ġ= Ġannotation . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Handler . add ( Parameter Handler . File d Parameter Handler ( an Value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( annotation Ġis ĠQuery ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan Value Ġ= Ġannotation . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Handler . add ( Parameter Handler . QueryParameter Handler ( an Value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠService Method ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }