/* Ċ Ġ* Ġ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 . processor Ċ Ċ import ĠCOMMON Ċ import Ġandroidx . room . Database Processing Step Ċ import Ġandroidx . room . Rewrite Queries To Drop Unused Columns Ċ import Ġandroidx . room . compiler . processing . util . Compilation Result Subject Ċ import Ġandroidx . room . compiler . processing . util . Source Ċ import Ġandroidx . room . compiler . processing . util . run Processor Test Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠRemove Unused Columns Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġno Annotation G ives Warning () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompile Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . has Warning Containing (" The Ġquery Ġreturns Ġsome Ġcolumns Ġ[ uid , Ġage Column ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . has Warning Count ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġannotate Method () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotate Method Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . has No Warnings () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġannotate Dao () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotate Dao Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . has No Warnings () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġannotate Db () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotate Db Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . has No Warnings () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġexpand Projection _ annotate Db () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotate Db Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Expand Projection Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . has Warning Containing ( Processor Errors . EXPAND _ PRO JECTION _ AL ONG _ WITH _ REMOVE _ UNUSED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . has Warning Count ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġexpand Projection _ annotate Method () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotate Method Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Expand Projection Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . has Warning Containing ( Processor Errors . EXPAND _ PRO JECTION _ AL ONG _ WITH _ REMOVE _ UNUSED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . has Warning Count ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġexpand Projection _ annotate Dao () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotate Dao Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Expand Projection Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . has Warning Containing ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProcessor Errors . EXPAND _ PRO JECTION _ AL ONG _ WITH _ REMOVE _ UNUSED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . has Warning Count ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompile ( ĊĠĠĠĠĠĠĠ Ġannotate Db : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġannotate Dao : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġannotate Method : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġenable Expand Projection : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġvalidate : Ġ( Compilation Result Subject ) Ġ-> ĠUnit , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsources Ġ= Ġdao ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotate Dao Ġ= Ġannotate Dao , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotate Db Ġ= Ġannotate Db , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotate Method Ġ= Ġannotate Method ĊĠĠĠĠĠĠĠ Ġ) Ġ+ ĠCOMMON . USER ĊĊĠĠĠĠĠĠĠ Ġrun Processor Test ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsources Ġ= Ġsources , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Processing Step Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDatabase Processing Step () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" room . expand Projection " Ġto Ġenable Expand Projection . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . generated SourceFile With Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" foo / bar / My Dao _ Impl . java " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . generated SourceFile With Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" foo / bar / My Db _ Impl . java " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdao ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotate Db : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotate Dao : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotate Method : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ): ĠList < Source > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġannotation Text ( enabled : ĠBoolean ) Ġ= Ġif Ġ( enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ ${ Rewrite Queries To Drop Unused Columns :: class . java . canonical Name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpo jo Ġ= ĠSource . java ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" foo . bar . Po jo ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġfoo . bar ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠPo jo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠString Ġname ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠString ĠlastName ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdao Ġ= ĠSource . java ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" foo . bar . My Dao ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġfoo . bar ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġandroidx . room .*; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Dao ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ annotation Text ( annotate Dao )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġinterface ĠMy Dao Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ annotation Text ( annotate Method )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Query (" SELECT Ġ* ĠFROM ĠUser ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġjava . util . List < Po jo > Ġload All (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Ġ= ĠSource . java ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" foo . bar . My Db ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġfoo . bar ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġandroidx . room .*; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Database ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentities Ġ= Ġ{ User . class }, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexport Schema Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ annotation Text ( annotate Db )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Ġclass ĠMy Db Ġextends ĠRoom Database Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Ġpublic ĠMy Dao Ġget Dao (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( pojo , Ġdao , Ġdb ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }