Fix an override_module bug.

proptools.PrependProperties doesn't replace a pointer when both the src
and the dst have one. This prevented override_module from overriding
simple value pointer properties when the base module has existing
values. It turns out this was why the name property needed to be
overwritten manually.

Bug: 122957760
Test: app_test.go
Change-Id: I3302287c31a560422548c22fade95261ddbe606a
This commit is contained in:
Jaewoong Jung
2019-03-27 11:17:14 -07:00
parent ac7f27eab0
commit a641ee9cc7
2 changed files with 9 additions and 10 deletions

View File

@@ -134,10 +134,15 @@ func (b *OverridableModuleBase) setOverridesProperty(overridesProperty *[]string
// Overrides a base module with the given OverrideModule.
func (b *OverridableModuleBase) override(ctx BaseModuleContext, o OverrideModule) {
// Adds the base module to the overrides property, if exists, of the overriding module. See the
// comment on OverridableModuleBase.overridesProperty for details.
if b.overridesProperty != nil {
*b.overridesProperty = append(*b.overridesProperty, b.Name())
}
for _, p := range b.overridableProperties {
for _, op := range o.getOverridingProperties() {
if proptools.TypeEqual(p, op) {
err := proptools.PrependProperties(p, op, nil)
err := proptools.AppendProperties(p, op, nil)
if err != nil {
if propertyErr, ok := err.(*proptools.ExtendPropertyError); ok {
ctx.PropertyErrorf(propertyErr.Property, "%s", propertyErr.Err.Error())
@@ -148,13 +153,6 @@ func (b *OverridableModuleBase) override(ctx BaseModuleContext, o OverrideModule
}
}
}
// Adds the base module to the overrides property, if exists, of the overriding module. See the
// comment on OverridableModuleBase.overridesProperty for details.
if b.overridesProperty != nil {
*b.overridesProperty = append(*b.overridesProperty, b.Name())
}
// The base module name property has to be updated separately for Name() to work as intended.
b.module.base().nameProperties.Name = proptools.StringPtr(o.Name())
}
// Mutators for override/overridable modules. All the fun happens in these functions. It is critical