Filter product variable property structs
For each module, take the default product variable properties and create a new type that contains only the properties that exist in the current module. This will provide better errors when attemping to set product variable properties that will never get used for a module, and fixes errors when a module attempts to use a product variable that also contains properties that don't apply to the current module. Fixes: 79249983 Test: TestProductVariables Test: m checkbuild Change-Id: I4dc24f7781b8ce798651cfc8bf3563005a92c13d
This commit is contained in:
@@ -15,6 +15,8 @@
|
||||
package android
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
"github.com/google/blueprint/proptools"
|
||||
)
|
||||
@@ -244,8 +246,23 @@ func (t *topDownMutatorContext) Rename(name string) {
|
||||
}
|
||||
|
||||
func (t *topDownMutatorContext) CreateModule(factory ModuleFactory, props ...interface{}) Module {
|
||||
inherited := []interface{}{&t.Module().base().commonProperties, &t.Module().base().variableProperties}
|
||||
inherited := []interface{}{&t.Module().base().commonProperties}
|
||||
module := t.bp.CreateModule(ModuleFactoryAdaptor(factory), append(inherited, props...)...).(Module)
|
||||
|
||||
if t.Module().base().variableProperties != nil && module.base().variableProperties != nil {
|
||||
src := t.Module().base().variableProperties
|
||||
dst := []interface{}{
|
||||
module.base().variableProperties,
|
||||
// Put an empty copy of the src properties into dst so that properties in src that are not in dst
|
||||
// don't cause a "failed to find property to extend" error.
|
||||
proptools.CloneEmptyProperties(reflect.ValueOf(src).Elem()).Interface(),
|
||||
}
|
||||
err := proptools.AppendMatchingProperties(dst, src, nil)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
return module
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user