/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 Ġ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 . builder . core Ċ Ċ import Ġcom . google . common . base . Preconditions . check State Ċ Ċ import Ġcom . android . builder . model . Build Type Ċ import Ġcom . android . builder . model . Product Flavor Ċ import Ġcom . google . common . base . Strings Ċ import Ġjava . io . Serializable Ċ import Ġjava . io . File Ċ import Ġjava . util . function . Int Supplier Ċ import Ġjava . util . function . Supplier Ċ Ċ /** Ċ Ġ* ĠProvides Ġattributes Ġfor Ġthe Ġvariant . Ċ Ġ* Ċ Ġ* ĠThe Ġattributes Ġare Ġfrom Ġdata Ġmerged Ġfrom Ġthe Ġmanifest Ġand Ġproduct Ġflavor . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmerged Flavor Ġthe Ġmerged Ġproduct Ġflavor Ċ Ġ* Ġ@ param Ġbuild Type Ġthe Ġtype Ġused Ġfor Ġthe Ġbuild Ċ Ġ* Ġ@ param Ġis Test Variant Ġwhether Ġthe Ġcurrent Ġvariant Ġis Ġfor Ġa Ġtest Ġcomponent . Ċ Ġ* Ġ@ param Ġmanifest Supplier Ġthe Ġsupplier Ġof Ġmanifest Ġattributes . Ċ Ġ* Ġ@ param Ġmanifest File Ġthe Ġfile Ġfor Ġthe Ġmanifest . Ċ Ġ*/ Ċ class ĠVariant Attributes Provider ( ĊĠĠĠĠĠĠĠ Ġvar Ġmerged Flavor : ĠProduct Flavor , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbuild Type : ĠBuild Type , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġis Test Variant : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmanifest Supplier : ĠManifest Attribute Supplier , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmanifest File : ĠFile , ĊĠĠĠĠĠĠĠ Ġvar ĠfullName : ĠString ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġapplication Ġid Ġoverride Ġvalue Ġcoming Ġfrom Ġthe ĠProduct ĠFl avor Ġand / or Ġthe ĠBuild ĊĠĠĠĠ Ġ* ĠType . ĠIf Ġthe Ġpackage / id Ġis Ġnot Ġoverridden Ġthen Ġthis Ġreturns Ġnull . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġid Ġoverride Ġor Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġid Override : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġid Name Ġ= Ġmerged Flavor . application Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Suffix Ġ= ĠDefault Product Flavor . merge Application Id Suffix ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type . application Id Suffix , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmerged Flavor . application Id Suffix ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! id Suffix . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Name Ġ= Ġid Name Ġ?: ĠpackageName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Name Ġ= Ġif Ġ( id Suffix [ 0 ] Ġ== Ġ'.') Ġid Name Ġ+ Ġid Suffix Ġelse Ġid Name Ġ+ Ġ'.' Ġ+ Ġid Suffix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġid Name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġpackage Ġname Ġfrom Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġpackage Ġname Ġor Ġthrows Ġan Ġexception Ġif Ġnot Ġfound Ġin Ġthe Ġmanifest . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠpackageName : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck State (! is Test Variant ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmanifest Supplier .` package ` Ġ?: Ġthrow ĠRuntimeException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cannot Ġread ĠpackageName Ġfrom Ġ${ manifest File . absolute Path }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġsplit Ġname Ġfrom Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġsplit Ġname Ġor Ġnull Ġif Ġnot Ġfound . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsplit : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmanifest Supplier . split ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġversion Ġname Ġfor Ġthis Ġvariant . ĠThis Ġcould Ġbe Ġcoming Ġfrom Ġthe Ġmanifest Ġor Ġcould Ġbe ĊĠĠĠĠ Ġ* Ġoverridden Ġthrough Ġthe Ġproduct Ġfl avors , Ġand Ġcan Ġhave Ġa Ġsuffix Ġspecified Ġby Ġthe Ġbuild Ġtype . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġversion Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġversion Name : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġversion Name Ġ= Ġmerged Flavor . version Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġversion Suffix Ġ= Ġmerged Flavor . version Name Suffix ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version Name Ġ== Ġnull Ġ&& Ġ! is Test Variant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Name Ġ= Ġmanifest Supplier . version Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Suffix Ġ= ĠDefault Product Flavor . merge Version Name Suffix ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type . version Name Suffix , Ġversion Suffix ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version Suffix Ġ!= Ġnull Ġ&& Ġ! version Suffix . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Name Ġ= ĠStrings . null To Empty ( version Name ) Ġ+ Ġversion Suffix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġversion Name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġversion Ġcode Ġfor Ġthis Ġvariant . ĠThis Ġcould Ġbe Ġcoming Ġfrom Ġthe Ġmanifest Ġor Ġcould Ġbe ĊĠĠĠĠ Ġ* Ġoverridden Ġthrough Ġthe Ġproduct Ġfl avors , Ġand Ġcan Ġhave Ġa Ġsuffix Ġspecified Ġby Ġthe Ġbuild Ġtype . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġversion Ġcode Ġor Ġ- 1 Ġif Ġthere Ġwas Ġnon Ġdefined . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġversion Code : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġversion Code Ġ= Ġmerged Flavor . version Code Ġ?: Ġ- 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version Code Ġ== Ġ- 1 Ġ&& Ġ! is Test Variant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Code Ġ= Ġmanifest Supplier . version Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġversion Code ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġinstrument ation Ġrunner , Ġfound Ġin Ġthe Ġbuild Ġfile Ġor Ġmanifest Ġfile ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġinstrument ation Ġrunner Ġor Ġ` null ` Ġif Ġthere Ġis Ġnone Ġspecified . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġinstrument ation Runner : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmerged Flavor . test Instrumentation Runner Ġ?: Ġmanifest Supplier . instrumentation Runner ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġtarget Package Ġfrom Ġthe Ġinstrument ation Ġtag Ġin Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġtarget Package Ġor Ġ` null ` Ġif Ġthere Ġis Ġnone Ġspecified . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtarget Package : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmanifest Supplier . target Package ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġfunctional Test , Ġfound Ġin Ġthe Ġbuild Ġfile Ġor Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġfunctional Test Ġor Ġ` null ` Ġif Ġthere Ġis Ġnone Ġspecified . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġfunctional Test : ĠBoolean ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmerged Flavor . test Functional Test Ġ?: Ġmanifest Supplier . functional Test ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġhandle Profiling , Ġfound Ġin Ġthe Ġbuild Ġfile Ġor Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġhandle Profiling Ġor Ġ` null ` Ġif Ġthere Ġis Ġnone Ġspecified . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġhandle Profiling : ĠBoolean ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmerged Flavor . test Handle Profiling Ġ?: Ġmanifest Supplier . handle Profiling ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġtest Label Ġfrom Ġthe Ġinstrument ation Ġtag Ġin Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġtest Label Ġor Ġ` null ` Ġif Ġthere Ġis Ġnone Ġspecified . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtest Label : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmanifest Supplier . test Label ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġvalue Ġof Ġthe Ġ` extract Native Lib s ` Ġattribute Ġof Ġthe Ġ` application ` Ġtag , Ġif ĊĠĠĠĠ Ġ* Ġpresent Ġin Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġextract Native Lib s : ĠBoolean ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmanifest Supplier . extract Native Lib s ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġapplication ĠID Ġeven Ġif Ġthis Ġis Ġa Ġtest Ġvariant . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġapplication ĠID ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Application Id ( tested Package : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġid : ĠString ? ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Test Variant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġmerged Flavor . test Application Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ"$ tested Package . test " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== Ġtested Package ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Application Ġand Ġtest Ġapplication Ġid Ġcannot Ġbe Ġthe Ġsame : Ġboth Ġare Ġ$ id Ġfor Ġ$ fullName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfirst Ġget Ġpackage Ġoverride . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġit 's Ġnull , Ġthis Ġmeans Ġwe Ġjust Ġneed Ġthe Ġdefault Ġpackage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfrom Ġthe Ġmanifest Ġsince Ġboth Ġflavor Ġand Ġbuild Ġtype Ġdo Ġnothing . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid Override Ġ?: ĠpackageName ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġoriginal Ġapplication ĠID Ġbefore Ġany Ġoverrides Ġfrom Ġfl avors . ĠIf Ġthe Ġvariant Ġis Ġa ĊĠĠĠĠ Ġ* Ġtest Ġvariant , Ġthen Ġthe Ġapplication ĠID Ġis Ġthe Ġone Ġcoming Ġfrom Ġthe Ġconfiguration Ġof Ġthe Ġtested ĊĠĠĠĠ Ġ* Ġvariant , Ġand Ġthis Ġcall Ġis Ġsimilar Ġto Ġ[. getApplication Id ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġoriginal Ġapplication ĠID ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Original Application Id ( tested Package : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Test Variant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Application Id ( tested Package ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠpackageName ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġtest Ġapp Ġapplication ĠID , Ġwhich Ġshould Ġonly Ġbe Ġcalled Ġfrom Ġa Ġtest Ġvariant . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġtest Ġapplication ĠID ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Test Application Id ( tested Package : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck State ( is Test Variant ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! Strings . isNull OrEmpty ( merged Flavor . test Application Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġit 's Ġspecified Ġthrough Ġbuild Ġfile Ġread Ġfrom Ġthere ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerged Flavor . test Application Id !! ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġget Application Id () Ġcontains Ġrules Ġfor Ġgetting Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġapplication Id Ġfor Ġthe Ġtest Ġapp Ġfrom Ġthe Ġtested Ġapplication ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Application Id ( tested Package ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġversion Name Serializable Supplier : ĠSupplier < String ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġif Ġ( is Test Variant ) Ġnull Ġelse Ġmanifest File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Suffix Ġ= ĠDefault Product Flavor . merge Version Name Suffix ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type . version Name Suffix , Ġmerged Flavor . version Name Suffix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSerializable String Supplier ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest Supplier . is Manifest File Required , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmerged Flavor . version Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Suffix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġversion Code Serializable Supplier : ĠInt Supplier ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Code Ġ= Ġmerged Flavor . version Code Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġif Ġ( is Test Variant ) Ġnull Ġelse Ġmanifest File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSerializable Int Supplier ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest Supplier . is Manifest File Required , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠSerializable String Supplier ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmanifest File : ĠFile ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġis Manifest File Required : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġversion Name : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġversion Suffix : ĠString ? Ġ= Ġnull ) Ġ: ĠSupplier < String ? >, ĠSerializable Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcached Version Name : ĠString ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cached Version Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcached Version Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Version Name Ġ= Ġversion Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cached Version Name Ġ== Ġnull Ġ&& Ġmanifest File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Version Name Ġ= ĠDefault Manifest Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġtrue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Manifest File Required , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). version Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version Suffix Ġ!= Ġnull Ġ&& Ġ! version Suffix . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Version Name Ġ= ĠStrings . null To Empty ( cached Version Name ) Ġ+ Ġversion Suffix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcached Version Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠSerializable Int Supplier ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmanifest File : ĠFile ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġis Manifest File Required : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġversion Code : ĠInt Ġ= Ġ- 1 ) Ġ: ĠInt Supplier , ĠSerializable ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Cached : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget As Int (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Cached ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġversion Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version Code Ġ== Ġ- 1 Ġ&& Ġmanifest File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Code Ġ= ĠDefault Manifest Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġtrue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Manifest File Required , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). version Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Cached Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġversion Code ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ