Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f22fe41c authored by Colin Cross's avatar Colin Cross
Browse files

Add PostApex mutator stage

The sabi mutator needs to run after the apex mutator because it accesses
the apex providers.  Right now it ensures it runs later by running in
the FinalDeps stage, but that prevents it from being converted to a
TransitionMutator.  Add a PostApex mutator stage that runs after PostDeps
but before FinalDeps.

Test: all soong tests pass
Bug: 367784740
Flag: EXEMPT refactor
Change-Id: I539f38ab6faa49972ec908cd54e5c80a8185ec6c
parent cceefc88
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -32,11 +32,11 @@ import (
// collateGloballyRegisteredMutators constructs the list of mutators that have been registered
// with the InitRegistrationContext and will be used at runtime.
func collateGloballyRegisteredMutators() sortableComponents {
	return collateRegisteredMutators(preArch, preDeps, postDeps, finalDeps)
	return collateRegisteredMutators(preArch, preDeps, postDeps, postApex, finalDeps)
}

// collateRegisteredMutators constructs a single list of mutators from the separate lists.
func collateRegisteredMutators(preArch, preDeps, postDeps, finalDeps []RegisterMutatorFunc) sortableComponents {
func collateRegisteredMutators(preArch, preDeps, postDeps, postApex, finalDeps []RegisterMutatorFunc) sortableComponents {
	mctx := &registerMutatorsContext{}

	register := func(funcs []RegisterMutatorFunc) {
@@ -53,6 +53,8 @@ func collateRegisteredMutators(preArch, preDeps, postDeps, finalDeps []RegisterM

	register(postDeps)

	register(postApex)

	mctx.finalPhase = true
	register(finalDeps)

@@ -166,6 +168,8 @@ var postDeps = []RegisterMutatorFunc{
	RegisterOverridePostDepsMutators,
}

var postApex = []RegisterMutatorFunc{}

var finalDeps = []RegisterMutatorFunc{}

func PreArchMutators(f RegisterMutatorFunc) {
@@ -180,6 +184,10 @@ func PostDepsMutators(f RegisterMutatorFunc) {
	postDeps = append(postDeps, f)
}

func PostApexMutators(f RegisterMutatorFunc) {
	postApex = append(postApex, f)
}

func FinalDepsMutators(f RegisterMutatorFunc) {
	finalDeps = append(finalDeps, f)
}
+5 −0
Original line number Diff line number Diff line
@@ -235,6 +235,7 @@ type RegistrationContext interface {

	PreDepsMutators(f RegisterMutatorFunc)
	PostDepsMutators(f RegisterMutatorFunc)
	PostApexMutators(f RegisterMutatorFunc)
	FinalDepsMutators(f RegisterMutatorFunc)
}

@@ -326,6 +327,10 @@ func (ctx *initRegistrationContext) PostDepsMutators(f RegisterMutatorFunc) {
	PostDepsMutators(f)
}

func (ctx *initRegistrationContext) PostApexMutators(f RegisterMutatorFunc) {
	PostApexMutators(f)
}

func (ctx *initRegistrationContext) FinalDepsMutators(f RegisterMutatorFunc) {
	FinalDepsMutators(f)
}
+7 −3
Original line number Diff line number Diff line
@@ -197,7 +197,7 @@ func NewTestArchContext(config Config) *TestContext {

type TestContext struct {
	*Context
	preArch, preDeps, postDeps, finalDeps []RegisterMutatorFunc
	preArch, preDeps, postDeps, postApex, finalDeps []RegisterMutatorFunc
	NameResolver                                    *NameResolver

	// The list of singletons registered for the test.
@@ -229,6 +229,10 @@ func (ctx *TestContext) PostDepsMutators(f RegisterMutatorFunc) {
	ctx.postDeps = append(ctx.postDeps, f)
}

func (ctx *TestContext) PostApexMutators(f RegisterMutatorFunc) {
	ctx.postApex = append(ctx.postApex, f)
}

func (ctx *TestContext) FinalDepsMutators(f RegisterMutatorFunc) {
	ctx.finalDeps = append(ctx.finalDeps, f)
}
@@ -449,7 +453,7 @@ func globallyRegisteredComponentsOrder() *registrationSorter {
func (ctx *TestContext) Register() {
	globalOrder := globallyRegisteredComponentsOrder()

	mutators := collateRegisteredMutators(ctx.preArch, ctx.preDeps, ctx.postDeps, ctx.finalDeps)
	mutators := collateRegisteredMutators(ctx.preArch, ctx.preDeps, ctx.postDeps, ctx.postApex, ctx.finalDeps)
	// Ensure that the mutators used in the test are in the same order as they are used at runtime.
	globalOrder.mutatorOrder.enforceOrdering(mutators)
	mutators.registerAll(ctx.Context)