diff --git a/android/all_teams.go b/android/all_teams.go index e3c2e70bd..01be396d5 100644 --- a/android/all_teams.go +++ b/android/all_teams.go @@ -1,6 +1,7 @@ package android import ( + "path" "path/filepath" "android/soong/android/team_proto" @@ -153,6 +154,11 @@ func (t *allTeamsSingleton) lookupTeamForAllModules() *team_proto.AllTeams { } else { teamProperties, found = t.lookupDefaultTeam(m.bpFile) } + // Deal with one blueprint file including another by looking up the default + // in the main Android.bp rather than one listed with "build = [My.bp]" + if !found { + teamProperties, found = t.lookupDefaultTeam(path.Join(path.Dir(m.bpFile), "Android.bp")) + } trendy_team_id := "" if found { diff --git a/android/all_teams_test.go b/android/all_teams_test.go index 96ed92fc5..fa8c048d0 100644 --- a/android/all_teams_test.go +++ b/android/all_teams_test.go @@ -264,6 +264,84 @@ func TestPackageLookup(t *testing.T) { AssertDeepEquals(t, "compare maps", expectedTeams, actualTeams) } +func TestPackageLookupForIncludedBlueprintFiles(t *testing.T) { + t.Parallel() + rootBp := ` + package { default_team: "team_top"} + team { + name: "team_top", + trendy_team_id: "trendy://team_top", + } + build = ["include.bp"] + ` + includeBp := ` + fake { + name: "IncludedModule", + } ` + + ctx := GroupFixturePreparers( + prepareForTestWithTeamAndFakes, + PrepareForTestWithPackageModule, + FixtureRegisterWithContext(func(ctx RegistrationContext) { + ctx.RegisterParallelSingletonType("all_teams", AllTeamsFactory) + }), + FixtureAddTextFile("Android.bp", rootBp), + FixtureAddTextFile("include.bp", includeBp), + ).RunTest(t) + + var teams *team_proto.AllTeams + teams = getTeamProtoOutput(t, ctx) + + // map of module name -> trendy team name. + actualTeams := make(map[string]*string) + for _, teamProto := range teams.Teams { + actualTeams[teamProto.GetTargetName()] = teamProto.TrendyTeamId + } + expectedTeams := map[string]*string{ + "IncludedModule": proto.String("trendy://team_top"), + } + AssertDeepEquals(t, "compare maps", expectedTeams, actualTeams) +} + +func TestPackageLookupForIncludedBlueprintFilesWithPackageInChildBlueprint(t *testing.T) { + t.Parallel() + rootBp := ` + team { + name: "team_top", + trendy_team_id: "trendy://team_top", + } + build = ["include.bp"] + ` + includeBp := ` + package { default_team: "team_top"} + fake { + name: "IncludedModule", + } ` + + ctx := GroupFixturePreparers( + prepareForTestWithTeamAndFakes, + PrepareForTestWithPackageModule, + FixtureRegisterWithContext(func(ctx RegistrationContext) { + ctx.RegisterParallelSingletonType("all_teams", AllTeamsFactory) + }), + FixtureAddTextFile("Android.bp", rootBp), + FixtureAddTextFile("include.bp", includeBp), + ).RunTest(t) + + var teams *team_proto.AllTeams + teams = getTeamProtoOutput(t, ctx) + + // map of module name -> trendy team name. + actualTeams := make(map[string]*string) + for _, teamProto := range teams.Teams { + actualTeams[teamProto.GetTargetName()] = teamProto.TrendyTeamId + } + expectedTeams := map[string]*string{ + "IncludedModule": proto.String("trendy://team_top"), + } + AssertDeepEquals(t, "compare maps", expectedTeams, actualTeams) +} + type fakeForTests struct { ModuleBase