/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 4 Ġ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 . build . gradle . internal Ċ Ċ import Ġcom . android . build . gradle . internal . core . Variant Dsl Info Builder . Companion . get Builder Ċ import Ġcom . android . build . gradle . internal . core . Variant Dsl Info Builder . Companion . compute Source SetName Ċ import Ġcom . android . build . api . variant . impl . Variant Builder Impl Ċ import Ġcom . android . build . gradle . options . Project Options Ċ import Ġcom . android . build . gradle . internal . manifest . Lazy Manifest Parser Ċ import Ġcom . android . build . gradle . internal . core . Variant Dsl Info Ċ import Ġcom . android . build . api . attributes . Product Flavor Attr Ċ import Ġcom . android . builder . core . Abstract Product Flavor . Dimension Request Ċ import Ġcom . android . build . gradle . Tested Android Config Ċ import Ġjava . lang . RuntimeException Ċ import Ġcom . android . build . gradle . internal . api . Default Android Source Set Ċ import Ġcom . android . build . gradle . internal . core . Variant Dsl Info Builder Ċ import Ġcom . android . build . gradle . internal . core . Variant Dsl Info Impl Ċ import Ġcom . android . build . api . component . Component Identity Ċ import Ġcom . android . build . gradle . internal . profile . Analytics Configurator Service Ċ import Ġcom . android . build . gradle . internal . dependency . Variant Dependencies Builder Ċ import Ġcom . android . build . api . artifact . impl . Artifacts Impl Ċ import Ġcom . android . build . api . variant . Android Test Ċ import Ġcom . android . build . api . component . Test Fixtures Ċ import Ġcom . android . build . api . component . UnitTest Ċ import Ġcom . android . build . api . component . impl . Test Component Impl Ċ import Ġcom . android . build . api . component . impl . Test Fixtures Impl Ċ import Ġcom . android . build . api . dsl . Common Extension Ċ import Ġcom . android . build . api . dsl . Tested Extension Ċ import Ġcom . android . build . api . variant . Variant Extension Config Ċ import Ġcom . android . build . api . extension . impl . Variant Api Operations Registrar Ċ import Ġcom . android . build . api . variant . Has Android Test Builder Ċ import Ġcom . android . build . api . variant . Has Test Fixtures Builder Ċ import Ġcom . android . build . gradle . internal . pipeline . Transform Manager Ċ import Ġcom . android . build . api . variant . Variant Ċ import Ġcom . android . build . api . variant . Variant Builder Ċ import Ġcom . android . build . api . variant . impl . Has Android Test Ċ import Ġcom . android . build . api . variant . impl . Has Test Fixtures Ċ import Ġcom . android . build . api . variant . impl . Variant Impl Ċ import Ġcom . android . build . gradle . Base Extension Ċ import Ġcom . android . build . gradle . internal . crash . External Api Usage Exception Ċ import Ġcom . android . builder . errors . Issue Reporter Ċ import Ġjava . util . Locale Ċ import Ġcom . android . build . gradle . internal . profile . Analytics Util Ċ import Ġcom . android . builder . core . Variant Type Impl Ċ import Ġcom . android . build . gradle . internal . api . ReadOnly Object Provider Ċ import Ġcom . android . build . gradle . internal . api . Variant Filter Ċ import Ġcom . android . build . gradle . internal . dsl . Base App Module Extension Ċ import Ġcom . android . build . gradle . internal . dsl . Build Type Ċ import Ġcom . android . build . gradle . internal . dsl . Default Config Ċ import Ġcom . android . build . gradle . internal . dsl . Product Flavor Ċ import Ġcom . android . build . gradle . internal . dsl . Signing Config Ċ import Ġcom . android . build . gradle . internal . scope . Build Feature Values Ċ import Ġcom . android . build . gradle . internal . scope . Global Scope Ċ import Ġcom . android . build . gradle . internal . scope . Mutable Task Container Ċ import Ġcom . android . build . gradle . internal . scope . Variant Scope Ċ import Ġcom . android . build . gradle . internal . scope . Variant Scope Impl Ċ import Ġcom . android . build . gradle . internal . services . Project Services Ċ import Ġcom . android . build . gradle . internal . services . Task Creation Services Ċ import Ġcom . android . build . gradle . internal . services . Task Creation Services Impl Ċ import Ġcom . android . build . gradle . internal . services . Variant Api Services Ċ import Ġcom . android . build . gradle . internal . services . Variant Api Services Impl Ċ import Ġcom . android . build . gradle . internal . services . Variant Properties Api Services Impl Ċ import Ġcom . android . build . gradle . internal . services . get Build Service Ċ import Ġcom . android . build . gradle . internal . test Fixtures . test Fixtures Feature Name Ċ import Ġcom . android . build . gradle . internal . variant . Component Info Ċ import Ġcom . android . build . gradle . internal . variant . Dimension Combination Ċ import Ġcom . android . build . gradle . internal . variant . Dimension Combin ator Ċ import Ġcom . android . build . gradle . internal . variant . Test Fixtures Variant Data Ċ import Ġcom . android . build . gradle . internal . variant . Test Variant Data Ċ import Ġcom . android . build . gradle . internal . variant . Tested Variant Data Ċ import Ġcom . android . build . gradle . internal . variant . Variant Component Info Ċ import Ġcom . android . build . gradle . internal . variant . Variant Factory Ċ import Ġcom . android . build . gradle . internal . variant . Variant Input Model Ċ import Ġcom . android . build . gradle . internal . variant . Variant Path Helper Ċ import Ġcom . android . build . gradle . options . Boolean Option Ċ import Ġcom . android . build . gradle . options . Signing Options Ċ import Ġcom . android . builder . core . Variant Type Ċ import Ġcom . android . builder . dex ing . is Legacy Multi Dex Mode Ċ import Ġcom . google . common . collect . Lists Ċ import Ġcom . google . common . collect . Maps Ċ import Ġcom . google . wire less . android . sdk . stats . ApiVersion Ċ import Ġcom . google . wire less . android . sdk . stats . Gradle Build Variant Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . attributes . Attribute Ċ import Ġorg . gradle . api . internal . Generated Subclass Ċ import Ġorg . gradle . api . provider . Provider Ċ import Ġjava . io . File Ċ import Ġjava . util . function . Boolean Supplier Ċ import Ġjava . util . stream . Collectors Ċ Ċ /** ĠClass Ġto Ġcreate , Ġmanage Ġvariants . Ġ Ġ*/ Ċ @ Suppress (" Un stable Api Usage ") Ċ class ĠVariant Manager < Common Extension T : ĠCommon Extension < *, Ġ*, Ġ*, Ġ* >, ĠVariant Builder T Ġ: ĠVariant Builder Impl , ĠVariant T Ġ: ĠVariant Impl >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġglobal Scope : ĠGlobal Scope , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġproject Options : ĠProject Options , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġd sl Extension : ĠCommon Extension T , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġvariant Api Operations Registrar : ĠVariant Api Operations Registrar < ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Extension < *, Ġ*, Ġ*, Ġ* >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVariant Builder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVariant , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ>, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġvariant Factory : ĠVariant Factory < Variant Builder T , ĠVariant T >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġvariant Input Model : ĠVariant Input Model < Default Config , ĠBuild Type , ĠProduct Flavor , ĠSign ing Config >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġproject Services : ĠProject Services ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġvariant Api Services : ĠVariant Api Services ĊĠĠĠ Ġprivate Ġval Ġvariant Properties Api Services : ĠVariant Properties Api Services Impl ĊĠĠĠ Ġprivate Ġval Ġtask Creation Services : ĠTask Creation Services ĊĠĠĠ Ġprivate Ġval Ġvariant Filter : ĠVariant Filter ĊĠĠĠ Ġprivate Ġval Ġvariants : ĠMutable List < Component Info < Variant Builder T , ĠVariant T >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLists . newArrayList () ĊĠĠĠ Ġprivate Ġval Ġlazy Manifest Parser Map : ĠMutable Map < File , ĠLazy Manifest Parser > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaps . new HashMap With Expected Size ( 3 ) ĊĠĠĠ Ġprivate Ġval Ġsigning Override : ĠSign ing Config ? ĊĊĠĠĠ Ġ// ĠWe Ġcannot Ġuse Ġgradle 's Ġstate Ġof Ġexecuted Ġas Ġthat Ġreturns Ġtrue Ġwhile Ġinside Ġafter Eval ute . ĊĠĠĠ Ġ// ĠW ew Ġwant Ġthis Ġto Ġonly Ġbe Ġtrue Ġafter Ġall Ġtasks Ġhave Ġbeen Ġcreate . ĊĠĠĠ Ġprivate Ġvar Ġhas Created Tasks Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġlist Ġof Ġall Ġmain Ġcomponents . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ. create Variants ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġmain Components : ĠList < Component Info < Variant Builder T , ĠVariant T >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġvariants ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġlist Ġof Ġall Ġtest Ġcomponents . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ. create Variants ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtest Components : ĠMutable List < Test Component Impl > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLists . newArrayList () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġlist Ġof Ġall Ġtest Ġfixtures Ġcomponents . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtest Fixtures Components : ĠMutable List < Test Fixtures Impl > Ġ= ĠLists . newArrayList () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġthe Ġvariants . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbuild Feature Values Ġthe Ġbuild Ġfeature Ġvalue Ġinstance ĊĠĠĠĠ Ġ* Ġ@ param Ġd sl Namespace Ġthe Ġnamespace Ġfrom Ġthe Ġandroid Ġextension ĠDSL ĊĠĠĠĠ Ġ* Ġ@ param Ġd sl Test Namespace Ġthe Ġtest Namespace Ġfrom Ġthe Ġandroid Ġextension ĠDSL ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Variants ( ĊĠĠĠĠĠĠĠ Ġbuild Feature Values : ĠBuild Feature Values , ĊĠĠĠĠĠĠĠ Ġd sl Namespace : ĠString ?, ĊĠĠĠĠĠĠĠ Ġd sl Test Namespace : ĠString ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvariant Factory . validate Model ( variant Input Model ) ĊĠĠĠĠĠĠĠ Ġvariant Factory . pre Variant Work ( project ) ĊĠĠĠĠĠĠĠ Ġcompute Variants ( build Feature Values , Ġd sl Namespace , Ġd sl Test Namespace ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO Ġ: ĠShould Ġreturn ĠCommon Extension T Ġinstead Ġof ĠBase Extension ĊĠĠĠ Ġval Ġextension : ĠBase Extension ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġd sl Extension Ġas ĠBase Extension ĊĊĠĠĠ Ġprivate Ġfun Ġget Flavor Selection ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info : ĠVariant Dsl Info < *> ): ĠMap < Attribute < Product Flavor Attr >, ĠProduct Flavor Attr > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= Ġproject . objects ĊĠĠĠĠĠĠĠ Ġreturn Ġvariant Dsl Info . missing Dimension Str ategies . entries . stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollect ors . toMap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġentry : ĠMap . Entry < String , ĠDimension Request > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttribute . of ( entry . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProduct Flavor Attr :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġentry : ĠMap . Entry < String , ĠDimension Request > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfactory . named ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProduct Flavor Attr :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . value . requested ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġall Ġvariants . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbuild Feature Values Ġthe Ġbuild Ġfeature Ġvalue Ġinstance ĊĠĠĠĠ Ġ* Ġ@ param Ġd sl Namespace Ġthe Ġnamespace Ġfrom Ġthe Ġandroid Ġextension ĠDSL ĊĠĠĠĠ Ġ* Ġ@ param Ġd sl Test Namespace Ġthe Ġtest Namespace Ġfrom Ġthe Ġandroid Ġextension ĠDSL ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcompute Variants ( ĊĠĠĠĠĠĠĠ Ġbuild Feature Values : ĠBuild Feature Values , ĊĠĠĠĠĠĠĠ Ġd sl Namespace : ĠString ?, ĊĠĠĠĠĠĠĠ Ġd sl Test Namespace : ĠString ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġflavor Dimension List : ĠList < String > Ġ= Ġextension . flavor Dimension List ĊĠĠĠĠĠĠĠ Ġval Ġcomputer Ġ= ĠDimension Combin ator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Input Model , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Services . issue Reporter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflavor Dimension List ) ĊĠĠĠĠĠĠĠ Ġval Ġvariants Ġ= Ġcomputer . compute Variants () ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġsome Ġinfo Ġrelated Ġto Ġtesting ĊĠĠĠĠĠĠĠ Ġval Ġtest Build Type Data Ġ= Ġtest Build Type Data ĊĊĠĠĠĠĠĠĠ Ġval Ġd sl Namespace Provider Ġ= Ġd sl Namespace ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Properties Api Services . provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġloop Ġon Ġall Ġthe Ġnew Ġvariant Ġobjects Ġto Ġcreate Ġthe Ġlegacy Ġones . ĊĠĠĠĠĠĠĠ Ġfor Ġ( variant Ġin Ġvariants ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Variants From Combination ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Build Type Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Feature Values , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Namespace Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Test Namespace ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠFIXME Ġwe Ġshould Ġlock Ġthe Ġvariant ĠAPI Ġproperties Ġafter Ġall Ġthe Ġbefore Variants , Ġand ĊĠĠĠĠĠĠĠ Ġ// Ġbefore Ġany Ġon Variants Ġto Ġavoid Ġcross Ġaccess Ġbetween Ġthe Ġtwo . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġmeans Ġchanging Ġthe Ġway Ġto Ġrun Ġbefore Variants Ġvs Ġon Variants . ĊĠĠĠĠĠĠĠ Ġvariant Api Services . lock Values () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtest Build Type Data : ĠBuild Type Data < Build Type >? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtest Build Type Data : ĠBuild Type Data < Build Type >? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Ġis ĠTested Android Config ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtested Extension Ġ= Ġextension Ġas ĠTested Android Config ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Build Type Data Ġ= Ġvariant Input Model . build Types [ tested Extension . test Build Type ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( test Build Type Data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( String . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test ĠBuild ĠType Ġ'% 1 \$ s ' Ġdoes Ġnot " Ġ+ Ġ" Ġexist .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtested Extension . test Build Type )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtest Build Type Data ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠNative Built Type Ġ{ ĠCMAKE , ĠN DK _ BUILD Ġ} ĊĊĠĠĠ Ġfun Ġconfigured Native Builder (): ĠNative Built Type ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( extension . external Native Build . nd k Build . path Ġ!= Ġnull ) Ġreturn ĠNative Built Type . N DK _ BUILD ĊĠĠĠĠĠĠĠ Ġif Ġ( extension . external Native Build . cmake . path Ġ!= Ġnull ) Ġreturn ĠNative Built Type . CMAKE ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Variant ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Combination : ĠDimension Combination , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type Data : ĠBuild Type Data < Build Type >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Flavor DataList : ĠList < Product Flavor Data < Product Flavor >>, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Type : ĠVariant Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Feature Values : ĠBuild Feature Values , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Namespace Provider : ĠProvider < String > ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Test Namespace : ĠString ? ĊĠĠĠ Ġ): ĠVariant Component Info < Variant Builder T , ĠVariant T >? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġentry Ġpoint Ġfor Ġa Ġgiven Ġbuild Type / Fl avors / Variant Type Ġcombo . ĊĠĠĠĠĠĠĠ Ġ// ĠNeed Ġto Ġrun Ġthe Ġnew Ġvariant ĠAPI Ġto Ġselect ively Ġignore Ġvariants . ĊĠĠĠĠĠĠĠ Ġ// Ġin Ġorder Ġto Ġdo Ġthis , Ġwe Ġneed Ġaccess Ġto Ġthe ĠVariant Dsl Info , Ġto Ġcreate Ġa ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") Ġval Ġd sl Services Ġ= Ġglobal Scope . dsl Services ĊĠĠĠĠĠĠĠ Ġval Ġdefault Config Ġ= Ġvariant Input Model . default Config Data ĊĠĠĠĠĠĠĠ Ġval Ġdefault Config Source Provider Ġ= Ġdefault Config . source Set ĊĠĠĠĠĠĠĠ Ġval Ġvariant Dsl Info Builder Ġ= Ġget Builder < Common Extension T >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Combination , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Config . default Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Config Source Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type Data . build Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type Data . source Set , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Override , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Lazy Manifest Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Config Source Provider . manifest File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Type . requires Manifest ) Ġ{ Ġcan Parse Manifest () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Properties Api Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Namespace Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Test Namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigured Native Builder (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Dynamic Features Ġ= Ġglobal Scope . has Dynamic Features (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( extension Ġas ĠCommon Extension < *, Ġ*, Ġ*, Ġ*> ). experimental Properties , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Test Fixtures Ġ= Ġextension Ġis ĠTested Extension Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( extension Ġas ĠTested Extension ). test Fixtures . enable , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġmust Ġfirst Ġadd Ġthe Ġfl avors Ġto Ġthe Ġvariant Ġconfig , Ġin Ġorder Ġto Ġget Ġthe Ġproper ĊĠĠĠĠĠĠĠ Ġ// Ġvariant - specific Ġand Ġmulti - flavor Ġname Ġas Ġwe Ġadd / create Ġthe Ġvariant Ġproviders Ġlater . ĊĠĠĠĠĠĠĠ Ġfor Ġ( product Flavor Data Ġin Ġproduct Flavor DataList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info Builder . add Product Flavor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Flavor Data . product Flavor , Ġproduct Flavor Data . source Set ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvariant Dsl Info Ġ= Ġvariant Dsl Info Builder . create Variant Dsl Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Extension , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . layout . build Directory ) ĊĠĠĠĠĠĠĠ Ġval Ġcomponent Identity Ġ= Ġvariant Dsl Info . component Identity ĊĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġthe ĠVariant Ġobject Ġso Ġthat Ġwe Ġcan Ġrun Ġthe Ġaction Ġwhich Ġmay Ġinterrupt Ġthe Ġcreation ĊĠĠĠĠĠĠĠ Ġ// Ġ( in Ġcase Ġof Ġenabled Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġvariant Builder Ġ= Ġvariant Factory . create Variant Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Identity , Ġvariant Dsl Info , Ġvariant Api Services ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġnow Ġthat Ġwe Ġhave Ġthe Ġvariant , Ġcreate Ġthe Ġanalytics Ġobject , ĊĠĠĠĠĠĠĠ Ġval Ġconfigur ator Service Ġ= Ġget Build Service ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . gradle . shared Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalytics Configurator Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠ Ġval Ġprofile Enabled Variant Builder Ġ= Ġconfigur ator Service . get Variant Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . path , Ġvariant Builder . name ) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Visible Variant Builder Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Builder . createUser Visible Variant Object < Variant Builder >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Enabled Variant Builder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġexecute Ġthe ĠVariant ĠAPI ĊĠĠĠĠĠĠĠ Ġvariant Api Operations Registrar . variant Builder Operations . execute Operations ( user Visible Variant Builder ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! variant Builder . enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġnow Ġthat Ġwe Ġhave Ġthe Ġresult Ġof Ġthe Ġfilter , Ġwe Ġcan Ġcontinue Ġconfiguring Ġthe Ġvariant ĊĠĠĠĠĠĠĠ Ġcreate Compound Source Sets ( product Flavor DataList , Ġvariant Dsl Info Builder ) ĊĠĠĠĠĠĠĠ Ġval Ġvariant Sources Ġ= Ġvariant Dsl Info Builder . create Variant Sources () ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġcontainer Ġof Ġdependencies . ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġorder Ġof Ġthe Ġlibraries Ġis Ġimportant , Ġin Ġdescending Ġorder : ĊĠĠĠĠĠĠĠ Ġ// Ġvariant - specific , Ġbuild Ġtype , Ġmulti - flavor , Ġflavor 1 , Ġflavor 2 , Ġ..., Ġdefault Config . ĊĠĠĠĠĠĠĠ Ġ// Ġvariant - specific Ġif Ġthe Ġfull Ġcombo Ġof Ġfl avors + build Ġtype . ĠDoes Ġnot Ġexist Ġif Ġno Ġfl avors . ĊĠĠĠĠĠĠĠ Ġ// Ġmulti - flavor Ġis Ġthe Ġcombination Ġof Ġall Ġflavor Ġdimensions . ĠDoes Ġnot Ġexist Ġif Ġ< 2 Ġdimension . ĊĠĠĠĠĠĠĠ Ġval Ġvariant Source Sets : ĠMutable List < Default Android Source Set ?> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLists . newArrayList With Expected Size ( product Flavor DataList . size Ġ+ Ġ 4 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . Ġadd Ġthe Ġvariant - specific Ġif Ġapplicable . ĊĠĠĠĠĠĠĠ Ġif Ġ( product Flavor DataList . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Source Sets . add ( variant Sources . variant Source Provider ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġthe Ġbuild Ġtype . ĊĠĠĠĠĠĠĠ Ġvariant Source Sets . add ( build Type Data . source Set ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 3 . Ġthe Ġmulti - flavor Ġcombination ĊĠĠĠĠĠĠĠ Ġif Ġ( product Flavor DataList . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Source Sets . add ( variant Sources . multi Flavor Source Provider ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 4 . Ġthe Ġfl avors . ĊĠĠĠĠĠĠĠ Ġfor Ġ( product Flavor Ġin Ġproduct Flavor DataList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Source Sets . add ( product Flavor . source Set ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 5 . ĠThe Ġdefault Config ĊĠĠĠĠĠĠĠ Ġvariant Source Sets . add ( variant Input Model . default Config Data . source Set ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate ĠVariant Dependencies ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠVariant Dependencies Builder . builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Options , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Services . issue Reporter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Flavor Selection ( get Flavor Selection ( variant Dsl Info )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Source Sets ( variant Source Sets ) ĊĠĠĠĠĠĠĠ Ġif Ġ( extension Ġis ĠBase App Module Extension ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Feature List (( extension Ġas ĠBase App Module Extension ). dynamic Features ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġvariant Dependencies Ġ= Ġbuilder . build () ĊĊĠĠĠĠĠĠĠ Ġ// ĠDone . ĠCreate Ġthe Ġ( too ) Ġmany Ġvariant Ġobjects ĊĠĠĠĠĠĠĠ Ġval Ġpath Helper Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVariant Path Helper ( project . layout . build Directory , Ġvariant Dsl Info , Ġd sl Services ) ĊĠĠĠĠĠĠĠ Ġval Ġartifacts Ġ= ĠArtifact s Impl ( project , Ġcomponent Identity . name ) ĊĠĠĠĠĠĠĠ Ġval Ġtask Container Ġ= ĠMutable Task Container () ĊĠĠĠĠĠĠĠ Ġval Ġtransform Manager Ġ= ĠTransform Manager ( project , Ġd sl Services . issue Reporter ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġthe Ġobsolete ĠVariant Scope ĊĠĠĠĠĠĠĠ Ġval Ġvariant Scope Ġ= ĠVariant Scope Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Identity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dependencies , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Helper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Creation Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ/* Ġtested Variant Properties */) ĊĊĠĠĠĠĠĠĠ Ġ// Ġand Ġthe Ġobsolete Ġvariant Ġdata ĊĠĠĠĠĠĠĠ Ġval Ġvariant Data Ġ= Ġvariant Factory . create Variant Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Identity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dependencies , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Sources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Helper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Properties Api Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Container ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen Ġthe Ġnew ĠVariant Ġwhich Ġwill Ġcontain Ġthe Ġ 2 Ġold Ġobjects . ĊĠĠĠĠĠĠĠ Ġval Ġvariant Api Object Ġ= Ġvariant Factory . create Variant ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Builder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Identity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Feature Values , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dependencies , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Sources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Helper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransform Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Properties Api Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Creation Services ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠVariant Component Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Builder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Api Object , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Enabled Variant Builder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Api Operations Registrar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Compound Source Sets ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Flavor List : ĠList < Product Flavor Data < Product Flavor >>, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info Builder : ĠVariant Dsl Info Builder < Common Extension T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvariant Type Ġ= Ġvariant Dsl Info Builder . variant Type ĊĠĠĠĠĠĠĠ Ġif Ġ( product Flavor List . isNotEmpty () Ġ/* Ġ&& Ġ! variant Config . getType (). is Single Build Type () */) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariant Source Set Ġ= Ġvariant Input Model ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. source Set Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setUp Source Set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Source SetName ( variant Dsl Info Builder . name , Ġvariant Type ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Type . is Test Component ) Ġas ĠDefault Android Source Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info Builder . variant Source Provider Ġ= Ġvariant Source Set ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( product Flavor List . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmulti Flavor Source Set Ġ= Ġvariant Input Model ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. source Set Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setUp Source Set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Source SetName ( variant Dsl Info Builder . flavor Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Type ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Type . is Test Component ) Ġas ĠDefault Android Source Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info Builder . multi Flavor Source Provider Ġ= Ġmulti Flavor Source Set ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCreate Ġa Ġtest Ġfixtures Ġcomponent Ġfor Ġthe Ġspecified Ġmain Ġcomponent . Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Test Fixtures Component ( ĊĠĠĠĠĠĠĠ Ġdimension Combination : ĠDimension Combination , ĊĠĠĠĠĠĠĠ Ġbuild Type Data : ĠBuild Type Data < Build Type >, ĊĠĠĠĠĠĠĠ Ġproduct Flavor DataList : ĠList < Product Flavor Data < Product Flavor >>, ĊĠĠĠĠĠĠĠ Ġmain Component Info : ĠVariant Component Info < Variant Builder T , ĠVariant T > ĊĠĠĠ Ġ): ĠTest Fixtures Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Fixtures Variant Type Ġ= ĠVariant Type Impl . TEST _ FIX TURE S ĊĠĠĠĠĠĠĠ Ġval Ġtest Fixtures Source Set Ġ= Ġvariant Input Model . default Config Data . test Fixtures Source Set !! ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") Ġval Ġd sl Services Ġ= Ġglobal Scope . dsl Services ĊĠĠĠĠĠĠĠ Ġval Ġvariant Dsl Info Builder Ġ= Ġget Builder < Common Extension T >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Combination , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Variant Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Input Model . default Config Data . default Config , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Source Set , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type Data . build Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type Data . test Fixtures Source Set , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Override , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Lazy Manifest Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Source Set . manifest File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Variant Type . requires Manifest ) Ġ{ Ġcan Parse Manifest () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Services , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Properties Api Services , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Properties Api Services . provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Component Info . variant . variant Dsl Info . namespace . get () Ġ+ Ġ"." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Feature Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension Ġ= Ġextension , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Dynamic Features Ġ= Ġglobal Scope . has Dynamic Features (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixture Main Variant Name Ġ= Ġmain Component Info . variant . name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġproduct Flavor List Ġ= Ġmain Component Info . variant . variant Dsl Info . product Flavor List ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġmust Ġfirst Ġadd Ġthe Ġfl avors Ġto Ġthe Ġvariant Ġbuilder , Ġin Ġorder Ġto Ġget Ġthe Ġproper ĊĠĠĠĠĠĠĠ Ġ// Ġvariant - specific Ġand Ġmulti - flavor Ġname Ġas Ġwe Ġadd / create Ġthe Ġvariant Ġproviders Ġlater . ĊĠĠĠĠĠĠĠ Ġval Ġproduct Fl avors Ġ= Ġvariant Input Model . product Fl avors ĊĠĠĠĠĠĠĠ Ġfor Ġ( product Flavor Ġin Ġproduct Flavor List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Fl avors [ product Flavor . name ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info Builder . add Product Flavor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . product Flavor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . test Fixtures Source Set !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvariant Dsl Info Ġ= Ġvariant Dsl Info Builder . create Variant Dsl Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Extension , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . layout . build Directory ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġapi Access Stats Ġ= Ġmain Component Info . stats ĊĊĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġrun Ġactions Ġregistered Ġat Ġthe Ġextension Ġlevel . Ċ // ĠĠĠĠĠĠĠ Ġmain Component Info . variant Api Operations Registrar . test Fixtures Builder Operations Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute Operations ( test Fixtures Variant Builder ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġnow Ġthat Ġwe Ġhave Ġthe Ġresult Ġof Ġthe Ġfilter , Ġwe Ġcan Ġcontinue Ġconfiguring Ġthe Ġvariant ĊĠĠĠĠĠĠĠ Ġcreate Compound Source Sets ( product Flavor DataList , Ġvariant Dsl Info Builder ) ĊĠĠĠĠĠĠĠ Ġval Ġvariant Sources Ġ= Ġvariant Dsl Info Builder . create Variant Sources () ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġcontainer Ġof Ġdependencies , Ġthe Ġorder Ġof Ġthe Ġlibraries Ġis Ġimportant . ĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġdescending Ġorder : Ġbuild Ġtype Ġ( only Ġfor Ġunit Ġtest ), Ġfl avors , Ġdefault Config . ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġcontainer Ġof Ġdependencies . ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġorder Ġof Ġthe Ġlibraries Ġis Ġimportant , Ġin Ġdescending Ġorder : ĊĠĠĠĠĠĠĠ Ġ// Ġvariant - specific , Ġbuild Ġtype Ġ( , Ġmulti - flavor , Ġflavor 1 , Ġflavor 2 , Ġ..., Ġdefault Config . ĊĠĠĠĠĠĠĠ Ġ// Ġvariant - specific Ġif Ġthe Ġfull Ġcombo Ġof Ġfl avors + build Ġtype . ĠDoes Ġnot Ġexist Ġif Ġno Ġfl avors . ĊĠĠĠĠĠĠĠ Ġ// Ġmulti - flavor Ġis Ġthe Ġcombination Ġof Ġall Ġflavor Ġdimensions . ĠDoes Ġnot Ġexist Ġif Ġ< 2 Ġdimension . ĊĠĠĠĠĠĠĠ Ġval Ġtest Fixtures Product Fl avors Ġ= Ġvariant Dsl Info . product Flavor List ĊĠĠĠĠĠĠĠ Ġval Ġtest Fixtures Variant Source Sets : ĠMutable List < Default Android Source Set ?> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLists . newArrayList With Expected Size ( 4 Ġ+ Ġtest Fixtures Product Fl avors . size ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . Ġadd Ġthe Ġvariant - specific Ġif Ġapplicable . ĊĠĠĠĠĠĠĠ Ġif Ġ( test Fixtures Product Fl avors . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Variant Source Sets . add ( variant Sources . variant Source Provider ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġthe Ġbuild Ġtype . ĊĠĠĠĠĠĠĠ Ġval Ġbuild Type Configuration Provider Ġ= Ġbuild Type Data . test Fixtures Source Set ĊĠĠĠĠĠĠĠ Ġbuild Type Configuration Provider ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Variant Source Sets . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 3 . Ġthe Ġmulti - flavor Ġcombination ĊĠĠĠĠĠĠĠ Ġif Ġ( test Fixtures Product Fl avors . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Variant Source Sets . add ( variant Sources . multi Flavor Source Provider ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 4 . Ġthe Ġfl avors . ĊĠĠĠĠĠĠĠ Ġfor Ġ( product Flavor Ġin Ġtest Fixtures Product Fl avors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Input Model . product Fl avors [ product Flavor . name ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Variant Source Sets . add ( it . test Fixtures Source Set ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġnow Ġadd Ġthe Ġdefault Ġconfig ĊĠĠĠĠĠĠĠ Ġtest Fixtures Variant Source Sets . add ( variant Input Model . default Config Data . test Fixtures Source Set ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġvariant Ġbeing Ġtested Ġis Ġa Ġlibrary Ġvariant , ĠVariant Dependencies Ġmust Ġbe ĊĠĠĠĠĠĠĠ Ġ// Ġcomputed Ġafter Ġthe Ġtasks Ġfor Ġthe Ġtested Ġvariant Ġis Ġcreated . Ġ ĠTherefore , Ġthe ĊĠĠĠĠĠĠĠ Ġ// ĠVariant Dependencies Ġis Ġcomputed Ġhere Ġinstead Ġof Ġwhen Ġthe ĠVariant Data Ġwas Ġcreated . ĊĠĠĠĠĠĠĠ Ġval Ġvariant Dependencies Ġ= ĠVariant Dependencies Builder . builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Options , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Services . issue Reporter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Source Sets ( test Fixtures Variant Source Sets ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Flavor Selection ( get Flavor Selection ( variant Dsl Info )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. override Variant Name Attribute ( main Component Info . variant . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġpath Helper Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVariant Path Helper ( project . layout . build Directory , Ġvariant Dsl Info , Ġd sl Services ) ĊĠĠĠĠĠĠĠ Ġval Ġcomponent Identity Ġ= Ġvariant Dsl Info . component Identity ĊĠĠĠĠĠĠĠ Ġval Ġartifacts Ġ= ĠArtifact s Impl ( project , Ġcomponent Identity . name ) ĊĠĠĠĠĠĠĠ Ġval Ġtask Container Ġ= ĠMutable Task Container () ĊĠĠĠĠĠĠĠ Ġval Ġtransform Manager Ġ= ĠTransform Manager ( project , Ġd sl Services . issue Reporter ) ĊĠĠĠĠĠĠĠ Ġval Ġvariant Scope Ġ= ĠVariant Scope Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Identity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dependencies , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Helper , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Creation Services , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġthe Ġinternal Ġstorage Ġfor Ġthis Ġvariant . ĊĠĠĠĠĠĠĠ Ġval Ġtest Fixtures Variant Data Ġ= ĠTest Fixtures Variant Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Identity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dependencies , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Sources , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Helper , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Properties Api Services , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Container ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġbuild Feature Values Ġ= Ġvariant Factory . create Test Fixtures Build Feature Values ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension . build Features , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Options ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Fixtures Component Ġ= Ġvariant Factory . create Test Fixtures ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info . component Identity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Feature Values , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dependencies , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Sources , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Helper , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Variant Data , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Component Info . variant , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransform Manager , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Properties Api Services , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Creation Services ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Visible Variant Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Component . createUser Visible Variant Object < Test Fixtures >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Services , Ġvariant Api Operations Registrar , Ġapi Access Stats ) ĊĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġexecute Ġthe Ġactions Ġregistered Ġat Ġthe Ġextension Ġlevel . Ċ // ĠĠĠĠĠĠĠ Ġmain Component Info . variant Api Operations Registrar . test Fixtures Operations Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute Operations ( user Visible Variant ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġregister Ġtest Fixtures Ġcomponent Ġto Ġthe Ġmain Ġvariant ĊĠĠĠĠĠĠĠ Ġmain Component Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. variant ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test Fixtures Component Ġ= Ġtest Fixtures Component ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtest Fixtures Component ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCreate Ġa ĠTest Variant Data Ġfor Ġthe Ġspecified Ġtested Variant Data . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Test Components ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Combination : ĠDimension Combination , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type Data : ĠBuild Type Data < Build Type >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Flavor DataList : ĠList < Product Flavor Data < Product Flavor >>, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtested Component Info : ĠVariant Component Info < Variant Builder T , ĠVariant T >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Type : ĠVariant Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Enabled : ĠBoolean ĊĠĠĠ Ġ): ĠTest Component Impl ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġhandle Ġtest Ġvariant ĊĠĠĠĠĠĠĠ Ġ// Ġneed Ġa Ġsuppress Ġwarning Ġbecause ĠProduct Flavor . getTest Source Set ( type ) Ġis Ġannotated ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġreturn Ġ@ Nullable Ġand Ġthe Ġconstructor Ġis Ġ@ NonNull Ġon Ġthis Ġparameter , ĊĠĠĠĠĠĠĠ Ġ// Ġbut Ġit 's Ġnever Ġthe Ġcase Ġon Ġdefault Config Data ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġconstructor Ġdoes Ġa Ġruntime Ġcheck Ġon Ġthe Ġinstances Ġso Ġwe Ġshould Ġbe Ġsafe . ĊĠĠĠĠĠĠĠ Ġval Ġtest Source Set Ġ= Ġvariant Input Model . default Config Data . getTest Source Set ( variant Type ) ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") Ġval Ġd sl Services Ġ= Ġglobal Scope . dsl Services ĊĠĠĠĠĠĠĠ Ġval Ġvariant Dsl Info Builder Ġ= Ġget Builder < Common Extension T >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Combination , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Input Model . default Config Data . default Config , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Source Set !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type Data . build Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type Data . getTest Source Set ( variant Type ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Override , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Lazy Manifest Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Source Set . manifest File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Type . requires Manifest ) Ġ{ Ġcan Parse Manifest () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Properties Api Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension Ġ= Ġextension , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Dynamic Features Ġ= Ġglobal Scope . has Dynamic Features ()) ĊĠĠĠĠĠĠĠ Ġvariant Dsl Info Builder . tested Variant Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtested Component Info . variant . variant Dsl Info Ġas ĠVariant Dsl Info Impl < *> ĊĠĠĠĠĠĠĠ Ġval Ġproduct Flavor List Ġ= Ġtested Component Info . variant . variant Dsl Info . product Flavor List ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġmust Ġfirst Ġadd Ġthe Ġfl avors Ġto Ġthe Ġvariant Ġbuilder , Ġin Ġorder Ġto Ġget Ġthe Ġproper ĊĠĠĠĠĠĠĠ Ġ// Ġvariant - specific Ġand Ġmulti - flavor Ġname Ġas Ġwe Ġadd / create Ġthe Ġvariant Ġproviders Ġlater . ĊĠĠĠĠĠĠĠ Ġval Ġproduct Fl avors Ġ= Ġvariant Input Model . product Fl avors ĊĠĠĠĠĠĠĠ Ġfor Ġ( product Flavor Ġin Ġproduct Flavor List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Fl avors [ product Flavor . name ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info Builder . add Product Flavor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . product Flavor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getTest Source Set ( variant Type ) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvariant Dsl Info Ġ= Ġvariant Dsl Info Builder . create Variant Dsl Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Extension , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . layout . build Directory ) ĊĠĠĠĠĠĠĠ Ġval Ġapi Access Stats Ġ= Ġtested Component Info . stats ĊĠĠĠĠĠĠĠ Ġif Ġ( variant Type . is A pk ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġtested Component Info . variant Builder Ġis ĠHas Android Test Builder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis ĠAND ROID _ TEST ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! tested Component Info . variant Builder . enable Android Test ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis ĠUNIT _ TEST ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! tested Component Info . variant Builder . enable UnitTest ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġnow Ġthat Ġwe Ġhave Ġthe Ġresult Ġof Ġthe Ġfilter , Ġwe Ġcan Ġcontinue Ġconfiguring Ġthe Ġvariant ĊĠĠĠĠĠĠĠ Ġcreate Compound Source Sets ( product Flavor DataList , Ġvariant Dsl Info Builder ) ĊĠĠĠĠĠĠĠ Ġval Ġvariant Sources Ġ= Ġvariant Dsl Info Builder . create Variant Sources () ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġcontainer Ġof Ġdependencies , Ġthe Ġorder Ġof Ġthe Ġlibraries Ġis Ġimportant . ĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġdescending Ġorder : Ġbuild Ġtype Ġ( only Ġfor Ġunit Ġtest ), Ġfl avors , Ġdefault Config . ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġcontainer Ġof Ġdependencies . ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġorder Ġof Ġthe Ġlibraries Ġis Ġimportant , Ġin Ġdescending Ġorder : ĊĠĠĠĠĠĠĠ Ġ// Ġvariant - specific , Ġbuild Ġtype Ġ( , Ġmulti - flavor , Ġflavor 1 , Ġflavor 2 , Ġ..., Ġdefault Config . ĊĠĠĠĠĠĠĠ Ġ// Ġvariant - specific Ġif Ġthe Ġfull Ġcombo Ġof Ġfl avors + build Ġtype . ĠDoes Ġnot Ġexist Ġif Ġno Ġfl avors . ĊĠĠĠĠĠĠĠ Ġ// Ġmulti - flavor Ġis Ġthe Ġcombination Ġof Ġall Ġflavor Ġdimensions . ĠDoes Ġnot Ġexist Ġif Ġ< 2 Ġdimension . ĊĠĠĠĠĠĠĠ Ġval Ġtest Product Fl avors Ġ= Ġvariant Dsl Info . product Flavor List ĊĠĠĠĠĠĠĠ Ġval Ġtest Variant Source Sets : ĠMutable List < Default Android Source Set ?> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLists . newArrayList With Expected Size ( 4 Ġ+ Ġtest Product Fl avors . size ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . Ġadd Ġthe Ġvariant - specific Ġif Ġapplicable . ĊĠĠĠĠĠĠĠ Ġif Ġ( test Product Fl avors . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Variant Source Sets . add ( variant Sources . variant Source Provider ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġthe Ġbuild Ġtype . ĊĠĠĠĠĠĠĠ Ġval Ġbuild Type Configuration Provider Ġ= Ġbuild Type Data . getTest Source Set ( variant Type ) ĊĠĠĠĠĠĠĠ Ġbuild Type Configuration Provider ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Variant Source Sets . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 3 . Ġthe Ġmulti - flavor Ġcombination ĊĠĠĠĠĠĠĠ Ġif Ġ( test Product Fl avors . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Variant Source Sets . add ( variant Sources . multi Flavor Source Provider ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 4 . Ġthe Ġfl avors . ĊĠĠĠĠĠĠĠ Ġfor Ġ( product Flavor Ġin Ġtest Product Fl avors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Input Model . product Fl avors [ product Flavor . name ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Variant Source Sets . add ( it . getTest Source Set ( variant Type )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġnow Ġadd Ġthe Ġdefault Ġconfig ĊĠĠĠĠĠĠĠ Ġtest Variant Source Sets . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Input Model . default Config Data . getTest Source Set ( variant Type )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġvariant Ġbeing Ġtested Ġis Ġa Ġlibrary Ġvariant , ĠVariant Dependencies Ġmust Ġbe ĊĠĠĠĠĠĠĠ Ġ// Ġcomputed Ġafter Ġthe Ġtasks Ġfor Ġthe Ġtested Ġvariant Ġis Ġcreated . Ġ ĠTherefore , Ġthe ĊĠĠĠĠĠĠĠ Ġ// ĠVariant Dependencies Ġis Ġcomputed Ġhere Ġinstead Ġof Ġwhen Ġthe ĠVariant Data Ġwas Ġcreated . ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠVariant Dependencies Builder . builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Options , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Services . issue Reporter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Source Sets ( test Variant Source Sets ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Flavor Selection ( get Flavor Selection ( variant Dsl Info )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Tested Variant ( tested Component Info . variant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Test Fixtures Enabled ( test Fixtures Enabled ) ĊĠĠĠĠĠĠĠ Ġval Ġvariant Dependencies Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠ Ġval Ġpath Helper Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVariant Path Helper ( project . layout . build Directory , Ġvariant Dsl Info , Ġd sl Services ) ĊĠĠĠĠĠĠĠ Ġval Ġcomponent Identity Ġ= Ġvariant Dsl Info . component Identity ĊĠĠĠĠĠĠĠ Ġval Ġartifacts Ġ= ĠArtifact s Impl ( project , Ġcomponent Identity . name ) ĊĠĠĠĠĠĠĠ Ġval Ġtask Container Ġ= ĠMutable Task Container () ĊĠĠĠĠĠĠĠ Ġval Ġtransform Manager Ġ= ĠTransform Manager ( project , Ġd sl Services . issue Reporter ) ĊĠĠĠĠĠĠĠ Ġval Ġvariant Scope Ġ= ĠVariant Scope Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Identity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dependencies , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Helper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Creation Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtested Component Info . variant ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġthe Ġinternal Ġstorage Ġfor Ġthis Ġvariant . ĊĠĠĠĠĠĠĠ Ġval Ġtest Variant Data Ġ= ĠTest Variant Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Identity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dependencies , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Sources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Helper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( tested Component Info . variant . variant Data Ġas ĠTested Variant Data ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Properties Api Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Container ) ĊĠĠĠĠĠĠĠ Ġval Ġtest Component : ĠTest Component Impl ĊĠĠĠĠĠĠĠ Ġval Ġbuild Feature Values Ġ= Ġvariant Factory . create Test Build Feature Values ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension . build Features , Ġextension . data Binding , Ġproject Options ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġis ĠAND ROID _ TEST ĊĠĠĠĠĠĠĠ Ġtest Component Ġ= Ġif Ġ( variant Type . is A pk ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġandroid Test Ġ= Ġvariant Factory . create Android Test ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info . component Identity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Feature Values , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dependencies , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Sources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Helper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Variant Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtested Component Info . variant , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransform Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Properties Api Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Creation Services ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Test ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis ĠUNIT _ TEST ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunit Test Ġ= Ġvariant Factory . create UnitTest ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info . component Identity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Feature Values , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dependencies , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Sources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Helper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Variant Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtested Component Info . variant , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransform Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Properties Api Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Creation Services ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunit Test ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġregister ĊĠĠĠĠĠĠĠ Ġtested Component Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. variant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test Components [ variant Dsl Info . variant Type ] Ġ= Ġtest Component ĊĠĠĠĠĠĠĠ Ġreturn Ġtest Component ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates ĠVariant Ġobjects Ġfor Ġa Ġspecific Ġ[ Component Identity ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġwill Ġcreate Ġboth Ġthe Ġprod Ġand Ġthe Ġandroid Test / unit Test Ġvariants . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Variants From Combination ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Combination : ĠDimension Combination , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Build Type Data : ĠBuild Type Data < Build Type > ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Feature Values : ĠBuild Feature Values , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Namespace Provider : ĠProvider < String > ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Test Namespace : ĠString ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvariant Type Ġ= Ġvariant Factory . variant Type ĊĊĠĠĠĠĠĠĠ Ġ// Ġfirst Ġrun Ġthe Ġold Ġvariant Filter ĠAPI ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġacts Ġon Ġbuild type / flavor Ġonly , Ġand Ġapplies Ġin Ġone Ġpass Ġto Ġprod / tests . ĊĠĠĠĠĠĠĠ Ġval Ġdefault Config Ġ= Ġvariant Input Model . default Config Data . default Config ĊĠĠĠĠĠĠĠ Ġval Ġbuild Type Data Ġ= Ġvariant Input Model . build Types [ dimension Combination . build Type ] ĊĠĠĠĠĠĠĠ Ġval Ġbuild Type Ġ= Ġbuild Type Data !!. build Type ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġlist Ġof ĠProduct Flavor Data Ġfrom Ġthe Ġlist Ġof Ġflavor Ġname ĊĠĠĠĠĠĠĠ Ġval Ġproduct Flavor DataList : ĠList < Product Flavor Data < Product Flavor >> Ġ= Ġdimension Combination ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. product Fl avors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġ(_, Ġsecond ) Ġ-> Ġvariant Input Model . product Fl avors [ second ] Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġproduct Flavor List : ĠList < Product Flavor > Ġ= Ġproduct Flavor DataList ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . product Flavor Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġignore Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġextension . variant Filter ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Filter . reset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Combination , Ġdefault Config , Ġbuild Type , Ġvariant Type , Ġproduct Flavor List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġvariant Filter Action Ġ!= Ġnull Ġalways Ġtrue Ġhere . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . execute ( variant Filter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠExternal Api Usage Exception ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġignore Ġ= Ġvariant Filter . ignore ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! ignore ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreate Ġthe Ġprod Ġvariant ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Variant ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Combination , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Flavor DataList , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Feature Values , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Namespace Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Test Namespace )?. let Ġ{ Ġvariant Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Variant ( variant Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariant Ġ= Ġvariant Info . variant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariant Dsl Info Ġ= Ġvariant . variant Dsl Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Sdk Version Ġ= Ġvariant Info . variant . min Sdk Version . api Level ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Sdk Version Ġ= Ġvariant Dsl Info . target Sdk Version . api Level ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( min Sdk Version Ġ> Ġ 0 Ġ&& Ġtarget Sdk Version Ġ> Ġ 0 Ġ&& Ġmin Sdk Version Ġ> Ġtarget Sdk Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Services ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. issue Reporter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. report Warning ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIssue Reporter . Type . GENERIC , ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocale . US , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" min Sdk Version Ġ(% d ) Ġis Ġgreater Ġthan Ġtarget Sdk Version " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġ(% d ) Ġfor Ġvariant Ġ\"% s \" . ĠPlease Ġchange Ġthe " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġvalues Ġsuch Ġthat Ġmin Sdk Version Ġis Ġless Ġthan Ġor " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġequal Ġto Ġtarget Sdk Version .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Sdk Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Sdk Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant . name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Fixtures Enabled For Variant Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Info . variant . variant Builder Ġis ĠHas Test Fixtures Builder Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( variant Info . variant . variant Builder Ġas ĠHas Test Fixtures Builder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Test Fixtures ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( test Fixtures Enabled For Variant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Fixtures Ġ= Ġcreate Test Fixtures Component ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Combination , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Flavor DataList , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Components . add ( test Fixtures ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( variant Info . variant Ġas ĠHas Test Fixtures ). test Fixtures Ġ= Ġtest Fixtures ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( variant Factory . variant Type . has Test Components ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( build Type Data Ġ== Ġtest Build Type Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġandroid Test Ġ= Ġcreate Test Components ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Combination , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Flavor DataList , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVariant Type Impl . ANDROID _ TEST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Enabled For Variant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Test ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Test Component ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( variant Info . variant Ġas ĠHas Android Test ). android Test Ġ= Ġit Ġas ĠAndroid Test ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunit Test Ġ= Ġcreate Test Components ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Combination , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Flavor DataList , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVariant Type Impl . UNIT _ TEST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Fixtures Enabled For Variant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Test ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Test Component ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Info . variant . unit Test Ġ= Ġit Ġas ĠUnit Test ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNow Ġthat Ġunit Test Ġand / or Ġandroid Test Ġhave Ġbeen Ġcreated Ġand Ġadded Ġto Ġthe Ġmain ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġuser Ġvisible Ġvariant Ġobject , Ġwe Ġcan Ġrun Ġthe Ġon Variants () Ġactions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Visible Variant Ġ= Ġ( variant Info . variant Ġas ĠVariant Impl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. createUser Visible Variant Object < Variant >( project Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Api Operations Registrar , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Info . stats ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġvariant Ġobject Ġis Ġcreated , Ġlet 's Ġcreate Ġthe Ġuser Ġextension Ġvariant Ġscoped Ġobjects ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġstore Ġthem Ġin Ġour Ġnewly Ġcreated Ġvariant Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariant Extension Config Ġ= Ġobject : ĠVariant Extension Config < Variant > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġvariant : ĠVariant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġuser Visible Variant ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T > Ġproject Extension ( extension Type : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġneed Ġto Ġmake ĠDefault Config Ġor ĠCommon Extension Ġimplement ĠExtension Aware . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" No Ġglobal Ġextension ĠDSL Ġelement Ġimplements ĠExtension Aware .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T > Ġbuild Type Extension ( extension Type : ĠClass < T >): ĠT Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type Data . build Type . extensions . getBy Type ( extension Type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T > Ġproduct Fl avors Extensions ( extension Type : ĠClass < T >): ĠList < T > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Flavor DataList . map Ġ{ Ġproduct Flavor Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Flavor Data . product Flavor . extensions . getBy Type ( extension Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Api Operations Registrar . dsl Extensions . forEach Ġ{ Ġregistered Extension Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistered Extension . configur ator . invoke ( variant Extension Config ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Info . variant Builder . register Extension < Any >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠGenerated Subclass ) Ġit . public Type () Ġelse Ġit . java Class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Api Operations Registrar . variant Operations . execute Operations ( user Visible Variant ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġall Ġthe Ġvariant Ġpublic ĠAPIs Ġhave Ġrun , Ġwe Ġcan Ġnow Ġsafely Ġfill Ġthe Ġanalytics Ġwith ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġfinal Ġvalues Ġthat Ġwill Ġbe Ġused Ġthroughout Ġthe Ġtask Ġcreation Ġand Ġexecution . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariant Analytics Ġ= Ġvariant Info . stats ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Analytics ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIs Debug ( build Type . isDebug gable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Min Sdk Version ( Analytics Util . to Proto ( variant Info . variant . min Sdk Version )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Min ify Enabled ( variant . min ified Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Use Multi dex ( variant . is Multi Dex Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Use Legacy Multi dex ( variant . dex ing Type . is Legacy Multi Dex Mode ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Variant Type ( variant . variant Type . analytics Variant Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Dex Builder ( Gradle Build Variant . Dex Builder Tool . D 8 _ DEX ER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Dex Mer ger ( Gradle Build Variant . Dex Mer ger Tool . D 8 _ MER GER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Core Library Des ug aring Enabled ( variant . is Core Library Des ug aring Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test Execution Ġ= ĠAnalytics Util . to Proto ( global Scope . extension . test Options . get Execution Enum ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( variant . min ified Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġcode Ġshrink er Ġis Ġused , Ġit Ġcan Ġonly Ġbe ĠR 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Analytics . code Shrink er Ġ= ĠGradle Build Variant . Code Shrink er Tool . R 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( variant Dsl Info . target Sdk Version . api Level Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Analytics . target Sdk Version Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalytics Util . to Proto ( variant Dsl Info . target Sdk Version ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Dsl Info . max Sdk Version ?. let Ġ{ Ġversion Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Analytics . setMax Sdk Version ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApi Version . newBuilder (). set Api Level ( version . to Long ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsupport Type Ġ= Ġvariant . get Java 8 Lang Support Type () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( support Type Ġ!= ĠVariant Scope . Java 8 Lang Support . INVALID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġsupport Type Ġ!= ĠVariant Scope . Java 8 Lang Support . UNUSED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Analytics . java 8 Lang Support Ġ= ĠAnalytics Util . to Proto ( support Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Variant ( variant : ĠComponent Info < Variant Builder T , ĠVariant T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġvariants . add ( variant ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Test Component ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Component : ĠTest Component Impl ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Components . add ( test Component ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Signing Override (): ĠSign ing Config ? Ġ{ ĊĠĠĠĠĠĠĠ ĠSign ing Options . read Signing Options ( project Options )?. let Ġ{ Ġsigning Options Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsigning Config Dsl Ġ= ĠSign ing Config ( Signing Options . SIGN ING _ CONFIG _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Config Dsl . store File ( File ( signing Options . store File )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Config Dsl . store Password ( signing Options . store Password ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Config Dsl . key Alias ( signing Options . key Alias ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Config Dsl . key Password ( signing Options . key Password ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Options . store Type ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Config Dsl . store Type ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Options . v 1 Enabled ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Config Dsl . enable V 1 Signing Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Options . v 2 Enabled ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Config Dsl . enable V 2 Signing Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsigning Config Dsl ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Lazy Manifest Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile : ĠFile , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Manifest File Required : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn Execution Phase : ĠBoolean Supplier ): ĠLazy Manifest Parser Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlazy Manifest Parser Map . compute If Absent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġf : ĠFile ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Manifest Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Services . object Factory . file Property (). file Value ( f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Manifest File Required , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Services , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisIn Execution Phase ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcan Parse Manifest (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhas Created Tasks Ġ|| Ġ! project Options [ Boolean Option . DISABLE _ EAR LY _ MAN IFEST _ PAR SING ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Has Created Tasks ( has Created Tasks : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . has Created Tasks Ġ= Ġhas Created Tasks ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlock Variant Properties () Ġ{ ĊĠĠĠĠĠĠĠ Ġvariant Properties Api Services . lock Properties () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġmodified Ġname . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġname Ġis Ġused Ġto Ġrequest Ġa Ġmissing Ġdimension . ĠIt Ġis Ġthe Ġsame Ġname Ġas Ġthe Ġflavor Ġthat ĊĠĠĠĠĠĠĠĠ Ġ* Ġsets Ġup Ġthe Ġrequest , Ġwhich Ġmeans Ġit 's Ġnot Ġgoing Ġto Ġbe Ġmatched , Ġand Ġinstead Ġit 'll Ġgo Ġto Ġa ĊĠĠĠĠĠĠĠĠ Ġ* Ġcustom Ġfallback s Ġprovided Ġby Ġthe Ġflavor . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠWe Ġare Ġjust Ġmodifying Ġthe Ġname Ġto Ġavoid Ġcollision Ġin Ġcase Ġthe Ġsame Ġname Ġexists Ġin ĊĠĠĠĠĠĠĠĠ Ġ* Ġdifferent Ġdimensions ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Modified Name ( name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" ____ $ name " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsigning Override Ġ= Ġcreate Signing Override () ĊĠĠĠĠĠĠĠ Ġvariant Filter Ġ= ĠVariant Filter ( ReadOnly Object Provider ()) ĊĠĠĠĠĠĠĠ Ġvariant Api Services Ġ= ĠVariant Api Services Impl ( project Services ) ĊĠĠĠĠĠĠĠ Ġvariant Properties Api Services Ġ= ĠVariant Properties Api Services Impl ( project Services ) ĊĠĠĠĠĠĠĠ Ġtask Creation Services Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask Creation Services Impl ( variant Properties Api Services , Ġproject Services ) ĊĠĠĠ Ġ} Ċ } Ċ