diff options
author | 2022-04-26 09:08:55 -0400 | |
---|---|---|
committer | 2022-04-26 09:08:55 -0400 | |
commit | f31c90050cf47cc8a46aefb21beff628ef90ad9b (patch) | |
tree | ebd4940a023a4c3c9910df71bad4f9535a0384a9 | |
parent | e31a071389c2fdecbe4bb7bf56db94662fbd3a4a (diff) |
Share CreateModule between hooks & mutators
These contained duplicate code, but evolved separately in the effort to
identify module type of those created with CreateModule. This refactors
to share a common implementation between the two.
Test: m json-module-graph and verify Type fields
Test: CI
Change-Id: Ifdb9a006d9b1bef7411f9ce3a4384797693b4bfc
-rw-r--r-- | android/hooks.go | 25 | ||||
-rw-r--r-- | android/mutator.go | 28 |
2 files changed, 25 insertions, 28 deletions
diff --git a/android/hooks.go b/android/hooks.go index 5e3a4a7e7..2ad3b5fa5 100644 --- a/android/hooks.go +++ b/android/hooks.go @@ -89,8 +89,17 @@ func (l *loadHookContext) PrependProperties(props ...interface{}) { l.appendPrependHelper(props, proptools.PrependMatchingProperties) } -func (l *loadHookContext) CreateModule(factory ModuleFactory, props ...interface{}) Module { - inherited := []interface{}{&l.Module().base().commonProperties} +func (l *loadHookContext) createModule(factory blueprint.ModuleFactory, name string, props ...interface{}) blueprint.Module { + return l.bp.CreateModule(factory, name, props...) +} + +type createModuleContext interface { + Module() Module + createModule(blueprint.ModuleFactory, string, ...interface{}) blueprint.Module +} + +func createModule(ctx createModuleContext, factory ModuleFactory, ext string, props ...interface{}) Module { + inherited := []interface{}{&ctx.Module().base().commonProperties} var typeName string if typeNameLookup, ok := ModuleTypeByFactory()[reflect.ValueOf(factory)]; ok { @@ -101,12 +110,12 @@ func (l *loadHookContext) CreateModule(factory ModuleFactory, props ...interface filePath, _ := factoryFunc.FileLine(factoryPtr) typeName = fmt.Sprintf("%s_%s", path.Base(filePath), factoryFunc.Name()) } - typeName = typeName + "_loadHookModule" + typeName = typeName + "_" + ext - module := l.bp.CreateModule(ModuleFactoryAdaptor(factory), typeName, append(inherited, props...)...).(Module) + module := ctx.createModule(ModuleFactoryAdaptor(factory), typeName, append(inherited, props...)...).(Module) - if l.Module().base().variableProperties != nil && module.base().variableProperties != nil { - src := l.Module().base().variableProperties + if ctx.Module().base().variableProperties != nil && module.base().variableProperties != nil { + src := ctx.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 @@ -122,6 +131,10 @@ func (l *loadHookContext) CreateModule(factory ModuleFactory, props ...interface return module } +func (l *loadHookContext) CreateModule(factory ModuleFactory, props ...interface{}) Module { + return createModule(l, factory, "_loadHookModule", props...) +} + func (l *loadHookContext) registerScopedModuleType(name string, factory blueprint.ModuleFactory) { l.bp.RegisterScopedModuleType(name, factory) } diff --git a/android/mutator.go b/android/mutator.go index 739e4ee6d..02a614353 100644 --- a/android/mutator.go +++ b/android/mutator.go @@ -15,12 +15,9 @@ package android import ( - "reflect" - "android/soong/bazel" "github.com/google/blueprint" - "github.com/google/blueprint/proptools" ) // Phases: @@ -553,29 +550,16 @@ func (t *topDownMutatorContext) Rename(name string) { t.Module().base().commonProperties.DebugName = name } -func (t *topDownMutatorContext) CreateModule(factory ModuleFactory, props ...interface{}) Module { - 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)).Interface(), - } - err := proptools.AppendMatchingProperties(dst, src, nil) - if err != nil { - panic(err) - } - } +func (t *topDownMutatorContext) createModule(factory blueprint.ModuleFactory, name string, props ...interface{}) blueprint.Module { + return t.bp.CreateModule(factory, name, props...) +} - return module +func (t *topDownMutatorContext) CreateModule(factory ModuleFactory, props ...interface{}) Module { + return createModule(t, factory, "_topDownMutatorModule", props...) } func (t *topDownMutatorContext) createModuleWithoutInheritance(factory ModuleFactory, props ...interface{}) Module { - module := t.bp.CreateModule(ModuleFactoryAdaptor(factory), props...).(Module) + module := t.bp.CreateModule(ModuleFactoryAdaptor(factory), "", props...).(Module) return module } |