/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠAnt on ĠNov ik au Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġb oring y uri . processor . ur ip art Ċ Ċ import Ġb oring y uri . processor . ext . create Method Signature Ċ import Ġb oring y uri . processor . ext . find Type Adapter Ċ import Ġb oring y uri . processor . ext . value Mirror Ċ import Ġb oring y uri . processor . type . Conversion Strategy Factory Ċ import Ġb oring y uri . processor . type . Query Conversion Strategy Ċ import Ġb oring y uri . processor . type . Type Converter Ċ import Ġb oring y uri . processor . util . Annotation Handler Ċ import Ġcom . squareup . jav ap o et . Code Block Ċ import Ġcom . squareup . jav ap o et . Field Spec Ċ import Ġcom . squareup . jav ap o et . Method Spec Ċ import Ġcom . squareup . jav ap o et . Parameter Spec Ċ import Ġjavax . lang . model . element . Executable Element Ċ import Ġjavax . lang . model . element . Variable Element Ċ Ċ interface ĠQuery Parameter Ġ{ ĊĊĠĠĠ Ġval Ġname : ĠString ĊĊĠĠĠ Ġfun Ġcreate Value Block ( type Converter : ĠType Converter ): ĠCode Block Ċ Ċ } Ċ Ċ interface ĠRead QueryParameter Ġ: ĠQuery Parameter Ġ{ ĊĊĠĠĠ Ġval Ġparam Field : ĠField Spec ĊĊĠĠĠ Ġfun Ġcreate Method Signature ( annotation Handler : ĠAnnotation Handler ): ĠMethod Spec . Builder Ċ Ċ } Ċ Ċ class ĠVariable Write QueryParameter ( ĊĠĠĠ Ġoverride Ġval Ġname : ĠString , ĊĠĠĠ Ġprivate Ġval Ġmethod Param : ĠParameter Spec , ĊĠĠĠ Ġprivate Ġval Ġparameter : ĠVariable Element , ĊĠĠĠ Ġprivate Ġval Ġnullable : ĠBoolean , ĊĠĠĠ Ġprivate Ġval ĠdefaultValue : ĠString ?, ĊĠĠĠ Ġprivate Ġval Ġbuilder Name : ĠString Ċ ) Ġ: ĠQuery Parameter Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Value Block ( type Converter : ĠType Converter ): ĠCode Block Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Adapter Ġ= Ġparameter . find Type Adapter ()?. value Mirror () ĊĊĠĠĠĠĠĠĠ Ġval Ġappend Query Block Ġ= ĠCode Block . builder () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Query Block . begin Control Flow (" if Ġ(\ $ N Ġ!= Ġnull )", Ġmethod Param ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġserialize Strategy Ġ= ĠConversion Strategy Factory . createQuery Strategy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter . as Type (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Adapter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Converter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġappend Query Block . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserialize Strategy . build Serialize Block ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Param ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( defaultValue Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Query Block . next Control Flow (" else ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Query Block . add Statement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ $ L . append QueryParameter (\ $ S , Ġ\$ S )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Query Block . end Control Flow () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġappend Query Block . build () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠVariable Read QueryParameter ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġparam Field : ĠField Spec , ĊĠĠĠ Ġuri Field : ĠField Spec , ĊĠĠĠ Ġnullable : ĠBoolean , ĊĠĠĠ Ġprivate Ġval ĠdefaultValue : ĠString ?, ĊĠĠĠ Ġprivate Ġval Ġparameter Element : ĠVariable Element Ċ ) Ġ: ĠBase Read QueryParameter ( name , Ġparam Field , Ġuri Field , Ġnullable , ĠdefaultValue ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Method Signature ( ĊĠĠĠĠĠĠĠ Ġannotation Handler : ĠAnnotation Handler ĊĠĠĠ Ġ): ĠMethod Spec . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparameter Element . create Method Signature ( defaultValue , Ġannotation Handler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Value Block ( type Converter : ĠType Converter ): ĠCode Block Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeserialize Strategy Ġ= ĠConversion Strategy Factory . createQuery Strategy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Element . as Type (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Element . find Type Adapter ()?. value Mirror (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Converter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Element ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Value Block ( deserialize Strategy ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠMethod Read QueryParameter ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġparam Field : ĠField Spec , ĊĠĠĠ Ġuri Field : ĠField Spec , ĊĠĠĠ Ġnullable : ĠBoolean , ĊĠĠĠ Ġprivate Ġval ĠdefaultValue : ĠString ?, ĊĠĠĠ Ġprivate Ġval Ġparameter Element : ĠExec utable Element Ċ ) Ġ: ĠBase Read QueryParameter ( name , Ġparam Field , Ġuri Field , Ġnullable , ĠdefaultValue ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Method Signature ( ĊĠĠĠĠĠĠĠ Ġannotation Handler : ĠAnnotation Handler ĊĠĠĠ Ġ): ĠMethod Spec . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparameter Element . create Method Signature ( defaultValue , Ġannotation Handler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Value Block ( type Converter : ĠType Converter ): ĠCode Block Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeserialize Strategy Ġ= ĠConversion Strategy Factory . createQuery Strategy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Element . returnType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Element . find Type Adapter ()?. value Mirror (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Converter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Element ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Value Block ( deserialize Strategy ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ abstract Ġclass ĠBase Read QueryParameter ( ĊĠĠĠ Ġoverride Ġval Ġname : ĠString , ĊĠĠĠ Ġoverride Ġval Ġparam Field : ĠField Spec , ĊĠĠĠ Ġprivate Ġval Ġuri Field : ĠField Spec , ĊĠĠĠ Ġprivate Ġval Ġnullable : ĠBoolean , ĊĠĠĠ Ġprivate Ġval ĠdefaultValue : ĠString ? Ċ ) Ġ: ĠRead QueryParameter Ġ{ ĊĊĠĠĠ Ġprotected Ġfun Ġcreate Value Block ( deserialize Strategy : ĠQuery Conversion Strategy ): ĠCode Block Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatement Ġ= ĠCode Block . builder () ĊĊĠĠĠĠĠĠĠ Ġstatement . add ( deserialize Strategy . build Read Raw Parameter Block ( name , Ġuri Field )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! nullable Ġ&& ĠdefaultValue Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . begin Control Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" if Ġ(\ $ L )", Ġdeserialize Strategy . build Check Raw Parameter Block () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . add Statement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" throw Ġnew Ġ\$ T (\ $ S Ġ+ Ġ\$ N )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNullPointerException :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCode Block . of (" Parameter Ġ'\ $ L ' Ġis Ġnot Ġprovided Ġto Ġ", Ġname ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri Field ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . end Control Flow () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . begin Control Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" if Ġ(\ $ L )", Ġdeserialize Strategy . build Check Raw Parameter Block () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( defaultValue Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . add Statement ("\ $ N Ġ= Ġnull ", Ġparam Field ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeserialize Strategy . build Deserialize Default Block ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam Field ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . next Control Flow (" else ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstatement . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeserialize Strategy . build Deserialize Block ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam Field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnullable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( nullable Ġ|| ĠdefaultValue Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . end Control Flow () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġstatement . build () ĊĠĠĠ Ġ} Ċ Ċ }