diff --git a/android/defaults.go b/android/defaults.go index fd707a45f..6a908ea83 100644 --- a/android/defaults.go +++ b/android/defaults.go @@ -176,18 +176,18 @@ func InitDefaultsModule(module DefaultsModule) { defaultsVisibility := module.defaultsVisibility() module.AddProperties(&base.nameProperties, defaultsVisibility) - // The defaults_visibility property controls the visibility of a defaults module. - base.primaryVisibilityProperty = - newVisibilityProperty("defaults_visibility", &defaultsVisibility.Defaults_visibility) - // Unlike non-defaults modules the visibility property is not stored in m.base().commonProperties. - // Instead it is stored in a separate instance of commonProperties created above so use that. + // Instead it is stored in a separate instance of commonProperties created above so clear the + // existing list of properties. + clearVisibilityProperties(module) + + // The defaults_visibility property controls the visibility of a defaults module so it must be + // set as the primary property, which also adds it to the list. + setPrimaryVisibilityProperty(module, "defaults_visibility", &defaultsVisibility.Defaults_visibility) + // The visibility property needs to be checked (but not parsed) by the visibility module during - // its checking phase and parsing phase. - base.visibilityPropertyInfo = []visibilityProperty{ - base.primaryVisibilityProperty, - newVisibilityProperty("visibility", &commonProperties.Visibility), - } + // its checking phase and parsing phase so add it to the list as a normal property. + AddVisibilityProperty(module, "visibility", &commonProperties.Visibility) base.module = module } diff --git a/android/module.go b/android/module.go index 02b2c8926..f5cfe6601 100644 --- a/android/module.go +++ b/android/module.go @@ -611,10 +611,8 @@ func InitAndroidModule(m Module) { base.customizableProperties = m.GetProperties() // The default_visibility property needs to be checked and parsed by the visibility module during - // its checking and parsing phases. - base.primaryVisibilityProperty = - newVisibilityProperty("visibility", &base.commonProperties.Visibility) - base.visibilityPropertyInfo = []visibilityProperty{base.primaryVisibilityProperty} + // its checking and parsing phases so make it the primary visibility property. + setPrimaryVisibilityProperty(m, "visibility", &base.commonProperties.Visibility) } func InitAndroidArchModule(m Module, hod HostOrDeviceSupported, defaultMultilib Multilib) { diff --git a/android/package.go b/android/package.go index 077c4a464..bb5f4e79e 100644 --- a/android/package.go +++ b/android/package.go @@ -101,10 +101,8 @@ func PackageFactory() Module { module.AddProperties(&module.properties) // The default_visibility property needs to be checked and parsed by the visibility module during - // its checking and parsing phases. - module.primaryVisibilityProperty = - newVisibilityProperty("default_visibility", &module.properties.Default_visibility) - module.visibilityPropertyInfo = []visibilityProperty{module.primaryVisibilityProperty} + // its checking and parsing phases so make it the primary visibility property. + setPrimaryVisibilityProperty(module, "default_visibility", &module.properties.Default_visibility) return module } diff --git a/android/visibility.go b/android/visibility.go index 3f04123cd..ab1644465 100644 --- a/android/visibility.go +++ b/android/visibility.go @@ -480,3 +480,28 @@ func EffectiveVisibilityRules(ctx BaseModuleContext, module Module) []string { return rule.Strings() } + +// Clear the default visibility properties so they can be replaced. +func clearVisibilityProperties(module Module) { + module.base().visibilityPropertyInfo = nil +} + +// Add a property that contains visibility rules so that they are checked for +// correctness. +func AddVisibilityProperty(module Module, name string, stringsProperty *[]string) { + addVisibilityProperty(module, name, stringsProperty) +} + +func addVisibilityProperty(module Module, name string, stringsProperty *[]string) visibilityProperty { + base := module.base() + property := newVisibilityProperty(name, stringsProperty) + base.visibilityPropertyInfo = append(base.visibilityPropertyInfo, property) + return property +} + +// Set the primary visibility property. +// +// Also adds the property to the list of properties to be validated. +func setPrimaryVisibilityProperty(module Module, name string, stringsProperty *[]string) { + module.base().primaryVisibilityProperty = addVisibilityProperty(module, name, stringsProperty) +}