/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 Ġ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 . build . metal ava Ċ Ċ import Ġandroidx . build . check api . Api Location Ċ import Ġandroidx . build . java . Java Compile Inputs Ċ import Ġorg . gradle . api . Gradle Exception Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . artifacts . Configuration Ċ import Ġorg . gradle . api . file . File Collection Ċ import Ġjava . io . File Ċ Ċ // ĠMet al ava Runner Ġstores Ġcommon Ġconfiguration Ġfor Ġexecuting ĠMet al ava Ċ Ċ fun ĠProject . get Metal ava Configuration (): ĠConfiguration Ġ{ ĊĠĠĠ Ġreturn Ġconfigurations . find ByName (" metal ava ") Ġ?: Ġconfigurations . create (" metal ava ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdependency Ġ= Ġdependencies . create (" com . android : metal ava : 1 . 3 . 0 : shadow @ jar ") ĊĠĠĠĠĠĠĠ Ġit . dependencies . add ( dependency ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠProject . run Metal ava With Args ( configuration : ĠConfiguration , Ġargs : ĠList < String >) Ġ{ ĊĠĠĠ Ġjava exec Ġ{ ĊĠĠĠĠĠĠĠ Ġit . classpath Ġ= ĠcheckNotNull ( configuration ) Ġ{ Ġ" Configuration Ġnot Ġset ." Ġ} ĊĠĠĠĠĠĠĠ Ġit . main Ġ= Ġ" com . android . tools . metal ava . Driver " ĊĠĠĠĠĠĠĠ Ġit . args Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- no - banner " ĊĠĠĠĠĠĠĠ Ġ) Ġ+ Ġargs ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠAPI _ L INT _ ARGS : ĠList < String > Ġ= ĠlistOf ( ĊĠĠĠ Ġ"-- api - lint ", ĊĠĠĠ Ġ"-- hide ", ĊĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġlist Ġof Ġchecks Ġthat Ġare Ġhidden Ġas Ġthey Ġare Ġnot Ġuseful Ġin Ġandroidx ĊĠĠĠĠĠĠĠ Ġ" Enum ", Ġ// ĠEnums Ġare Ġallowed Ġto Ġbe Ġuse Ġin Ġandroidx ĊĠĠĠĠĠĠĠ Ġ" Callback Interface ", Ġ// ĠWith Ġtarget ĠJava Ġ 8 , Ġwe Ġhave Ġdefault Ġmethods ĊĠĠĠĠĠĠĠ Ġ" Hidden Super class ", Ġ// ĠWe Ġallow Ġhaving Ġa Ġhidden Ġparent Ġclass ĊĠĠĠĠĠĠĠ Ġ" Protected Member ", Ġ// ĠWe Ġallow Ġusing Ġprotected Ġmembers Ġin Ġandroidx ĊĠĠĠĠĠĠĠ Ġ" Manager Lookup ", Ġ// ĠMan agers Ġin Ġandroidx Ġare Ġnot Ġthe Ġsame Ġas Ġpl at from Ġservices ĊĠĠĠĠĠĠĠ Ġ" Manager Constructor ", ĊĊĠĠĠĠĠĠĠ Ġ// ĠList Ġof Ġchecks Ġthat Ġhave Ġbugs , Ġbut Ġshould Ġbe Ġenabled Ġonce Ġfixed . ĊĠĠĠĠĠĠĠ Ġ" Getter Setter Names ", Ġ// Ġb / 1 3 5 4 9 8 0 3 9 ĊĠĠĠĠĠĠĠ Ġ" Static Utils ", Ġ// Ġb / 1 3 5 4 8 9 0 8 3 ĊĠĠĠĠĠĠĠ Ġ" All Upper ", Ġ// Ġb / 1 3 5 7 0 8 4 8 6 ĊĠĠĠĠĠĠĠ Ġ" Start With Lower ", Ġ// Ġb / 1 3 5 7 1 0 5 2 7 ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġlist Ġof Ġchecks Ġthat Ġare ĠAPI Ġlint Ġwarnings Ġand Ġare Ġyet Ġto Ġbe Ġenabled ĊĠĠĠĠĠĠĠ Ġ" MinMax Constant ", ĊĠĠĠĠĠĠĠ Ġ" Intent Builder Name ", ĊĠĠĠĠĠĠĠ Ġ" On Name Expected ", ĊĠĠĠĠĠĠĠ Ġ" TopLevel Builder ", ĊĠĠĠĠĠĠĠ Ġ" Missing Build ", ĊĠĠĠĠĠĠĠ Ġ" Builder Set Style ", ĊĠĠĠĠĠĠĠ Ġ" Setter Returns This ", ĊĠĠĠĠĠĠĠ Ġ" Package Layer ing ", ĊĠĠĠĠĠĠĠ Ġ" Over lapping Constants ", ĊĠĠĠĠĠĠĠ Ġ" IllegalStateException ", ĊĠĠĠĠĠĠĠ Ġ" Listener Last ", ĊĠĠĠĠĠĠĠ Ġ" Executor Registration ", ĊĠĠĠĠĠĠĠ Ġ" Stream Files ", ĊĠĠĠĠĠĠĠ Ġ" Parcelable List ", ĊĠĠĠĠĠĠĠ Ġ" Abstract Inner ", ĊĠĠĠĠĠĠĠ Ġ" Not Closeable ", ĊĠĠĠĠĠĠĠ Ġ" Array Return ", ĊĠĠĠĠĠĠĠ Ġ" User Handle ", ĊĠĠĠĠĠĠĠ Ġ" User Handle Name ", ĊĠĠĠĠĠĠĠ Ġ" MethodName Tense ", ĊĠĠĠĠĠĠĠ Ġ" Use I cu ", ĊĠĠĠĠĠĠĠ Ġ" No Byte Or Short ", ĊĠĠĠĠĠĠĠ Ġ" Common Args First ", ĊĠĠĠĠĠĠĠ Ġ" Sam ShouldBe Last ", ĊĠĠĠĠĠĠĠ Ġ" Missing Jvm Static " ĊĠĠĠ Ġ). join ToString () Ċ ) Ċ Ċ sealed Ġclass ĠGenerate Api Mode Ġ{ ĊĠĠĠ Ġobject ĠPublic Api Ġ: ĠGenerate Api Mode () ĊĠĠĠ Ġobject ĠRe stricted Api Ġ: ĠGenerate Api Mode () Ċ } Ċ Ċ sealed Ġclass ĠApi Lint Mode Ġ{ ĊĠĠĠ Ġclass ĠCheck Baseline ( val Ġapi Lint Baseline : ĠFile ) Ġ: ĠApi Lint Mode () ĊĠĠĠ Ġobject ĠSkip Ġ: ĠApi Lint Mode () Ċ } Ċ Ċ // ĠGenerates Ġall Ġof Ġthe Ġspecified Ġapi Ġfiles Ċ fun ĠProject . generate Api ( ĊĠĠĠ Ġfiles : ĠJava Compile Inputs , ĊĠĠĠ Ġapi Location : ĠApi Location , ĊĠĠĠ Ġtemp Dir : ĠFile , ĊĠĠĠ Ġapi Lint Mode : ĠApi Lint Mode , ĊĠĠĠ Ġinclude Restricted Apis : ĠBoolean Ċ ) Ġ{ ĊĠĠĠ Ġgenerate Api ( files . boot Classpath , Ġfiles . dependency Classpath , Ġfiles . source Paths , ĊĠĠĠĠĠĠĠ Ġapi Location . public Api File , Ġtemp Dir , ĠGenerate Api Mode . Public Api , Ġapi Lint Mode ) ĊĠĠĠ Ġif Ġ( include Restricted Apis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgenerate Api ( files . boot Classpath , Ġfiles . dependency Classpath , Ġfiles . source Paths , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Location . restricted Api File , Ġtemp Dir , ĠGenerate Api Mode . Restricted Api , ĠApi Lint Mode . Skip ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠGenerates Ġthe Ġspecified Ġapi Ġfile Ċ fun ĠProject . generate Api ( ĊĠĠĠ Ġboot Classpath : ĠCollection < File >, ĊĠĠĠ Ġdependency Classpath : ĠFile Collection , ĊĠĠĠ Ġsource Paths : ĠCollection < File >, ĊĠĠĠ ĠoutputFile : ĠFile , ĊĠĠĠ Ġtemp Dir : ĠFile , ĊĠĠĠ Ġgenerate Api Mode : ĠGenerate Api Mode , ĊĠĠĠ Ġapi Lint Mode : ĠApi Lint Mode Ċ ) Ġ{ ĊĠĠĠ Ġval Ġtemp OutputFile Ġ= Ġif Ġ( generate Api Mode Ġis ĠGenerate Api Mode . Restricted Api ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ( temp Dir , ĠoutputFile . name Ġ+ Ġ". tmp ") ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠoutputFile ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġgenerate Ġpublic ĠAPI Ġtxt ĊĠĠĠ Ġval Ġargs Ġ= Ġmutable ListOf ("-- classpath ", ĊĠĠĠĠĠĠĠ Ġ( boot Classpath Ġ+ Ġdependency Classpath . files ). join ToString ( File . path Separator ), ĊĊĠĠĠĠĠĠĠ Ġ"-- source - path ", ĊĠĠĠĠĠĠĠ Ġsource Paths . filter Ġ{ Ġit . exists () Ġ}. join ToString ( File . path Separator ), ĊĊĠĠĠĠĠĠĠ Ġ"-- api ", ĊĠĠĠĠĠĠĠ Ġtemp OutputFile . toString (), ĊĊĠĠĠĠĠĠĠ Ġ"-- format = v 3 ", ĊĠĠĠĠĠĠĠ Ġ"-- output - kotlin - null s = yes " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġwhen Ġ( generate Api Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠGenerate Api Mode . Public Api Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠGenerate Api Mode . Restricted Api Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs Ġ+= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- show - annotation ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android x . annotation . Restrict To ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- show - un annotated " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġwhen Ġ( api Lint Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠApi Lint Mode . Check Baseline Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs Ġ+= ĠAPI _ L INT _ ARGS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Lint Mode . api Lint Baseline . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs Ġ+= ĠlistOf ("-- baseline ", Ġapi Lint Mode . api Lint Baseline . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . addAll ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- error ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" De precation Mismatch " Ġ// ĠEn force Ġdeprecation Ġmismatch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠApi Lint Mode . Skip Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . addAll ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- hide ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" De precation Mismatch ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- hide ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Un hidden System Api ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- hide ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" References Hidden " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmetal ava Configuration Ġ= Ġget Metal ava Configuration () ĊĠĠĠ Ġrun Metal ava With Args ( metal ava Configuration , Ġargs ) ĊĊĠĠĠ Ġif Ġ( generate Api Mode Ġis ĠGenerate Api Mode . Restricted Api ) Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Restrict To Library Lines ( temp OutputFile , ĠoutputFile ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġuntil Ġb / 1 1 9 6 1 7 1 4 7 Ġis Ġdone , Ġremove Ġlines Ġcontaining Ġ"@ Restrict To ( android x . annotation . Restrict To . Scope . LIBRARY )" Ċ private Ġfun Ġremove Restrict To Library Lines ( inputFile : ĠFile , ĠoutputFile : ĠFile ) Ġ{ ĊĠĠĠ Ġval Ġoutput Builder Ġ= ĠStringBuilder () ĊĠĠĠ Ġval Ġlines Ġ= Ġinput File . read Lines () ĊĠĠĠ Ġvar Ġskip Scope Until : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġfor Ġ( line Ġin Ġlines ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġskip Ġ= Ġline . contains ("@ Restrict To ( android x . annotation . Restrict To . Scope . LIBRARY )") ĊĠĠĠĠĠĠĠ Ġif Ġ( skip Ġ&& Ġline . endsWith ("{ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġskip Scope Until Ġ= Ġline . common Prefix With (" ĠĠĠ Ġ") Ġ+ Ġ" }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! skip Ġ&& Ġskip Scope Until Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Builder . append ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Builder . append ("\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( line Ġ== Ġskip Scope Until ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġskip Scope Until Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( skip Scope Until Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠGradle Exception (" Skipping Ġuntil Ġ`$ skip Scope Until `, Ġbut Ġfound ĠEOF ") ĊĠĠĠ Ġ} ĊĠĠĠ ĠoutputFile . write Text ( output Builder . toString ()) Ċ } Ċ