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

Commit 054350e8 authored by Colin Cross's avatar Colin Cross Committed by Gerrit Code Review
Browse files

Merge "Use a minimal set of mutators, module types, and singletons for tests"

parents 33edec56 795c377e
Loading
Loading
Loading
Loading
+59 −23
Original line number Diff line number Diff line
@@ -14,7 +14,11 @@

package android

import "github.com/google/blueprint"
import (
	"sync"

	"github.com/google/blueprint"
)

// Mutator phases:
//   Pre-arch
@@ -23,8 +27,27 @@ import "github.com/google/blueprint"
//   Deps
//   PostDeps

func registerMutators() {
	ctx := registerMutatorsContext{}
var registerMutatorsOnce sync.Once
var registeredMutators []*mutator

func registerMutatorsToContext(ctx *blueprint.Context, mutators []*mutator) {
	for _, t := range mutators {
		var handle blueprint.MutatorHandle
		if t.bottomUpMutator != nil {
			handle = ctx.RegisterBottomUpMutator(t.name, t.bottomUpMutator)
		} else if t.topDownMutator != nil {
			handle = ctx.RegisterTopDownMutator(t.name, t.topDownMutator)
		}
		if t.parallel {
			handle.Parallel()
		}
	}
}

func registerMutators(ctx *blueprint.Context) {

	registerMutatorsOnce.Do(func() {
		ctx := &registerMutatorsContext{}

		register := func(funcs []RegisterMutatorFunc) {
			for _, f := range funcs {
@@ -50,9 +73,22 @@ func registerMutators() {
		ctx.BottomUp("prebuilt_replace", PrebuiltReplaceMutator).Parallel()

		register(postDeps)

		registeredMutators = ctx.mutators
	})

	registerMutatorsToContext(ctx, registeredMutators)
}

type registerMutatorsContext struct{}
func RegisterTestMutators(ctx *blueprint.Context) {
	mutators := registerMutatorsContext{}
	mutators.BottomUp("deps", depsMutator).Parallel()
	registerMutatorsToContext(ctx, mutators.mutators)
}

type registerMutatorsContext struct {
	mutators []*mutator
}

type RegisterMutatorsContext interface {
	TopDown(name string, m AndroidTopDownMutator) MutatorHandle
@@ -99,7 +135,7 @@ type androidBottomUpMutatorContext struct {
	androidBaseContextImpl
}

func (registerMutatorsContext) BottomUp(name string, m AndroidBottomUpMutator) MutatorHandle {
func (x *registerMutatorsContext) BottomUp(name string, m AndroidBottomUpMutator) MutatorHandle {
	f := func(ctx blueprint.BottomUpMutatorContext) {
		if a, ok := ctx.Module().(Module); ok {
			actx := &androidBottomUpMutatorContext{
@@ -110,11 +146,11 @@ func (registerMutatorsContext) BottomUp(name string, m AndroidBottomUpMutator) M
		}
	}
	mutator := &mutator{name: name, bottomUpMutator: f}
	mutators = append(mutators, mutator)
	x.mutators = append(x.mutators, mutator)
	return mutator
}

func (registerMutatorsContext) TopDown(name string, m AndroidTopDownMutator) MutatorHandle {
func (x *registerMutatorsContext) TopDown(name string, m AndroidTopDownMutator) MutatorHandle {
	f := func(ctx blueprint.TopDownMutatorContext) {
		if a, ok := ctx.Module().(Module); ok {
			actx := &androidTopDownMutatorContext{
@@ -125,7 +161,7 @@ func (registerMutatorsContext) TopDown(name string, m AndroidTopDownMutator) Mut
		}
	}
	mutator := &mutator{name: name, topDownMutator: f}
	mutators = append(mutators, mutator)
	x.mutators = append(x.mutators, mutator)
	return mutator
}

+2 −17
Original line number Diff line number Diff line
@@ -15,8 +15,6 @@
package android

import (
	"sync"

	"github.com/google/blueprint"
)

@@ -51,8 +49,6 @@ func RegisterSingletonType(name string, factory blueprint.SingletonFactory) {
	singletons = append(singletons, singleton{name, factory})
}

var registerMutatorsOnce sync.Once

func NewContext() *blueprint.Context {
	ctx := blueprint.NewContext()

@@ -64,19 +60,8 @@ func NewContext() *blueprint.Context {
		ctx.RegisterSingletonType(t.name, t.factory)
	}

	registerMutatorsOnce.Do(registerMutators)
	registerMutators(ctx)

	for _, t := range mutators {
		var handle blueprint.MutatorHandle
		if t.bottomUpMutator != nil {
			handle = ctx.RegisterBottomUpMutator(t.name, t.bottomUpMutator)
		} else if t.topDownMutator != nil {
			handle = ctx.RegisterTopDownMutator(t.name, t.topDownMutator)
		}
		if t.parallel {
			handle.Parallel()
		}
	}
	ctx.RegisterSingletonType("env", EnvSingleton)

	return ctx
+5 −1
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import (
	"testing"

	"android/soong/android"
	"android/soong/genrule"

	"github.com/google/blueprint"
)

@@ -121,13 +123,15 @@ func TestDataTests(t *testing.T) {

	for _, test := range testDataTests {
		t.Run(test.name, func(t *testing.T) {
			ctx := android.NewContext()
			ctx := blueprint.NewContext()
			android.RegisterTestMutators(ctx)
			ctx.MockFileSystem(map[string][]byte{
				"Blueprints":     []byte(`subdirs = ["dir"]`),
				"dir/Blueprints": []byte(test.modules),
				"dir/baz":        nil,
				"dir/bar/baz":    nil,
			})
			ctx.RegisterModuleType("filegroup", genrule.FileGroupFactory)
			ctx.RegisterModuleType("test", newTest)

			_, errs := ctx.ParseBlueprintsFiles("Blueprints")
+2 −2
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ import (
)

func init() {
	android.RegisterModuleType("filegroup", fileGroupFactory)
	android.RegisterModuleType("filegroup", FileGroupFactory)
}

type fileGroupProperties struct {
@@ -48,7 +48,7 @@ var _ android.SourceFileProducer = (*fileGroup)(nil)
// filegroup modules contain a list of files, and can be used to export files across package
// boundaries.  filegroups (and genrules) can be referenced from srcs properties of other modules
// using the syntax ":module".
func fileGroupFactory() (blueprint.Module, []interface{}) {
func FileGroupFactory() (blueprint.Module, []interface{}) {
	module := &fileGroup{}

	return android.InitAndroidModule(module, &module.properties)