/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 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 Ġcom . android . gradle . replic ator . generator Ċ Ċ import Ġjava . io . File Ċ import Ġkotlin . system . exit Process Ċ Ċ class ĠMain Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint Usage () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġparse Args ( args ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGenerator ( params ). generate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġparse Args ( args : ĠArray < String >): ĠExecution Params Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlet 's Ġbe Ġbasic Ġhere Ġfor Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠExecution Params () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ< Ġargs . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġoption Ġ= Ġargs [ index ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- destination ", Ġ"- d " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . destination Ġ= ĠFile ( args [ index + 1 ]). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . exists (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Location Ġfor Ġoption Ġ% option Ġdoes Ġnot Ġexist : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- structure ", Ġ"- s " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . json File Ġ= ĠFile ( args [ index + 1 ]). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . exists (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Location Ġfor Ġoption Ġ% option Ġdoes Ġnot Ġexist : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- filter - libraries ", Ġ"- f " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . library Filter Ġ= ĠFile ( args [ index + 1 ]). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . exists (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Location Ġfor Ġoption Ġ% option Ġdoes Ġnot Ġexist : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- add - libraries ", Ġ"- a " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . library Add itions Ġ= ĠFile ( args [ index + 1 ]). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . exists (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Location Ġfor Ġoption Ġ% option Ġdoes Ġnot Ġexist : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException (" Unknown Ġoption : Ġ$ option ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( params . isValid ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Not Ġall Ġparameters Ġhave Ġbeen Ġprovided ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġprint Usage () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGradle ĠProject ĠGenerator . ĠUsage : ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgradle w [ . bat ] Ġgenerator : run Ġ-- structure Ġ< file > Ġ-- destination Ġ< folder > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- s , Ġ-- structure : Ġthe Ġlocation Ġof Ġa Ġjson Ġfile Ġgenerated Ġby Ġthe ĠStructure ĠExtract or ĠGradle ĠPlugin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- d , Ġ-- destination : Ġthe Ġfolder Ġwhere Ġto Ġwrite Ġthe Ġproject . ĠThe Ġfolder Ġmust Ġexist Ġand Ġbe Ġempty . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- f , Ġ-- filter - libraries : Ġa Ġfile Ġcontaining Ġa Ġlist Ġof Ġlibraries Ġto Ġfilter Ġor Ġreplace ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFormat Ġfor Ġremoval Ġis Ġone Ġline Ġper Ġmaven Ġcoordinates Ġto Ġremove ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTo Ġreplace Ġa Ġlibrary , Ġadd Ġ" Ġ-> Ġ< coordinate Ġto Ġreplace Ġwith >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- d , Ġ-- add - libraries : Ġa Ġfile Ġcontaining Ġlibraries Ġto Ġadd Ġto Ġspecific Ġsub - projects . ĠLine Ġformat Ġis : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< module path >< space >< configuration Ġname >< space >< dependency Ġstring > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠExecution Params : ĠGenerator . Params Ġ{ ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġjson File : ĠFile ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġdestination : ĠFile ĊĠĠĠ Ġoverride Ġvar Ġlibrary Filter : ĠFile ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġvar Ġlibrary Add itions : ĠFile ? Ġ= Ġnull ĊĊĠĠĠ Ġfun ĠisValid (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! :: json File . isInitialized ) Ġthrow ĠRuntimeException (" structure Ġfile Ġlocation Ġhas Ġnot Ġbeen Ġprovider ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! :: destination . isInitialized ) Ġthrow ĠRuntimeException (" destination Ġlocation Ġhas Ġnot Ġbeen Ġprovider ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( destination . list Files (). isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow Ġjava . lang . RuntimeException (" Destination Ġlocation Ġis Ġnot Ġempty : Ġ$ destination ") ĊĠĠĠ Ġ} Ċ } Ċ