/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 , ĠPeter ĠV in cent Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 , ĠAndroid ĠPromise . Ċ Ġ* Ġ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 Ġpromise . database . compiler Ċ Ċ import Ġcom . squareup . jav ap o et . Annotation Spec Ċ import Ġcom . squareup . jav ap o et . ClassName Ċ import Ġcom . squareup . jav ap o et . Code Block Ċ import Ġpromise . database . compiler . utils . Log Util Ċ import Ġpromise . database . compiler . utils . get Database Version Ċ import Ġpromise . database . compiler . utils . getTable ClassName String Ċ import Ġpromise . database . compiler . utils . getTable Entities Ċ import Ġjavax . annotation . processing . Processing Environment Ċ import Ġjavax . lang . model . element . Element Ċ import Ġjavax . lang . model . element . Type Element Ċ import Ġkotlin . math . max Ċ Ċ class ĠDatabase Annotation Generator ( ĊĠĠĠ Ġprivate Ġval Ġprocessing Env : ĠProcessing Environment , ĊĠĠĠ Ġprivate Ġval Ġelement : ĠElement ) Ġ: ĠCode Generator < Annotation Spec > Ġ{ ĊĊĠ Ġoverride Ġfun Ġgenerate (): ĠAnnotation Spec Ġ{ ĊĠĠĠ Ġif Ġ( element Ġis ĠType Element ) Ġ{ ĊĠĠĠĠĠ Ġvar Ġstmt Ġ= Ġ" {\ n " ĊĠĠĠĠĠ Ġvar Ġentities : ĠArray < Type Element >? Ġ= Ġnull ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġentities Ġ= Ġelement . getTable Entities ( processing Env ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Util . e ( e ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġgenerated Version Ġ= ĠTable MetaData Writer . final Max Db Version () ĊĠĠĠĠĠ Ġval Ġversion Ġ= Ġmax ( element . get Database Version (), Ġgenerated Version ) ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġentities ?. forEach Indexed Ġ{ Ġindex , Ġentity Class Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġentity Class . getTable ClassName String () ĊĠĠĠĠĠĠĠĠĠ Ġstmt Ġ+= Ġ"$ className . class " ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġentities . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstmt Ġ+= Ġ", \ n " ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstmt Ġ+= Ġ"\ n }" ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Util . e ( e ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn ĠAnnotation Spec . builder ( ClassName . get (" promise . db ", Ġ" Database ")) ĊĠĠĠĠĠĠĠĠĠ Ġ. add Member (" tables ", ĠCode Block . of ( stmt )) ĊĠĠĠĠĠĠĠĠĠ Ġ. add Member (" version ", Ġ"$ version ") ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĠĠĠ Ġthrow ĠIllegalStateException (" Element Ġmust Ġbe Ġa Ġtype Ġelement ") ĊĠ Ġ} Ċ }