/* Ċ Ġ* Ġ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 . util . compiler . steps Ċ Ċ import Ġandroidx . room . compiler . processing . util . compiler . Diagnostics Message Collector Ċ import Ġandroidx . room . compiler . processing . util . compiler . Kotlin Cli Runner Ċ import Ġandroidx . room . compiler . processing . util . compiler . Test K sp Registrar Ċ import Ġandroidx . room . compiler . processing . util . compiler . to Source Set Ċ import Ġcom . google . devtools . k sp . K sp Options Ċ import Ġcom . google . devtools . k sp . processing . Symbol Processor Provider Ċ import Ġorg . jetbrains . kotlin . cli . common . ExitCode Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠRuns Ġthe ĠSymbol ĠProcess ors Ċ Ġ*/ Ċ internal Ġclass ĠK sp Compilation Step ( ĊĠĠĠ Ġprivate Ġval Ġsymbol Processor Providers : ĠList < Symbol Processor Provider >, ĊĠĠĠ Ġprivate Ġval Ġprocessor Options : ĠMap < String , ĠString > Ċ ) Ġ: ĠKotlin Compilation Step Ġ{ ĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ġ= Ġ" k sp " ĊĊĠĠĠ Ġprivate Ġfun Ġcreate K sp Options ( ĊĠĠĠĠĠĠĠ Ġworking Dir : ĠFile ĊĠĠĠ Ġ): ĠK sp Options . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠK sp Options . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . java Output Dir Ġ= Ġworking Dir . resolve ( JAVA _ OUT _ DIR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . kotlin Output Dir Ġ= Ġworking Dir . resolve ( K OT LIN _ OUT _ DIR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . processing Options . put All ( processor Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( ĊĠĠĠĠĠĠĠ Ġworking Dir : ĠFile , ĊĠĠĠĠĠĠĠ Ġarguments : ĠCompilation Step Arguments ĊĠĠĠ Ġ): ĠCompilation Step Result Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( symbol Processor Providers . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCompilation Step Result . skip ( arguments ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġk sp Messages Ġ= ĠDi agnostics Message Collector () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠKotlin Cli Runner . run Kotlin Cli ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= Ġarguments , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Dir Ġ= Ġworking Dir . resolve ( CLASS _ OUT _ FOLDER _ NAME ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugin Regist r ars Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest K sp Registrar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk sp Working Dir Ġ= Ġworking Dir . resolve (" k sp - compiler "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Options Ġ= Ġcreate K sp Options ( working Dir ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessor Providers Ġ= Ġsymbol Processor Providers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector Ġ= Ġk sp Messages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Sources Ġ= ĠlistOf NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworking Dir . resolve ( K OT LIN _ OUT _ DIR ). to Source Set (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworking Dir . resolve ( JAVA _ OUT _ DIR ). to Source Set (), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdiagnostics Ġ= Ġresolve Diagnostics ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostics Ġ= Ġresult . diagnostics Ġ+ Ġk sp Messages . get Diagnostics (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Sets Ġ= Ġarguments . source Sets Ġ+ Ġgenerated Sources ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠCompilation Step Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġresult . exit Code Ġ== ĠExit Code . OK , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerated Source Roots Ġ= Ġgenerated Sources , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostics Ġ= Ġdiagnostics , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Compiler Arguments Ġ= Ġarguments . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Sets Ġ= Ġarguments . source Sets Ġ+ Ġgenerated Sources ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Classpath Ġ= ĠlistOf ( result . compiled Classpath ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠJAVA _ OUT _ DIR Ġ= Ġ" generated Java " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠK OT LIN _ OUT _ DIR Ġ= Ġ" generated Kotlin " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCLASS _ OUT _ FOLDER _ NAME Ġ= Ġ" class - out " ĊĠĠĠ Ġ} Ċ }