/* Ċ Ġ* ĠĠĠ ĠCopyright Ġ 2 0 1 8 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* ĠĠĠ ĠCopyright Ġ 2 0 1 8 ĠTh under head Ċ Ġ* Ċ Ġ* ĠĠĠ Ġ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 . arch in amon . utils Ċ Ċ import Ġcom . android . build . gradle . Base Plugin Ċ import Ġcom . android . build . gradle . internal . scope . Variant Scope Ċ import Ġcom . android . build . gradle . internal . variant . Base Variant Data Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . file . File Collection Ċ import Ġorg . gradle . api . internal . file . collections . Simple File Collection Ċ import Ġorg . gradle . api . tasks . compile . Java Compile Ċ import Ġjava . io . File Ċ Ċ fun Ġget Java Task ( base Variant Data : ĠBase Variant Data ): ĠJava Compile ? Ġ{ ĊĠĠĠ Ġif Ġ( base Variant Data . javac Task Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbase Variant Data . javac Task ĊĠĠĠ Ġ} Ġelse Ġif Ġ( base Variant Data . java Compiler Task Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbase Variant Data . java Compiler Task Ġas ĠJava Compile ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ fun Ġget Aj Source And Exclude From J av ac ( project : ĠProject , Ġvariant Data : ĠBase Variant Data ): ĠFile Collection Ġ{ ĊĠĠĠ Ġval Ġjava Task Ġ= Ġget Java Task ( variant Data ) ĊĊĠĠĠ Ġval Ġfl avors : ĠList < String >? Ġ= Ġvariant Data . variant Configuration . product Fl avors . map Ġ{ Ġflavor Ġ-> Ġflavor . name Ġ} ĊĠĠĠ Ġval Ġsrc Set Ġ= Ġmutable ListOf (" main ", Ġvariant Data . variant Configuration !!. build Type !!. name ) ĊĠĠĠ Ġfl avors ?. let Ġ{ Ġsrc Set . addAll ( it ) Ġ} ĊĊĠĠĠ Ġval Ġsrc Dirs Ġ= Ġsrc Set . map Ġ{ Ġ" src /$ it / aspect j " Ġ} ĊĠĠĠ Ġval Ġaspects : ĠFile Collection Ġ= ĠSimple File Collection ( src Dirs . map Ġ{ Ġproject . file ( it ) Ġ}) ĊĊĠĠĠ Ġjava Task !!. exclude Ġ{ Ġtree Elem Ġ-> ĊĠĠĠĠĠĠĠ Ġtree Elem . file Ġin Ġaspects . files ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġaspects . filter ( File :: exists ) Ċ } Ċ Ċ fun Ġfind Aj Sources For Variant ( project : ĠProject , Ġvariant Name : ĠString ): ĠMutable Set < File > Ġ{ ĊĠĠĠ Ġval Ġpossible Dirs : ĠMutable Set < File > Ġ= Ġmutable Set Of () ĊĠĠĠ Ġif Ġ( project . file (" src / main / aspect j "). exists ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġpossible Dirs . add ( project . file (" src / main / aspect j ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtypes Ġ= Ġvariant Name . split (" (? = \\ p { Upper }) ". to Regex ()) ĊĠĠĠ Ġval Ġroot Ġ= Ġproject . file (" src "). list Files () ĊĊĠĠĠ Ġroot . forEach Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠ Ġtypes . forEach Ġ{ Ġtype Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . name . contains ( type . toLowerCase ()) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . list (). any Ġ{ Ġit . contains (" aspect j ") Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Dirs . add ( File ( file , Ġ" aspect j ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠLinked HashSet ( possible Dirs ) Ċ } Ċ Ċ fun Ġget Variant DataList ( plugin : ĠBase Plugin ): ĠList < Base Variant Data > Ġ{ ĊĠĠĠ Ġreturn Ġplugin . variant Manager . variant Scopes . map ( Variant Scope :: get Variant Data ) Ċ } Ċ Ċ internal Ġin fix Ġfun Ġ< E > ĠMutable Collection < in ĠE >. sh l ( elem : ĠE ): ĠMutable Collection < in ĠE > Ġ{ ĊĠĠĠ Ġthis . add ( elem ) ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ internal Ġin fix Ġfun Ġ< E > ĠMutable Collection < in ĠE >. from ( elems : ĠCollection < E >) Ġ{ ĊĠĠĠ Ġthis . addAll ( elems ) Ċ }