package Ġcom . air bnb . e po xy Ċ Ċ import Ġandroid . support . annotation .* Ċ import Ġcom . air bnb . e po xy . Generated Model Writer . Companion . add On Mutation Call Ċ import Ġcom . air bnb . e po xy . Generated Model Writer . Companion . add Parameter Null Check IfNeeded Ċ import Ġcom . air bnb . e po xy . Generated Model Writer . Companion . set Bit Set IfNeeded Ċ import Ġcom . squareup . jav ap o et .* Ċ import Ġcom . squareup . jav ap o et . Method Spec .* Ċ import Ġjava . util .* Ċ import Ġjavax . lang . model . element . Modifier .* Ċ Ċ internal Ġclass ĠString Over load Writer ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmodel Info : ĠGenerated Model Info , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġattr : ĠAttribute Info , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġconfig Manager : ĠConfig Manager Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠfieldName : ĠString Ġ= Ġattr . getField Name () ĊĠĠĠ Ġprivate Ġval Ġnullable : ĠBoolean Ġ= Ġattr . has Set Null ability () Ġ&& Ġattr . is Nullable ĊĊĠĠĠ Ġfun Ġbuild Methods (): ĠList < Method Spec > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethods Ġ= ĠArrayList < Method Spec >() ĊĠĠĠĠĠĠĠ Ġmethods . add ( build Getter ()) ĊĊĠĠĠĠĠĠĠ Ġmethods . add ( finish Setter ( build CharSequence Setter ( base Setter ()))) ĊĠĠĠĠĠĠĠ Ġmethods . add ( finish Setter ( build String Res Setter ( base Setter ()))) ĊĠĠĠĠĠĠĠ Ġmethods . add ( finish Setter ( build String Res With Args Setter ( base Setter ()))) ĊĠĠĠĠĠĠĠ Ġmethods . add ( finish Setter ( build Quantity String Res Setter ( base Setter (" Quantity Res ")) )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmethods ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild CharSequence Setter ( builder : ĠBuilder ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparam Name Ġ= Ġattr . generated Setter Name () ĊĠĠĠĠĠĠĠ Ġval Ġparam Builder Ġ= ĠParameter Spec . builder ( CharSequence :: class . java , Ġparam Name ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam Builder . add Annotation ( Nullable :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam Builder . add Annotation ( NonNull :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd Java Doc ( builder , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġbuilder . add Parameter ( param Builder . build ()) ĊĊĠĠĠĠĠĠĠ Ġadd Parameter Null Check IfNeeded ( config Manager , Ġattr , Ġparam Name , Ġbuilder ) ĊĠĠĠĠĠĠĠ Ġbuilder . add Statement ("\ $ L . setValue (\ $ L )", ĠfieldName , Ġparam Name ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild String Res Setter ( builder : ĠBuilder ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . add Parameter ( Parameter Spec . builder ( TypeName . INT , ĠSTRING _ RES _ PARAM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Annotation ( String Res :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĊĠĠĠĠĠĠĠ Ġadd Java Doc ( builder , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġbuilder . add Statement ("\ $ L . setValue (\ $ L )", ĠfieldName , ĠSTRING _ RES _ PARAM ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild String Res With Args Setter ( builder : ĠBuilder ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . add Parameter ( Parameter Spec . builder ( TypeName . INT , ĠSTRING _ RES _ PARAM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Annotation ( String Res :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĊĠĠĠĠĠĠĠ Ġadd Java Doc ( builder , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġbuilder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder ( Array TypeName . of ( TypeName . OBJECT ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠARGS _ PARAM ). build ()) ĊĊĠĠĠĠĠĠĠ Ġbuilder . add Statement ("\ $ L . setValue (\ $ L , Ġ\$ L )", ĠfieldName , ĠSTRING _ RES _ PARAM , ĠARGS _ PARAM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. var args () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Quantity String Res Setter ( builder : ĠBuilder ): ĠBuilder Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbuilder . add Parameter ( Parameter Spec . builder ( TypeName . INT , ĠPL UR AL _ RES _ PARAM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Annotation ( Pl urals Res :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĊĠĠĠĠĠĠĠ Ġadd Java Doc ( builder , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġbuilder . add Parameter ( Parameter Spec . builder ( TypeName . INT , ĠQU ANT ITY _ PARAM ). build ()) ĊĊĠĠĠĠĠĠĠ Ġbuilder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder ( Array TypeName . of ( TypeName . OBJECT ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠARGS _ PARAM ). build ()) ĊĊĠĠĠĠĠĠĠ Ġbuilder . add Statement ("\ $ L . setValue (\ $ L , Ġ\$ L , Ġ\$ L )", ĠfieldName , ĠPL UR AL _ RES _ PARAM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQU ANT ITY _ PARAM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠARGS _ PARAM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. var args () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbase Setter ( suffix : ĠString Ġ= Ġ"") : ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġattr . generated Setter Name () Ġ+ Ġsuffix ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠMethod Spec . method Builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( PUBLIC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. returns ( model Info . parameter ized Generated Name ) ĊĊĠĠĠĠĠĠĠ Ġadd On Mutation Call ( builder ) ĊĠĠĠĠĠĠĠ Ġset Bit Set IfNeeded ( model Info , Ġattr , Ġbuilder ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Java Doc ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder : ĠBuilder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor String Res : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( attr . java Doc Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjava Doc Ġ= ĠCode Block . builder () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( for String Res ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( attr . isRequired ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Doc . add (" Throws Ġif Ġa Ġvalue Ġ<= Ġ 0 Ġis Ġset .\ n < p >\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Doc . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" If Ġa Ġvalue Ġof Ġ 0 Ġis Ġset Ġthen Ġthis Ġattribute Ġwill Ġrevert Ġto Ġits Ġdefault Ġvalue .\ n < p >\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder . add Javadoc ( java Doc . add ( attr . java Doc ). build ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Getter (): ĠMethod Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠMethod Spec . method Builder ( attr . generated Getter Name ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( PUBLIC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. returns ( CharSequence :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Annotation ( Nullable :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Annotations ( attr . get Getter Annotations ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( ClassNames . ANDROID _ CONTEXT , Ġ" context ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġ\$ L ", ĠfieldName Ġ+ Ġ". toString ( context )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPL UR AL _ RES _ PARAM Ġ= Ġ" plural Res " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSTRING _ RES _ PARAM Ġ= Ġ" string Res " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠARGS _ PARAM Ġ= Ġ" format Args " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠQU ANT ITY _ PARAM Ġ= Ġ" quantity " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfinish Setter ( builder : ĠMethod Spec . Builder ): ĠMethod Spec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuilder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġthis ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ