package Ġgson path . adapter . standard . extension . invalid Ċ Ċ import Ġcom . squareup . jav ap o et .* Ċ import Ġgson path . Processing Exception Ċ import Ġgson path . adapter . Constants . G SON Ċ import Ġgson path . compiler . Extension Field Metadata Ċ import Ġgson path . compiler . Gson Path Extension Ċ import Ġgson path . extension . Remove Invalid Elements Util Ċ import Ġgson path . extension . annotation . Remove Invalid Elements Ċ import Ġgson path . model . Field Info Ċ import Ġgson path . model . FieldType Ċ import Ġgson path . util . Method Spec Ext Ċ import Ġgson path . util . assign Ċ import Ġgson path . util . code Block Ċ import Ġgson path . util . create Variable Ċ import Ġjavax . annotation . processing . Processing Environment Ċ Ċ class ĠRemove Invalid Elements Extension Ġ: ĠGson Path Extension Ġ{ ĊĠĠĠ Ġoverride Ġval Ġextension Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"' Remove Invalid Elements ' ĠAnnotation " ĊĊĠĠĠ Ġprivate Ġfun Ġverify Multiple Values FieldType ( field Info : ĠField Info ): ĠFieldType . Multiple Values Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( val ĠfieldType Ġ= Ġfield Info . fieldType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFieldType . Multiple Values Ġ-> ĠfieldType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠProcessing Exception ("@ Remove Invalid Elements Ġcan Ġonly Ġbe Ġused Ġwith Ġarrays Ġand Ġcollections ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Info . element ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Handle Field Read ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessing Environment : ĠProcessing Environment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension Field Metadata : ĠExtension Field Metadata ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġ( field Info ) Ġ= Ġextension Field Metadata ĊĠĠĠĠĠĠĠ Ġif Ġ( field Info . getAnnotation ( Remove Invalid Elements :: class . java ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify Multiple Values FieldType ( field Info ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Code Read Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessing Environment : ĠProcessing Environment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension Field Metadata : ĠExtension Field Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck If Result IsNull : ĠBoolean ): ĠGson Path Extension . Extension Result Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġ( field Info , Ġvariable Name ) Ġ= Ġextension Field Metadata ĊĊĠĠĠĠĠĠĠ Ġval Ġmultiple Values FieldType Ġ= Ġverify Multiple Values FieldType ( field Info ) ĊĠĠĠĠĠĠĠ Ġval Ġraw TypeName Ġ= ĠType Name . get ( multiple Values FieldType . elementType Mirror ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠGson Path Extension . Extension Result ( code Block Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtypeName Ġ= Ġfield Info . fieldType . typeName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( multiple Values FieldType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFieldType . Multiple Values . Array Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġassignment Ġ= Ġ"\ $ T . remove Invalid Elements Array (\ $ T . class , Ġ$ G SON , Ġin , Ġ\$ L )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray Func Type Ġ= Ġcreate Create Array Func Type Spec ( raw TypeName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check If Result IsNull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Variable ( typeName , Ġvariable Name , Ġassignment , ĠUT IL _ CLASS _ NAME , Ġraw TypeName , Ġarray Func Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassign ( variable Name , Ġassignment , ĠUT IL _ CLASS _ NAME , Ġraw TypeName , Ġarray Func Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFieldType . Multiple Values . Collection Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġassignment Ġ= Ġ"\ $ T . remove Invalid Elements List (\ $ T . class , Ġ$ G SON , Ġin )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check If Result IsNull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Variable ( typeName , Ġvariable Name , Ġassignment , ĠUT IL _ CLASS _ NAME , Ġraw TypeName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassign ( variable Name , Ġassignment , ĠUT IL _ CLASS _ NAME , Ġraw TypeName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRequired Ġto Ġallow Ġconverting Ġthe Ġlist Ġinto Ġan Ġarray . ĊĠĠĠĠ Ġ* ĠType Ġer asure Ġis Ġfun ! ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Create Array Func Type Spec ( array Type : ĠType Name ): ĠType Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction ClassName Ġ= ĠClass Name . get ( Remove Invalid Elements Util . Create Array Function :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn ĠType Spec . anonymous Class Builder ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Super interface ( Parameterized TypeName . get ( function ClassName , Ġarray Type )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Method ( Method Spec Ext . override Method Builder (" create Array ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. returns ( Array TypeName . of ( array Type )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġnew Ġ\$ T [ 0 ]", Ġarray Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠUT IL _ CLASS _ NAME Ġ= ĠClass Name . get ( Remove Invalid Elements Util :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ