Allow pre-singleton types to be registered in RegistrationContext

Bug: 181070625
Test: m droid
Change-Id: I708b78ed0b42ec55b0442307f40531cfe1233c2b
This commit is contained in:
Paul Duffin
2021-02-24 01:43:18 +00:00
parent b2773e116f
commit eafc16bf14
3 changed files with 16 additions and 2 deletions

View File

@@ -168,6 +168,7 @@ func ModuleTypeFactoriesForDocs() map[string]reflect.Value {
type RegistrationContext interface { type RegistrationContext interface {
RegisterModuleType(name string, factory ModuleFactory) RegisterModuleType(name string, factory ModuleFactory)
RegisterSingletonModuleType(name string, factory SingletonModuleFactory) RegisterSingletonModuleType(name string, factory SingletonModuleFactory)
RegisterPreSingletonType(name string, factory SingletonFactory)
RegisterSingletonType(name string, factory SingletonFactory) RegisterSingletonType(name string, factory SingletonFactory)
PreArchMutators(f RegisterMutatorFunc) PreArchMutators(f RegisterMutatorFunc)
@@ -208,6 +209,7 @@ var _ RegistrationContext = (*TestContext)(nil)
type initRegistrationContext struct { type initRegistrationContext struct {
moduleTypes map[string]ModuleFactory moduleTypes map[string]ModuleFactory
singletonTypes map[string]SingletonFactory singletonTypes map[string]SingletonFactory
preSingletonTypes map[string]SingletonFactory
moduleTypesForDocs map[string]reflect.Value moduleTypesForDocs map[string]reflect.Value
} }
@@ -238,6 +240,14 @@ func (ctx *initRegistrationContext) RegisterSingletonType(name string, factory S
RegisterSingletonType(name, factory) RegisterSingletonType(name, factory)
} }
func (ctx *initRegistrationContext) RegisterPreSingletonType(name string, factory SingletonFactory) {
if _, present := ctx.preSingletonTypes[name]; present {
panic(fmt.Sprintf("pre singleton type %q is already registered", name))
}
ctx.preSingletonTypes[name] = factory
RegisterPreSingletonType(name, factory)
}
func (ctx *initRegistrationContext) PreArchMutators(f RegisterMutatorFunc) { func (ctx *initRegistrationContext) PreArchMutators(f RegisterMutatorFunc) {
PreArchMutators(f) PreArchMutators(f)
} }

View File

@@ -140,6 +140,10 @@ func (ctx *TestContext) RegisterSingletonType(name string, factory SingletonFact
ctx.Context.RegisterSingletonType(name, SingletonFactoryAdaptor(ctx.Context, factory)) ctx.Context.RegisterSingletonType(name, SingletonFactoryAdaptor(ctx.Context, factory))
} }
func (ctx *TestContext) RegisterPreSingletonType(name string, factory SingletonFactory) {
ctx.Context.RegisterPreSingletonType(name, SingletonFactoryAdaptor(ctx.Context, factory))
}
func (ctx *TestContext) ModuleForTests(name, variant string) TestingModule { func (ctx *TestContext) ModuleForTests(name, variant string) TestingModule {
var module Module var module Module
ctx.VisitAllModules(func(m blueprint.Module) { ctx.VisitAllModules(func(m blueprint.Module) {

View File

@@ -74,8 +74,8 @@ func testContext(config android.Config) *android.TestContext {
ctx.PreDepsMutators(python.RegisterPythonPreDepsMutators) ctx.PreDepsMutators(python.RegisterPythonPreDepsMutators)
ctx.PostDepsMutators(android.RegisterOverridePostDepsMutators) ctx.PostDepsMutators(android.RegisterOverridePostDepsMutators)
ctx.RegisterPreSingletonType("overlay", android.SingletonFactoryAdaptor(ctx.Context, OverlaySingletonFactory)) ctx.RegisterPreSingletonType("overlay", OverlaySingletonFactory)
ctx.RegisterPreSingletonType("sdk_versions", android.SingletonFactoryAdaptor(ctx.Context, sdkPreSingletonFactory)) ctx.RegisterPreSingletonType("sdk_versions", sdkPreSingletonFactory)
android.RegisterPrebuiltMutators(ctx) android.RegisterPrebuiltMutators(ctx)