Merge "apexDepsMutator is a top-down mutator"

This commit is contained in:
Treehugger Robot
2020-02-13 22:29:23 +00:00
committed by Gerrit Code Review
2 changed files with 46 additions and 30 deletions

View File

@@ -38,9 +38,12 @@ type ApexModule interface {
Module
apexModuleBase() *ApexModuleBase
// Marks that this module should be built for the APEX of the specified name.
// Marks that this module should be built for the APEXes of the specified names.
// Call this before apex.apexMutator is run.
BuildForApex(apexName string)
BuildForApexes(apexNames []string)
// Returns the name of the APEXes that this modoule will be built for
ApexVariations() []string
// Returns the name of APEX that this module will be built for. Empty string
// is returned when 'IsForPlatform() == true'. Note that a module can be
@@ -66,7 +69,7 @@ type ApexModule interface {
IsInstallableToApex() bool
// Mutate this module into one or more variants each of which is built
// for an APEX marked via BuildForApex().
// for an APEX marked via BuildForApexes().
CreateApexVariations(mctx BottomUpMutatorContext) []Module
// Sets the name of the apex variant of this module. Called inside
@@ -110,14 +113,20 @@ func (m *ApexModuleBase) apexModuleBase() *ApexModuleBase {
return m
}
func (m *ApexModuleBase) BuildForApex(apexName string) {
func (m *ApexModuleBase) BuildForApexes(apexNames []string) {
m.apexVariationsLock.Lock()
defer m.apexVariationsLock.Unlock()
if !InList(apexName, m.apexVariations) {
m.apexVariations = append(m.apexVariations, apexName)
for _, apexName := range apexNames {
if !InList(apexName, m.apexVariations) {
m.apexVariations = append(m.apexVariations, apexName)
}
}
}
func (m *ApexModuleBase) ApexVariations() []string {
return m.apexVariations
}
func (m *ApexModuleBase) ApexName() string {
return m.ApexProperties.ApexName
}
@@ -218,18 +227,20 @@ func apexNamesMap() map[string]map[string]bool {
}
// Update the map to mark that a module named moduleName is directly or indirectly
// depended on by an APEX named apexName. Directly depending means that a module
// depended on by the specified APEXes. Directly depending means that a module
// is explicitly listed in the build definition of the APEX via properties like
// native_shared_libs, java_libs, etc.
func UpdateApexDependency(apexName string, moduleName string, directDep bool) {
func UpdateApexDependency(apexNames []string, moduleName string, directDep bool) {
apexNamesMapMutex.Lock()
defer apexNamesMapMutex.Unlock()
apexNames, ok := apexNamesMap()[moduleName]
if !ok {
apexNames = make(map[string]bool)
apexNamesMap()[moduleName] = apexNames
for _, apexName := range apexNames {
apexesForModule, ok := apexNamesMap()[moduleName]
if !ok {
apexesForModule = make(map[string]bool)
apexNamesMap()[moduleName] = apexesForModule
}
apexesForModule[apexName] = apexesForModule[apexName] || directDep
}
apexNames[apexName] = apexNames[apexName] || directDep
}
// TODO(b/146393795): remove this when b/146393795 is fixed