Merge "Allow pre-singleton types to be registered in RegistrationContext" am: ebbf33c42b am: de8121e465 am: ea4ad11547

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1605033

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I65bc9e2477dd09b894bef083a857b560376b3090
This commit is contained in:
Paul Duffin
2021-02-24 23:00:14 +00:00
committed by Automerger Merge Worker
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)