diff options
author | 2023-12-12 14:13:26 -0800 | |
---|---|---|
committer | 2023-12-14 16:12:20 -0800 | |
commit | 3c0a83d19f56061bc9f621372cc7a5245d1204f6 (patch) | |
tree | 4aad30e3db38c504452ba34eb531565f0b71b7f0 /android/testing.go | |
parent | e8eeec913f4c8cd00cfa30afc064b229fcdf0a51 (diff) |
Use generics for providers API
Using generics for the providers API allows a type to be associated
with a ProviderKey, resulting in a type-safe API without that doesn't
require runtime type assertions by every caller.
Unfortunately, Go does not allow generic types in methods, only in
functions [1]. This prevents a type-safe API on ModuleContext, and
requires moving the API to be functions that take a ModuleContext as
a parameter.
This CL creates the new API, but doesn't convert all of the callers.
[1] https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md#no-parameterized-methods)
Bug: 316410648
Test: builds
Change-Id: I3e30d68b966b730efd968166a38a25cc144bd6de
Diffstat (limited to 'android/testing.go')
-rw-r--r-- | android/testing.go | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/android/testing.go b/android/testing.go index fa4dffd9b..39a268b23 100644 --- a/android/testing.go +++ b/android/testing.go @@ -203,7 +203,17 @@ func (ctx *TestContext) HardCodedPreArchMutators(f RegisterMutatorFunc) { ctx.PreArchMutators(f) } -func (ctx *TestContext) ModuleProvider(m blueprint.Module, p blueprint.ProviderKey) interface{} { +func (ctx *TestContext) ModuleProvider(m blueprint.Module, p blueprint.AnyProviderKey) any { + value, _ := ctx.Context.ModuleProvider(m, p) + return value +} + +func (ctx *TestContext) ModuleHasProvider(m blueprint.Module, p blueprint.AnyProviderKey) bool { + _, ok := ctx.Context.ModuleProvider(m, p) + return ok +} + +func (ctx *TestContext) moduleProvider(m blueprint.Module, p blueprint.AnyProviderKey) (any, bool) { return ctx.Context.ModuleProvider(m, p) } @@ -225,6 +235,12 @@ func (ctx *TestContext) PreArchBp2BuildMutators(f RegisterMutatorFunc) { ctx.bp2buildPreArch = append(ctx.bp2buildPreArch, f) } +func (ctx *TestContext) OtherModuleProviderAdaptor() OtherModuleProviderContext { + return NewOtherModuleProviderAdaptor(func(module blueprint.Module, provider blueprint.AnyProviderKey) (any, bool) { + return ctx.moduleProvider(module, provider) + }) +} + // registeredComponentOrder defines the order in which a sortableComponent type is registered at // runtime and provides support for reordering the components registered for a test in the same // way. |