/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġ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 . javac Ċ Ċ import Ġandroidx . room . compiler . processing . X Basic Annotation Processor Ċ import Ġandroidx . room . compiler . processing . X Element Ċ import Ġandroidx . room . compiler . processing . XR ound Env Ċ import Ġcom . google . auto . common . Basic Annotation Processor Ċ import Ġcom . google . common . collect . Immutable Set Multimap Ċ import Ġjavax . annotation . processing . Round Environment Ċ import Ġjavax . lang . model . element . Element Ċ Ċ /** Ċ Ġ* ĠJ av ac Ġimplementation Ġof Ġa Ġ[ X Basic Annotation Processor ] Ġwith Ġbuilt - in Ġsupport Ġfor Ġvalidating Ġand Ċ Ġ* Ġdef erring Ġelements Ġvia Ġauto - common 's Ġ[ Basic Annotation Processor ]. Ċ Ġ*/ Ċ abstract Ġclass ĠJ av ac Basic Annotation Processor Ġ: ĊĠĠĠ ĠBasic Annotation Processor (), ĠX Basic Annotation Processor Ġ{ ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġsteps (): ĠIterable < Step > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠExecute Ġall Ġprocessing Ġsteps Ġin Ġa Ġsingle Ġauto - common ĠStep . ĠThis Ġis Ġdone Ġto Ġshare Ġthe ĊĠĠĠĠĠĠĠ Ġ// ĠX Processing Env Ġand Ġits Ġcached Ġacross Ġsteps Ġin Ġthe Ġsame Ġround . ĊĠĠĠĠĠĠĠ Ġval Ġsteps Ġ= Ġprocessing Steps () ĊĠĠĠĠĠĠĠ Ġval Ġparent Step Ġ= Ġobject Ġ: ĠStep Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġannotations () Ġ= Ġsteps . flatMap Ġ{ Ġit . annotations () Ġ}. toSet () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprocess ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelements By Annotation : ĠImmutable Set Multimap < String , ĠElement > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠSet < Element > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Env Ġ= ĠJ av ac Processing Env ( processing Env ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverted Elements By Annotation Ġ= Ġmutable Map Of < String , ĠSet < X Element >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotations (). forEach Ġ{ Ġannotation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconverted Elements By Annotation [ annotation ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelements By Annotation [ annotation ]. map NotNull Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Env . wrap Annotated Element ( element , Ġannotation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġsteps . flatMap Ġ{ Ġstep Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep . process ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenv Ġ= Ġx Env , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelements By Annotation Ġ= Ġstep . annotations (). associate With Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconverted Elements By Annotation [ it ] Ġ?: Ġempty Set () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresults . map Ġ{ Ġ( it Ġas ĠJ av ac Element ). element Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( parent Step ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġpost Round ( round Env : ĠRound Environment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDue Ġto ĠBasic Annotation Processor Ġtaking Ġover ĠAbstract Processor # process () Ġwe Ġcan 't ĊĠĠĠĠĠĠĠ Ġ// Ġshare Ġthe Ġsame ĠX Processing Env Ġfrom Ġthe Ġsteps , Ġbut Ġthat Ġmight Ġbe Ġok ... ĊĠĠĠĠĠĠĠ Ġval Ġx Env Ġ= ĠJ av ac Processing Env ( processing Env ) ĊĠĠĠĠĠĠĠ Ġval Ġx Round Ġ= ĠX Round Env . create ( x Env , Ġround Env ) ĊĠĠĠĠĠĠĠ Ġpost Round ( x Env , Ġx Round ) ĊĠĠĠ Ġ} Ċ }