package Ġgson path . adapter . standard . adapter . write Ċ Ċ import Ġcom . squareup . jav ap o et . Code Block Ċ import Ġcom . squareup . jav ap o et . Parameterized TypeName Ċ import Ġcom . squareup . jav ap o et . TypeName Ċ import Ġcom . squareup . jav ap o et . Type Spec Ċ import Ġgson path . Processing Exception Ċ import Ġgson path . adapter . Adapter Method Builder Ċ import Ġgson path . adapter . Constants . GET _ ADAPTER Ċ import Ġgson path . adapter . Constants . G SON Ċ import Ġgson path . adapter . Constants . NULL Ċ import Ġgson path . adapter . Constants . OUT Ċ import Ġgson path . adapter . Constants . VALUE Ċ import Ġgson path . adapter . standard . extension . Extensions Handler Ċ import Ġgson path . adapter . standard . model . Gson Array Ċ import Ġgson path . adapter . standard . model . Gson Field Ċ import Ġgson path . adapter . standard . model . Gson Object Ċ import Ġgson path . internal . Gson Util Ċ import Ġgson path . model . FieldType Ċ import Ġgson path . util .* Ċ Ċ /** Ċ Ġ* Ġpublic Ġvoid Ġwrite ( Json Writer Ġout , ĠImage Sizes Ġvalue ) Ġthrows ĠIOException Ġ{ Ċ Ġ*/ Ċ class ĠWrite Functions ( private Ġval Ġextensions Handler : ĠExtensions Handler ) Ġ{ ĊĠĠĠ Ġ@ Throws ( Processing Exception :: class ) ĊĠĠĠ Ġfun Ġhandle Write ( type Spec Builder : ĠType Spec . Builder , Ġparams : ĠWrite Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtype Spec Builder . add Method ( Adapter Method Builder . create Write Method Builder ( params . element ClassName ). apply And Build Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment (" Begin ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Gson Field Writer ( params . root Elements , Ġparams . serialize Null s , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Processing Exception :: class ) ĊĠĠĠ Ġprivate Ġfun ĠCode Block . Builder . write Gson Field Writer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Mapping : ĠGson Object , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserialize Null s : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite KeyName : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Path : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Field Count : ĠInt Ġ= Ġ 0 ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġadd Statement ("$ OUT . begin Object () ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġjson Mapping . entries () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( current Field Count ) Ġ{ Ġfield Count , Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGson Object Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Object ( value , Ġfield Count , Ġserialize Null s , Ġcurrent Path , Ġkey , Ġwrite KeyName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGson Field Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Field ( value , Ġfield Count , Ġserialize Null s , Ġkey , Ġwrite KeyName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGson Array Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Array ( value , Ġfield Count , Ġserialize Null s , Ġcurrent Path , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment (" End Ġ$ current Path ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement ("$ OUT . end Object () ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCode Block . Builder . handle Object ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue : ĠGson Object , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Count : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserialize Null s : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Path : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite KeyName : ĠBoolean ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( value . size () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield Count ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Path Ġ= Ġcurrent Path Ġ+ Ġkey ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġcomment Ġmention ing Ġwhat Ġnested Ġobject Ġwe Ġare Ġcurrent Ġpointing Ġat . ĊĠĠĠĠĠĠĠ Ġnew Line () ĊĠĠĠĠĠĠĠ Ġcomment (" Begin Ġ$ new Path ") ĊĠĠĠĠĠĠĠ Ġadd Statement (""" $ OUT . name ("$ key ") """) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwrite Gson Field Writer ( value , Ġserialize Null s , Ġwrite KeyName , Ġnew Path , Ġfield Count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCode Block . Builder . handle Field ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue : ĠGson Field , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Count : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserialize Null s : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite KeyName : ĠBoolean ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġfield Info Ġ= Ġvalue . field Info ĊĠĠĠĠĠĠĠ Ġval Ġfield TypeName Ġ= Ġfield Info . fieldType . typeName ĊĠĠĠĠĠĠĠ Ġval Ġis Primitive Ġ= Ġfield Info . fieldType Ġis ĠFieldType . Primitive ĊĠĠĠĠĠĠĠ Ġval Ġfield Accessor Ġ= Ġfield Info . field Accessor ĊĠĠĠĠĠĠĠ Ġval Ġobject Name Ġ= Ġ" obj $ field Count " ĊĊĠĠĠĠĠĠĠ Ġcreate Variable ( field TypeName , Ġobject Name , Ġ"$ VALUE .$ field Accessor ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( write KeyName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Esc aped Statement (""" $ OUT . name ("$ key ") """) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Field ( value , Ġobject Name , Ġfield TypeName ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( serialize Null s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSince Ġwe Ġare Ġserial izing Ġnull s , Ġwe Ġdefer Ġthe Ġif - statement Ġuntil Ġafter Ġthe Ġname Ġis Ġwritten . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( write KeyName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Esc aped Statement (""" $ OUT . name ("$ key ") """) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Without Close ("$ objectName Ġ!= Ġ$ NULL ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Field ( value , Ġobject Name , Ġfield TypeName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` else ` Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement ("$ OUT . null Value () ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` if ` ("$ objectName Ġ!= Ġ$ NULL ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( write KeyName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Esc aped Statement (""" $ OUT . name ("$ key ") """) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Field ( value , Ġobject Name , Ġfield TypeName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnew Line () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfield Count Ġ+ Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCode Block . Builder . handle Array ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgson Array : ĠGson Array , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Field Count : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserialize Null s : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Path : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠString ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġnew Line () ĊĠĠĠĠĠĠĠ Ġcomment (" Begin ĠArray : Ġ'$ current Path .$ key '") ĊĠĠĠĠĠĠĠ Ġadd Statement (""" out . name ("$ key ") """) ĊĠĠĠĠĠĠĠ Ġadd Statement (" out . begin Array () ") ĊĠĠĠĠĠĠĠ Ġnew Line () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ( 0 .. gson Array . max Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( current Field Count ) Ġ{ Ġprevious Field Count , Ġarray Index Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Path : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Path . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ key [$ array Index ]" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ current Path .$ key [$ array Index ]" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġarray Element Ġ= Ġgson Array [ array Index ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġany Ġempty Ġarray Ġitems Ġif Ġrequired . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" out . null Value (); Ġ// ĠSet ĠValue : Ġ'$ new Path '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Line () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Field Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGson Field Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Line () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment (" Set ĠValue : Ġ'$ new Path '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Field ( array Element , Ġprevious Field Count , Ġserialize Null s , Ġkey , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGson Object Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Line () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment (" Begin ĠObject : Ġ'$ new Path '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Gson Field Writer ( array Element , Ġserialize Null s , Ġtrue , Ġnew Path , Ġprevious Field Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment (" End ĠArray : Ġ'$ key '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement (" out . end Array () ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCode Block . Builder . writeField ( value : ĠGson Field , Ġobject Name : ĠString , Ġfield TypeName : ĠType Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextensions Handler . can Handle Field Write ( value , Ġobject Name ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextensions Handler . execute Field Write ( value , Ġobject Name ) Ġ{ Ġextension Name , Ġwrite Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment (" Extension Ġ( Write ) Ġ- Ġ$ extension Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( write Result . code Block ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield TypeName Ġis ĠParameter ized TypeName Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement ("$ GET _ ADAPTER ( new Ġcom . google . gson . reflect . Type Token < \$ T >() {} ). write ($ OUT , Ġ$ objectName )", Ġfield TypeName . box ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field TypeName . is Primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement ("$ GET _ ADAPTER (\ $ T . class ). write ($ OUT , Ġ$ objectName )", Ġfield TypeName . box ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement ("\ $ T . write With Generic Adapter ($ G SON , Ġ$ objectName . getClass (), Ġ$ OUT , Ġ$ objectName )", ĠGson Util :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }