/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ġandroidx . room . compiler . processing Ċ Ċ import Ġandroidx . room . compiler . processing . test code . Main Annotation Ċ import Ġandroidx . room . compiler . processing . test code . Other Annotation Ċ import Ġandroidx . room . compiler . processing . util . Source Ċ import Ġandroidx . room . compiler . processing . util . run Processor Test Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠX Annotation Box Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġread Simple An ot ation Value () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource . java ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" foo . bar . B az ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġfoo . bar ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ SuppressWarnings ({" warning 1 ", Ġ" warning Ġ 2 "}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠB az Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġrun Processor Test ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsources Ġ= ĠlistOf ( source ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġit . processing Env . require Type Element (" foo . bar . B az ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Box Ġ= Ġelement . to Annotation Box ( SuppressWarnings :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( annotation Box ). isNotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Box !!. value . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf (" warning 1 ", Ġ" warning Ġ 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtype Reference () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmy Source Ġ= ĠSource . java ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" foo . bar . B az ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġfoo . bar ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġandroidx . room . compiler . processing . test code . Main Annotation ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġandroidx . room . compiler . processing . test code . Other Annotation ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Main Annotation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype List Ġ= Ġ{ String . class , ĠInteger . class }, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Type Ġ= ĠLong . class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Method Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother Annotation Array Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Other Annotation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ" other Ġlist Ġ 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Other Annotation (" other Ġlist Ġ 2 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Other Annotation Ġ= Ġ@ Other Annotation (" other Ġsingle ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠB az Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġtarget Name Ġ= Ġ" foo . bar . B az " ĊĠĠĠĠĠĠĠ Ġrun Processor Test ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( my Source ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġit . processing Env . require Type Element ( target Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . to Annotation Box ( Main Annotation :: class ) !!. let Ġ{ Ġannotation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . getAs TypeList (" type List ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . processing Env . require Type ( java . lang . String :: class . java . canonical Name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . processing Env . require Type ( java . lang . Integer :: class . java . canonical Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . getAs Type (" single Type ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . processing Env . require Type ( java . lang . Long :: class . java . canonical Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( annotation . value . int Method ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . getAs Annotation Box < Other Annotation >(" single Other Annotation ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġother Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( other . value . value ). isEqualTo (" other Ġsingle ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . getAs Annotation Box Array < Other Annotation >(" other Annotation Array ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġbox Array Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( box Array ). has Length ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( box Array [ 0 ]. value . value ). isEqualTo (" other Ġlist Ġ 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( box Array [ 1 ]. value . value ). isEqualTo (" other Ġlist Ġ 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ