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

Commit eee5a41a authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Add a String() method to android.Module"

parents 28d36cac 9a36223d
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -129,6 +129,8 @@ func registerLoadHookMutator(ctx RegisterMutatorsContext) {

func LoadHookMutator(ctx TopDownMutatorContext) {
	if m, ok := ctx.Module().(Module); ok {
		m.base().commonProperties.DebugName = ctx.ModuleName()

		// Cast through *topDownMutatorContext because AppendProperties is implemented
		// on *topDownMutatorContext but not exposed through TopDownMutatorContext
		var loadHookCtx LoadHookContext = ctx.(*topDownMutatorContext)
+25 −0
Original line number Diff line number Diff line
@@ -203,6 +203,9 @@ type Module interface {
	RuleParamsForTests() map[blueprint.Rule]blueprint.RuleParams
	VariablesForTests() map[string]string

	// String returns a string that includes the module name and variants for printing during debugging.
	String() string

	// Get the qualified module id for this module.
	qualifiedModuleId(ctx BaseModuleContext) qualifiedModuleName

@@ -408,6 +411,11 @@ type commonProperties struct {
	NamespaceExportedToMake bool `blueprint:"mutated"`

	MissingDeps []string `blueprint:"mutated"`

	// Name and variant strings stored by mutators to enable Module.String()
	DebugName       string   `blueprint:"mutated"`
	DebugMutators   []string `blueprint:"mutated"`
	DebugVariations []string `blueprint:"mutated"`
}

type hostAndDeviceProperties struct {
@@ -625,6 +633,23 @@ func (m *ModuleBase) Name() string {
	return String(m.nameProperties.Name)
}

// String returns a string that includes the module name and variants for printing during debugging.
func (m *ModuleBase) String() string {
	sb := strings.Builder{}
	sb.WriteString(m.commonProperties.DebugName)
	sb.WriteString("{")
	for i := range m.commonProperties.DebugMutators {
		if i != 0 {
			sb.WriteString(",")
		}
		sb.WriteString(m.commonProperties.DebugMutators[i])
		sb.WriteString(":")
		sb.WriteString(m.commonProperties.DebugVariations[i])
	}
	sb.WriteString("}")
	return sb.String()
}

// BaseModuleName returns the name of the module as specified in the blueprints file.
func (m *ModuleBase) BaseModuleName() string {
	return String(m.nameProperties.Name)
+20 −2
Original line number Diff line number Diff line
@@ -239,6 +239,7 @@ func (t *topDownMutatorContext) MutatorName() string {

func (t *topDownMutatorContext) Rename(name string) {
	t.bp.Rename(name)
	t.Module().base().commonProperties.DebugName = name
}

func (t *topDownMutatorContext) CreateModule(factory blueprint.ModuleFactory, props ...interface{}) {
@@ -251,6 +252,7 @@ func (b *bottomUpMutatorContext) MutatorName() string {

func (b *bottomUpMutatorContext) Rename(name string) {
	b.bp.Rename(name)
	b.Module().base().commonProperties.DebugName = name
}

func (b *bottomUpMutatorContext) AddDependency(module blueprint.Module, tag blueprint.DependencyTag, name ...string) {
@@ -262,11 +264,27 @@ func (b *bottomUpMutatorContext) AddReverseDependency(module blueprint.Module, t
}

func (b *bottomUpMutatorContext) CreateVariations(variations ...string) []blueprint.Module {
	return b.bp.CreateVariations(variations...)
	modules := b.bp.CreateVariations(variations...)

	for i := range variations {
		base := modules[i].(Module).base()
		base.commonProperties.DebugMutators = append(base.commonProperties.DebugMutators, b.MutatorName())
		base.commonProperties.DebugVariations = append(base.commonProperties.DebugVariations, variations[i])
	}

	return modules
}

func (b *bottomUpMutatorContext) CreateLocalVariations(variations ...string) []blueprint.Module {
	return b.bp.CreateLocalVariations(variations...)
	modules := b.bp.CreateLocalVariations(variations...)

	for i := range variations {
		base := modules[i].(Module).base()
		base.commonProperties.DebugMutators = append(base.commonProperties.DebugMutators, b.MutatorName())
		base.commonProperties.DebugVariations = append(base.commonProperties.DebugVariations, variations[i])
	}

	return modules
}

func (b *bottomUpMutatorContext) SetDependencyVariation(variation string) {
+110 −2
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import (
type mutatorTestModule struct {
	ModuleBase
	props struct {
		Deps_missing_deps    []string
		Mutator_missing_deps []string
	}

	missingDeps []string
@@ -46,11 +48,11 @@ func (m *mutatorTestModule) GenerateAndroidBuildActions(ctx ModuleContext) {
}

func (m *mutatorTestModule) DepsMutator(ctx BottomUpMutatorContext) {
	ctx.AddDependency(ctx.Module(), nil, "regular_missing_dep")
	ctx.AddDependency(ctx.Module(), nil, m.props.Deps_missing_deps...)
}

func addMissingDependenciesMutator(ctx TopDownMutatorContext) {
	ctx.AddMissingDependencies([]string{"added_missing_dep"})
	ctx.AddMissingDependencies(ctx.Module().(*mutatorTestModule).props.Mutator_missing_deps)
}

func TestMutatorAddMissingDependencies(t *testing.T) {
@@ -68,6 +70,8 @@ func TestMutatorAddMissingDependencies(t *testing.T) {
	bp := `
		test {
			name: "foo",
			deps_missing_deps: ["regular_missing_dep"],
			mutator_missing_deps: ["added_missing_dep"],
		}
	`

@@ -89,3 +93,107 @@ func TestMutatorAddMissingDependencies(t *testing.T) {
		t.Errorf("want foo missing deps %q, got %q", w, g)
	}
}

func TestModuleString(t *testing.T) {
	ctx := NewTestContext()

	var moduleStrings []string

	ctx.PreArchMutators(func(ctx RegisterMutatorsContext) {
		ctx.BottomUp("pre_arch", func(ctx BottomUpMutatorContext) {
			moduleStrings = append(moduleStrings, ctx.Module().String())
			ctx.CreateVariations("a", "b")
		})
		ctx.TopDown("rename_top_down", func(ctx TopDownMutatorContext) {
			moduleStrings = append(moduleStrings, ctx.Module().String())
			ctx.Rename(ctx.Module().base().Name() + "_renamed1")
		})
	})

	ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) {
		ctx.BottomUp("pre_deps", func(ctx BottomUpMutatorContext) {
			moduleStrings = append(moduleStrings, ctx.Module().String())
			ctx.CreateVariations("c", "d")
		})
	})

	ctx.PostDepsMutators(func(ctx RegisterMutatorsContext) {
		ctx.BottomUp("post_deps", func(ctx BottomUpMutatorContext) {
			moduleStrings = append(moduleStrings, ctx.Module().String())
			ctx.CreateLocalVariations("e", "f")
		})
		ctx.BottomUp("rename_bottom_up", func(ctx BottomUpMutatorContext) {
			moduleStrings = append(moduleStrings, ctx.Module().String())
			ctx.Rename(ctx.Module().base().Name() + "_renamed2")
		})
		ctx.BottomUp("final", func(ctx BottomUpMutatorContext) {
			moduleStrings = append(moduleStrings, ctx.Module().String())
		})
	})

	ctx.RegisterModuleType("test", ModuleFactoryAdaptor(mutatorTestModuleFactory))

	bp := `
		test {
			name: "foo",
		}
	`

	mockFS := map[string][]byte{
		"Android.bp": []byte(bp),
	}

	ctx.MockFileSystem(mockFS)

	ctx.Register()

	config := TestConfig(buildDir, nil)

	_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
	FailIfErrored(t, errs)
	_, errs = ctx.PrepareBuildActions(config)
	FailIfErrored(t, errs)

	want := []string{
		// Initial name.
		"foo{}",

		// After pre_arch (reversed because rename_top_down is TopDown so it visits in reverse order).
		"foo{pre_arch:b}",
		"foo{pre_arch:a}",

		// After rename_top_down.
		"foo_renamed1{pre_arch:a}",
		"foo_renamed1{pre_arch:b}",

		// After pre_deps.
		"foo_renamed1{pre_arch:a,pre_deps:c}",
		"foo_renamed1{pre_arch:a,pre_deps:d}",
		"foo_renamed1{pre_arch:b,pre_deps:c}",
		"foo_renamed1{pre_arch:b,pre_deps:d}",

		// After post_deps.
		"foo_renamed1{pre_arch:a,pre_deps:c,post_deps:e}",
		"foo_renamed1{pre_arch:a,pre_deps:c,post_deps:f}",
		"foo_renamed1{pre_arch:a,pre_deps:d,post_deps:e}",
		"foo_renamed1{pre_arch:a,pre_deps:d,post_deps:f}",
		"foo_renamed1{pre_arch:b,pre_deps:c,post_deps:e}",
		"foo_renamed1{pre_arch:b,pre_deps:c,post_deps:f}",
		"foo_renamed1{pre_arch:b,pre_deps:d,post_deps:e}",
		"foo_renamed1{pre_arch:b,pre_deps:d,post_deps:f}",

		// After rename_bottom_up.
		"foo_renamed2{pre_arch:a,pre_deps:c,post_deps:e}",
		"foo_renamed2{pre_arch:a,pre_deps:c,post_deps:f}",
		"foo_renamed2{pre_arch:a,pre_deps:d,post_deps:e}",
		"foo_renamed2{pre_arch:a,pre_deps:d,post_deps:f}",
		"foo_renamed2{pre_arch:b,pre_deps:c,post_deps:e}",
		"foo_renamed2{pre_arch:b,pre_deps:c,post_deps:f}",
		"foo_renamed2{pre_arch:b,pre_deps:d,post_deps:e}",
		"foo_renamed2{pre_arch:b,pre_deps:d,post_deps:f}",
	}

	if !reflect.DeepEqual(moduleStrings, want) {
		t.Errorf("want module String() values:\n%q\ngot:\n%q", want, moduleStrings)
	}
}