/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 . ĠU ber ĠTechnologies Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . uber . crumb . integration . compiler Ċ Ċ import Ġcom . google . common . collect . Immutable Set Ċ import Ġcom . google . common . truth . Truth . assert About Ċ import Ġcom . google . testing . compile . Java File Objects Ċ import Ġcom . google . testing . compile . Java Sources Subject Ċ import Ġcom . google . testing . compile . Java Sources Subject Factory . java Sources Ċ import Ġcom . uber . crumb . Cr umb Processor Ċ import Ġorg . junit . Test Ċ import Ġjavax . tools . Java FileObject Ċ Ċ class ĠM oshi Support Test Ġ{ ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġgenerates Json Adapter Factory () Ġ{ ĊĠĠĠ Ġval Ġsource 1 Ġ= ĠJava File Objects . for Source String (" test . Foo ", Ġ""" Ċ package Ġtest ; Ċ import Ġcom . uber . crumb . annotations . Cr umb Consum able ; Ċ import Ġcom . squareup . mos hi . Json Adapter ; Ċ import Ġcom . squareup . mos hi . M oshi ; Ċ @ Cr umb Consum able Ġpublic Ġabstract Ġclass ĠFoo Ġ{ ĊĠ Ġpublic Ġstatic ĠJson Adapter < Foo > Ġjson Adapter ( M oshi Ġm oshi ) Ġ{ ĊĠĠĠ Ġreturn Ġnull ; ĊĠ Ġ} ĊĠ Ġpublic Ġabstract ĠString ĠgetName (); ĊĠ Ġpublic Ġabstract Ġboolean Ġis Awesome (); Ċ } """) ĊĊĠĠĠ Ġval Ġsource 2 Ġ= ĠJava File Objects . for Source String (" test . Bar ", Ġ""" Ċ package Ġtest ; Ċ import Ġcom . uber . crumb . annotations . Cr umb Consum able ; Ċ import Ġcom . squareup . mos hi . Json Adapter ; Ċ import Ġcom . squareup . mos hi . M oshi ; Ċ @ Cr umb Consum able Ġpublic Ġabstract Ġclass ĠBar Ġ{ ĊĠ Ġpublic Ġstatic ĠJson Adapter < Bar > Ġjson Adapter ( M oshi Ġm oshi ) Ġ{ ĊĠĠĠ Ġreturn Ġnull ; ĊĠ Ġ} ĊĠ Ġpublic Ġabstract ĠString ĠgetName (); Ċ } """) ĊĊĠĠĠ Ġ// ĠParam - less Ġadapter Ġmethod ĊĠĠĠ Ġval Ġsource 3 Ġ= ĠJava File Objects . for Source String (" test . B az ", Ġ""" Ċ package Ġtest ; Ċ import Ġcom . uber . crumb . annotations . Cr umb Consum able ; Ċ import Ġcom . squareup . mos hi . Json Adapter ; Ċ @ Cr umb Consum able Ġpublic Ġabstract Ġclass ĠB az Ġ{ ĊĠ Ġpublic Ġstatic ĠJson Adapter < B az > Ġjson Adapter () Ġ{ ĊĠĠĠ Ġreturn Ġnull ; ĊĠ Ġ} ĊĠ Ġpublic Ġabstract ĠString ĠgetName (); Ċ } """) ĊĠĠĠ Ġ// ĠFactory Ġmethod ĊĠĠĠ Ġval Ġsource 4 Ġ= ĠJava File Objects . for Source String (" test . B az Factory ", Ġ""" Ċ package Ġtest ; Ċ import Ġcom . uber . crumb . annotations . Cr umb Consum able ; Ċ import Ġcom . squareup . mos hi . Json Adapter ; Ċ @ Cr umb Consum able Ġpublic Ġabstract Ġclass ĠB az Factory Ġ{ ĊĠ Ġpublic Ġstatic ĠJson Adapter . Factory Ġfactory () Ġ{ ĊĠĠĠ Ġreturn Ġnull ; ĊĠ Ġ} ĊĠ Ġpublic Ġabstract ĠString ĠgetName (); Ċ } """) ĊĊĠĠĠ Ġval Ġsource 5 Ġ= ĠJava File Objects . for Source String (" test . My Adapter Factory ", Ġ""" Ċ package Ġtest ; Ċ import Ġcom . squareup . mos hi . Json Adapter ; Ċ import Ġcom . uber . crumb . integration . annotations . M oshi Factory ; Ċ @ M oshi Factory ( M oshi Factory . Type . PRO DU CER ) Ċ public Ġabstract Ġclass ĠMy Adapter Factory Ġ{ ĊĠ Ġpublic Ġstatic ĠJson Adapter . Factory Ġcreate () Ġ{ ĊĠĠĠ Ġreturn Ġnew ĠM oshi Producer _ My Adapter Factory (); ĊĠ Ġ} Ċ } """) ĊĊĠĠĠ Ġval Ġexpected Ġ= ĠJava File Objects . for Source String (" test . Auto Value M oshi _ My Adapter Factory ", Ġ""" Ċ package Ġtest ; Ċ Ċ import Ġcom . squareup . mos hi . Json Adapter ; Ċ import Ġcom . squareup . mos hi . M oshi ; Ċ import Ġjava . lang . Override ; Ċ import Ġjava . lang . annotation . Annotation ; Ċ import Ġjava . lang . reflect . Type ; Ċ import Ġjava . util . Set ; Ċ import Ġjavax . annotation . Nullable ; Ċ Ċ final Ġclass ĠM oshi Producer _ My Adapter Factory Ġimplements ĠJson Adapter . Factory Ġ{ ĊĠ Ġ@ Nullable ĊĠ Ġ@ Override ĊĠ Ġpublic ĠJson Adapter <?> Ġcreate ( Type Ġtype , ĠSet <? Ġextends ĠAnnotation > Ġannotations , ĠM oshi Ġm oshi ) Ġ{ ĊĠĠĠ Ġif Ġ(! annotations . isEmpty ()) Ġreturn Ġnull ; ĊĠĠĠ Ġif Ġ( type . equals ( Foo . class )) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠFoo . json Adapter ( mos hi ); ĊĠĠĠ Ġ} Ġelse Ġif Ġ( type . equals ( Bar . class )) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠBar . json Adapter ( mos hi ); ĊĠĠĠ Ġ} Ġelse Ġif Ġ( type . equals ( B az . class )) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠB az . json Adapter (); ĊĠĠĠ Ġ} ĊĠĠĠ ĠJson Adapter <?> Ġadapter ; ĊĠĠĠ Ġif Ġ(( adapter Ġ= Ġtest . B az Factory . factory (). create ( type , Ġannotations , Ġm oshi )) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġadapter ; ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull ; ĊĠ Ġ} Ċ } """) ĊĠĠĠ Ġassert About < Java Sources Subject , ĠIterable < Java FileObject >>( java Sources ()). that ( ĊĠĠĠĠĠĠĠ ĠImmutable Set . of ( source 1 , Ġsource 2 , Ġsource 3 , Ġsource 4 , Ġsource 5 )) ĊĠĠĠĠĠĠĠ Ġ. processed With ( Cr umb Processor ( listOf ( M oshi Support ()))) ĊĠĠĠĠĠĠĠ Ġ. comp iles Without Error () ĊĠĠĠĠĠĠĠ Ġ. and () ĊĠĠĠĠĠĠĠ Ġ. gener ates Sources ( expected ) ĊĠ Ġ} Ċ } Ċ