/* Ċ Ġ* ĠCopyright Ġ( c ) ĠFacebook , ĠInc . Ġand Ġits Ġaffiliates . Ċ Ġ* Ċ Ġ* ĠThis Ġsource Ġcode Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense Ġfound Ġin Ġthe Ċ Ġ* ĠLICENSE Ġfile Ġin Ġthe Ġroot Ġdirectory Ġof Ġthis Ġsource Ġtree . Ċ Ġ*/ Ċ Ċ package Ġcom . instagram . common . json . annotation . processor Ċ Ċ import Ġcom . google . testing . compile . Compilation Subject . assertThat Ċ import Ġcom . google . testing . compile . Compiler Ċ import Ġcom . google . testing . compile . Java File Objects Ċ import Ġjavax . tools . Java FileObject Ċ import Ġorg . junit . Test Ċ Ċ /** Ċ Ġ* ĠTesting Ġ[ Annotation Mirror Utils ] Ċ Ġ*/ Ċ class ĠJson Adapter Valid ations Test Ġ{ ĊĊĠ Ġprivate Ġval Ġmy Class : ĠJava FileObject Ġ= ĊĠĠĠĠĠ ĠJava File Objects . for Source Lines (" test . My Class ", Ġ""" ĊĠĠĠĠĊĠĠĠ Ġpackage Ġtest ; ĊĠĠĠĠĊĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . Json Field ; ĊĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . Json Type ; ĊĠĠĠĠĊĠĠĠ Ġ@ Json Type ĊĠĠĠ Ġclass ĠMy Class Ġ{ ĊĠĠĠĠĠ Ġ@ Json Field ( fieldName Ġ= Ġ" my _ enum ") ĊĠĠĠĠĠ ĠMy Enum Ġmy Enum ; ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠ Ġ""" . trim Indent ()) ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġsucceeds When Correct Annotation Usage () Ġ{ ĊĠĠĠ Ġval Ġcompilation Ġ= Ġcompile ( ĊĠĠĠĠĠĠĠ ĠJava File Objects . for Source Lines (" test . My Enum ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . FromJson ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . Json Adapter ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . ToJson ; ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Adapter ( adapter Class Ġ= ĠMy Enum . class ) ĊĠĠĠĠĠĠĠĠĠ Ġenum ĠMy Enum Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠONE (" one "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTWO (" two "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNONE (""); ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Ġm Server Value ; ĊĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Enum ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Server Value Ġ= Ġserver Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ FromJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠMy Enum Ġfrom Json ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( My Enum Ġmy Enum Ġ: Ġvalues ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Enum . m Server Value . equals ( server Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNONE ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ ToJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠString ĠtoJson ( My Enum Ġmy Enum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum . m Server Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent ())) ĊĊĠĠĠ ĠassertThat ( compilation ). succeeded () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġwarning When Enum DoesNot Have Json Adapter Annotation () Ġ{ ĊĠĠĠ Ġval Ġcompilation Ġ= Ġcompile ( ĊĠĠĠĠĠĠĠ ĠJava File Objects . for Source Lines (" test . My Enum ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . FromJson ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . Json Adapter ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . ToJson ; ĊĊĠĠĠĠĠĠĠĠĠ Ġenum ĠMy Enum Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠONE (" one "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTWO (" two "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNONE (""); ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Ġm Server Value ; ĊĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Enum ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Server Value Ġ= Ġserver Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ FromJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠMy Enum Ġfrom Json ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( My Enum Ġmy Enum Ġ: Ġvalues ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Enum . m Server Value . equals ( server Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNONE ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ ToJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠString ĠtoJson ( My Enum Ġmy Enum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum . m Server Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent ())) ĊĊĠĠĠ ĠassertThat ( compilation ) ĊĠĠĠĠĠĠĠ Ġ. had Warning Containing ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" test . My Class : ĠAnnot ate Ġthe Ġenum Ġwith Ġ@ Json Adapter Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( see Ġannotation Ġdocs Ġfor Ġdetails ). ĠIf Ġthat Ġis Ġun des irable Ġyou Ġmust Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" have Ġa Ġvalue Ġextract Ġformatter , Ġand Ġa Ġserialize Ġcode Ġformatter Ġif Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" serialization Ġgeneration Ġis Ġenabled ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġwarning When Missing FromJson Annotated Method () Ġ{ ĊĠĠĠ Ġval Ġcompilation Ġ= Ġcompile ( ĊĠĠĠĠĠĠĠ ĠJava File Objects . for Source Lines (" test . My Enum ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . FromJson ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . Json Adapter ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . ToJson ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Adapter ( adapter Class Ġ= ĠMy Enum . class ) ĊĠĠĠĠĠĠĠĠĠ Ġenum ĠMy Enum Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠONE (" one "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTWO (" two "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNONE (""); ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Ġm Server Value ; ĊĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Enum ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Server Value Ġ= Ġserver Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠMy Enum Ġfrom Json ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( My Enum Ġmy Enum Ġ: Ġvalues ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Enum . m Server Value . equals ( server Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNONE ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ ToJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠString ĠtoJson ( My Enum Ġmy Enum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum . m Server Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent ())) ĊĊĠĠĠ ĠassertThat ( compilation ) ĊĠĠĠĠĠĠĠ Ġ. had Warning Containing ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" test . My Enum : Ġmethod Ġwith Ġ@ FromJson Ġannotation Ġmust Ġbe Ġpresent ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġwarning When FromJson Method Has Incorrect ReturnType () Ġ{ ĊĠĠĠ Ġval Ġcompilation Ġ= Ġcompile ( ĊĠĠĠĠĠĠĠ ĠJava File Objects . for Source Lines (" test . My Enum ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . FromJson ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . Json Adapter ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . ToJson ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Adapter ( adapter Class Ġ= ĠMy Enum . class ) ĊĠĠĠĠĠĠĠĠĠ Ġenum ĠMy Enum Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠONE (" one "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTWO (" two "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNONE (""); ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Ġm Server Value ; ĊĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Enum ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Server Value Ġ= Ġserver Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ FromJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠObject Ġfrom Json ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( My Enum Ġmy Enum Ġ: Ġvalues ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Enum . m Server Value . equals ( server Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNONE ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ ToJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠString ĠtoJson ( My Enum Ġmy Enum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum . m Server Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent ())) ĊĊĠĠĠ ĠassertThat ( compilation ) ĊĠĠĠĠĠĠĠ Ġ. had Warning Containing ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ FromJson Ġmust Ġreturn Ġthe Ġcorrect Ġtype , Ġexpected Ġtype : Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" test . My Enum ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġwarning When FromJson Method Has More Than One Argument () Ġ{ ĊĠĠĠ Ġval Ġcompilation Ġ= Ġcompile ( ĊĠĠĠĠĠĠĠ ĠJava File Objects . for Source Lines (" test . My Enum ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . FromJson ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . Json Adapter ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . ToJson ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Adapter ( adapter Class Ġ= ĠMy Enum . class ) ĊĠĠĠĠĠĠĠĠĠ Ġenum ĠMy Enum Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠONE (" one "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTWO (" two "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNONE (""); ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Ġm Server Value ; ĊĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Enum ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Server Value Ġ= Ġserver Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ FromJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠMy Enum Ġfrom Json ( String Ġserver Value , ĠString Ġsecond Argument ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( My Enum Ġmy Enum Ġ: Ġvalues ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Enum . m Server Value . equals ( server Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNONE ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ ToJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠString ĠtoJson ( My Enum Ġmy Enum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum . m Server Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent ())) ĊĊĠĠĠ ĠassertThat ( compilation ) ĊĠĠĠĠĠĠĠ Ġ. had Warning Containing ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" test . My Enum : Ġ@ FromJson Ġmust Ġhave Ġexactly Ġone Ġparameter , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġjson Ġtype Ġexpected ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġwarning When Missing ToJson Annotated Method () Ġ{ ĊĠĠĠ Ġval Ġcompilation Ġ= Ġcompile ( ĊĠĠĠĠĠĠĠ ĠJava File Objects . for Source Lines (" test . My Enum ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . FromJson ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . Json Adapter ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . ToJson ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Adapter ( adapter Class Ġ= ĠMy Enum . class ) ĊĠĠĠĠĠĠĠĠĠ Ġenum ĠMy Enum Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠONE (" one "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTWO (" two "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNONE (""); ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Ġm Server Value ; ĊĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Enum ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Server Value Ġ= Ġserver Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ FromJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠMy Enum Ġfrom Json ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( My Enum Ġmy Enum Ġ: Ġvalues ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Enum . m Server Value . equals ( server Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNONE ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠString ĠtoJson ( My Enum Ġmy Enum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum . m Server Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent ())) ĊĊĠĠĠ ĠassertThat ( compilation ) ĊĠĠĠĠĠĠĠ Ġ. had Warning Containing ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" test . My Enum : Ġmethod Ġwith Ġ@ ToJson Ġannotation Ġmust Ġbe Ġpresent ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġwarning When ToJson Method Has More Than One Argument () Ġ{ ĊĠĠĠ Ġval Ġcompilation Ġ= Ġcompile ( ĊĠĠĠĠĠĠĠ ĠJava File Objects . for Source Lines (" test . My Enum ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . FromJson ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . Json Adapter ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . ToJson ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Adapter ( adapter Class Ġ= ĠMy Enum . class ) ĊĠĠĠĠĠĠĠĠĠ Ġenum ĠMy Enum Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠONE (" one "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTWO (" two "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNONE (""); ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Ġm Server Value ; ĊĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Enum ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Server Value Ġ= Ġserver Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ FromJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠMy Enum Ġfrom Json ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( My Enum Ġmy Enum Ġ: Ġvalues ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Enum . m Server Value . equals ( server Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNONE ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ ToJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠString ĠtoJson ( My Enum Ġmy Enum , ĠString Ġsecond Argument ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum . m Server Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent ())) ĊĊĠĠĠ ĠassertThat ( compilation ) ĊĠĠĠĠĠĠĠ Ġ. had Warning Containing ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" test . My Enum : Ġ@ ToJson Ġmust Ġhave Ġexactly Ġone Ġparameter , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġtype Ġof Ġthe Ġfield .") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġwarning When ToJson Method Has Wrong ReturnType () Ġ{ ĊĠĠĠ Ġval Ġcompilation Ġ= Ġcompile ( ĊĠĠĠĠĠĠĠ ĠJava File Objects . for Source Lines (" test . My Enum ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . FromJson ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . Json Adapter ; ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . instagram . common . json . annotation . ToJson ; ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Adapter ( adapter Class Ġ= ĠMy Enum . class ) ĊĠĠĠĠĠĠĠĠĠ Ġenum ĠMy Enum Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠONE (" one "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTWO (" two "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNONE (""); ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Ġm Server Value ; ĊĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Enum ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Server Value Ġ= Ġserver Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ FromJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠMy Enum Ġfrom Json ( String Ġserver Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( My Enum Ġmy Enum Ġ: Ġvalues ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Enum . m Server Value . equals ( server Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNONE ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ ToJson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠObject ĠtoJson ( My Enum Ġmy Enum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy Enum . m Server Value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent ())) ĊĊĠĠĠ ĠassertThat ( compilation ) ĊĠĠĠĠĠĠĠ Ġ. had Warning Containing ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ ToJson Ġmust Ġreturn Ġthe Ġcorrect Ġtype , Ġexpected Ġtype : Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" java . lang . String ") ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcompile ( file : ĠJava FileObject ) Ġ= ĠCompiler . javac () ĊĠĠĠĠĠ Ġ. with Processors ( Json Annotation Processor ()) ĊĠĠĠĠĠ Ġ. compile ( my Class , Ġfile ) Ċ } Ċ