Add OtherModuleHasProvider to blueprint. Bug: 377723687 Test: Unit tests and compare the ninja and mk files generated. Change-Id: I0d24c5b2fedf47f2e5716c44c51928b83dfe17d9
diff --git a/module_ctx.go b/module_ctx.go index b04aed9..7fc8e43 100644 --- a/module_ctx.go +++ b/module_ctx.go
@@ -385,6 +385,8 @@ // This method shouldn't be used directly, prefer the type-safe android.OtherModuleProvider instead. OtherModuleProvider(m Module, provider AnyProviderKey) (any, bool) + OtherModuleHasProvider(m Module, provider AnyProviderKey) bool + // OtherModuleIsAutoGenerated returns true if a module has been generated from another module, // instead of being defined in Android.bp file OtherModuleIsAutoGenerated(m Module) bool @@ -675,6 +677,11 @@ return m.context.provider(module, provider.provider()) } +func (m *baseModuleContext) OtherModuleHasProvider(logicModule Module, provider AnyProviderKey) bool { + module := m.context.moduleInfo[getWrappedModule(logicModule)] + return m.context.hasProvider(module, provider.provider()) +} + func (m *baseModuleContext) Provider(provider AnyProviderKey) (any, bool) { return m.context.provider(m.module, provider.provider()) }
diff --git a/provider.go b/provider.go index 8f9120d..05485d6 100644 --- a/provider.go +++ b/provider.go
@@ -203,6 +203,28 @@ // Once Go has generics the return value can be typed and the type assert by callers can be dropped: // provider(type T)(m *moduleInfo, provider ProviderKey(T)) T func (c *Context) provider(m *moduleInfo, provider *providerKey) (any, bool) { + validateProvider(c, m, provider) + if len(m.providers) > provider.id { + if p := m.providers[provider.id]; p != nil { + return p, true + } + } + + return nil, false +} + +func (c *Context) hasProvider(m *moduleInfo, provider *providerKey) bool { + validateProvider(c, m, provider) + if len(m.providers) > provider.id { + if p := m.providers[provider.id]; p != nil { + return true + } + } + + return false +} + +func validateProvider(c *Context, m *moduleInfo, provider *providerKey) { if provider.mutator == "" { if !m.finishedGenerateBuildActions { panic(fmt.Sprintf("Can't get value of provider %s before GenerateBuildActions finished", @@ -215,14 +237,6 @@ provider.typ, provider.mutator)) } } - - if len(m.providers) > provider.id { - if p := m.providers[provider.id]; p != nil { - return p, true - } - } - - return nil, false } func (c *Context) mutatorFinishedForModule(mutator *mutatorInfo, m *moduleInfo) bool {