Merge changes Ib07d4410,I0b306292

* changes:
  ApexInfo doesn't pass MinSdkVersion as string, but as ApiLevel
  Remove nativeApiLevelFromUserWithDefault
This commit is contained in:
Jiyong Park 2021-04-15 23:21:55 +00:00 committed by Gerrit Code Review
commit 7b4fb51919
6 changed files with 29 additions and 44 deletions

View File

@ -43,10 +43,8 @@ type ApexInfo struct {
// mergeApexVariations. // mergeApexVariations.
ApexVariationName string ApexVariationName string
// Serialized ApiLevel that this module has to support at minimum. Should be accessed via // ApiLevel that this module has to support at minimum.
// MinSdkVersion() method. Cannot be stored in its struct form because this is cloned into MinSdkVersion ApiLevel
// properties structs, and ApiLevel has private members.
MinSdkVersionStr string
// True if this module comes from an updatable apexBundle. // True if this module comes from an updatable apexBundle.
Updatable bool Updatable bool
@ -82,19 +80,13 @@ var ApexInfoProvider = blueprint.NewMutatorProvider(ApexInfo{}, "apex")
// have to be built twice, but only once. In that case, the two apex variations apex.a and apex.b // have to be built twice, but only once. In that case, the two apex variations apex.a and apex.b
// are configured to have the same alias variation named apex29. // are configured to have the same alias variation named apex29.
func (i ApexInfo) mergedName(ctx PathContext) string { func (i ApexInfo) mergedName(ctx PathContext) string {
name := "apex" + strconv.Itoa(i.MinSdkVersion(ctx).FinalOrFutureInt()) name := "apex" + strconv.Itoa(i.MinSdkVersion.FinalOrFutureInt())
for _, sdk := range i.RequiredSdks { for _, sdk := range i.RequiredSdks {
name += "_" + sdk.Name + "_" + sdk.Version name += "_" + sdk.Name + "_" + sdk.Version
} }
return name return name
} }
// MinSdkVersion gives the api level that this module has to support at minimum. This is from the
// min_sdk_version property of the containing apexBundle.
func (i ApexInfo) MinSdkVersion(ctx PathContext) ApiLevel {
return ApiLevelOrPanic(ctx, i.MinSdkVersionStr)
}
// IsForPlatform tells whether this module is for the platform or not. If false is returned, it // IsForPlatform tells whether this module is for the platform or not. If false is returned, it
// means that this apex variant of the module is built for an APEX. // means that this apex variant of the module is built for an APEX.
func (i ApexInfo) IsForPlatform() bool { func (i ApexInfo) IsForPlatform() bool {

View File

@ -33,10 +33,10 @@ func Test_mergeApexVariations(t *testing.T) {
{ {
name: "single", name: "single",
in: []ApexInfo{ in: []ApexInfo{
{"foo", "current", false, nil, []string{"foo"}, nil, NotForPrebuiltApex}, {"foo", FutureApiLevel, false, nil, []string{"foo"}, nil, NotForPrebuiltApex},
}, },
wantMerged: []ApexInfo{ wantMerged: []ApexInfo{
{"apex10000", "current", false, nil, []string{"foo"}, nil, NotForPrebuiltApex}, {"apex10000", FutureApiLevel, false, nil, []string{"foo"}, nil, NotForPrebuiltApex},
}, },
wantAliases: [][2]string{ wantAliases: [][2]string{
{"foo", "apex10000"}, {"foo", "apex10000"},
@ -45,11 +45,11 @@ func Test_mergeApexVariations(t *testing.T) {
{ {
name: "merge", name: "merge",
in: []ApexInfo{ in: []ApexInfo{
{"foo", "current", false, SdkRefs{{"baz", "1"}}, []string{"foo"}, nil, NotForPrebuiltApex}, {"foo", FutureApiLevel, false, SdkRefs{{"baz", "1"}}, []string{"foo"}, nil, NotForPrebuiltApex},
{"bar", "current", false, SdkRefs{{"baz", "1"}}, []string{"bar"}, nil, NotForPrebuiltApex}, {"bar", FutureApiLevel, false, SdkRefs{{"baz", "1"}}, []string{"bar"}, nil, NotForPrebuiltApex},
}, },
wantMerged: []ApexInfo{ wantMerged: []ApexInfo{
{"apex10000_baz_1", "current", false, SdkRefs{{"baz", "1"}}, []string{"bar", "foo"}, nil, false}}, {"apex10000_baz_1", FutureApiLevel, false, SdkRefs{{"baz", "1"}}, []string{"bar", "foo"}, nil, false}},
wantAliases: [][2]string{ wantAliases: [][2]string{
{"bar", "apex10000_baz_1"}, {"bar", "apex10000_baz_1"},
{"foo", "apex10000_baz_1"}, {"foo", "apex10000_baz_1"},
@ -58,12 +58,12 @@ func Test_mergeApexVariations(t *testing.T) {
{ {
name: "don't merge version", name: "don't merge version",
in: []ApexInfo{ in: []ApexInfo{
{"foo", "current", false, nil, []string{"foo"}, nil, NotForPrebuiltApex}, {"foo", FutureApiLevel, false, nil, []string{"foo"}, nil, NotForPrebuiltApex},
{"bar", "30", false, nil, []string{"bar"}, nil, NotForPrebuiltApex}, {"bar", uncheckedFinalApiLevel(30), false, nil, []string{"bar"}, nil, NotForPrebuiltApex},
}, },
wantMerged: []ApexInfo{ wantMerged: []ApexInfo{
{"apex30", "30", false, nil, []string{"bar"}, nil, NotForPrebuiltApex}, {"apex30", uncheckedFinalApiLevel(30), false, nil, []string{"bar"}, nil, NotForPrebuiltApex},
{"apex10000", "current", false, nil, []string{"foo"}, nil, NotForPrebuiltApex}, {"apex10000", FutureApiLevel, false, nil, []string{"foo"}, nil, NotForPrebuiltApex},
}, },
wantAliases: [][2]string{ wantAliases: [][2]string{
{"bar", "apex30"}, {"bar", "apex30"},
@ -73,11 +73,11 @@ func Test_mergeApexVariations(t *testing.T) {
{ {
name: "merge updatable", name: "merge updatable",
in: []ApexInfo{ in: []ApexInfo{
{"foo", "current", false, nil, []string{"foo"}, nil, NotForPrebuiltApex}, {"foo", FutureApiLevel, false, nil, []string{"foo"}, nil, NotForPrebuiltApex},
{"bar", "current", true, nil, []string{"bar"}, nil, NotForPrebuiltApex}, {"bar", FutureApiLevel, true, nil, []string{"bar"}, nil, NotForPrebuiltApex},
}, },
wantMerged: []ApexInfo{ wantMerged: []ApexInfo{
{"apex10000", "current", true, nil, []string{"bar", "foo"}, nil, NotForPrebuiltApex}, {"apex10000", FutureApiLevel, true, nil, []string{"bar", "foo"}, nil, NotForPrebuiltApex},
}, },
wantAliases: [][2]string{ wantAliases: [][2]string{
{"bar", "apex10000"}, {"bar", "apex10000"},
@ -87,12 +87,12 @@ func Test_mergeApexVariations(t *testing.T) {
{ {
name: "don't merge sdks", name: "don't merge sdks",
in: []ApexInfo{ in: []ApexInfo{
{"foo", "current", false, SdkRefs{{"baz", "1"}}, []string{"foo"}, nil, NotForPrebuiltApex}, {"foo", FutureApiLevel, false, SdkRefs{{"baz", "1"}}, []string{"foo"}, nil, NotForPrebuiltApex},
{"bar", "current", false, SdkRefs{{"baz", "2"}}, []string{"bar"}, nil, NotForPrebuiltApex}, {"bar", FutureApiLevel, false, SdkRefs{{"baz", "2"}}, []string{"bar"}, nil, NotForPrebuiltApex},
}, },
wantMerged: []ApexInfo{ wantMerged: []ApexInfo{
{"apex10000_baz_2", "current", false, SdkRefs{{"baz", "2"}}, []string{"bar"}, nil, NotForPrebuiltApex}, {"apex10000_baz_2", FutureApiLevel, false, SdkRefs{{"baz", "2"}}, []string{"bar"}, nil, NotForPrebuiltApex},
{"apex10000_baz_1", "current", false, SdkRefs{{"baz", "1"}}, []string{"foo"}, nil, NotForPrebuiltApex}, {"apex10000_baz_1", FutureApiLevel, false, SdkRefs{{"baz", "1"}}, []string{"foo"}, nil, NotForPrebuiltApex},
}, },
wantAliases: [][2]string{ wantAliases: [][2]string{
{"bar", "apex10000_baz_2"}, {"bar", "apex10000_baz_2"},
@ -102,15 +102,15 @@ func Test_mergeApexVariations(t *testing.T) {
{ {
name: "don't merge when for prebuilt_apex", name: "don't merge when for prebuilt_apex",
in: []ApexInfo{ in: []ApexInfo{
{"foo", "current", false, nil, []string{"foo"}, nil, NotForPrebuiltApex}, {"foo", FutureApiLevel, false, nil, []string{"foo"}, nil, NotForPrebuiltApex},
{"bar", "current", true, nil, []string{"bar"}, nil, NotForPrebuiltApex}, {"bar", FutureApiLevel, true, nil, []string{"bar"}, nil, NotForPrebuiltApex},
// This one should not be merged in with the others because it is for // This one should not be merged in with the others because it is for
// a prebuilt_apex. // a prebuilt_apex.
{"baz", "current", true, nil, []string{"baz"}, nil, ForPrebuiltApex}, {"baz", FutureApiLevel, true, nil, []string{"baz"}, nil, ForPrebuiltApex},
}, },
wantMerged: []ApexInfo{ wantMerged: []ApexInfo{
{"apex10000", "current", true, nil, []string{"bar", "foo"}, nil, NotForPrebuiltApex}, {"apex10000", FutureApiLevel, true, nil, []string{"bar", "foo"}, nil, NotForPrebuiltApex},
{"baz", "current", true, nil, []string{"baz"}, nil, ForPrebuiltApex}, {"baz", FutureApiLevel, true, nil, []string{"baz"}, nil, ForPrebuiltApex},
}, },
wantAliases: [][2]string{ wantAliases: [][2]string{
{"bar", "apex10000"}, {"bar", "apex10000"},

View File

@ -903,7 +903,7 @@ func (a *apexBundle) ApexInfoMutator(mctx android.TopDownMutatorContext) {
// be built for this apexBundle. // be built for this apexBundle.
apexInfo := android.ApexInfo{ apexInfo := android.ApexInfo{
ApexVariationName: mctx.ModuleName(), ApexVariationName: mctx.ModuleName(),
MinSdkVersionStr: minSdkVersion.String(), MinSdkVersion: minSdkVersion,
RequiredSdks: a.RequiredSdks(), RequiredSdks: a.RequiredSdks(),
Updatable: a.Updatable(), Updatable: a.Updatable(),
InApexes: []string{mctx.ModuleName()}, InApexes: []string{mctx.ModuleName()},

View File

@ -53,14 +53,6 @@ func nativeApiLevelFromUser(ctx android.BaseModuleContext,
return value, nil return value, nil
} }
func nativeApiLevelFromUserWithDefault(ctx android.BaseModuleContext,
raw string, defaultValue string) (android.ApiLevel, error) {
if raw == "" {
raw = defaultValue
}
return nativeApiLevelFromUser(ctx, raw)
}
func nativeApiLevelOrPanic(ctx android.BaseModuleContext, func nativeApiLevelOrPanic(ctx android.BaseModuleContext,
raw string) android.ApiLevel { raw string) android.ApiLevel {
value, err := nativeApiLevelFromUser(ctx, raw) value, err := nativeApiLevelFromUser(ctx, raw)

View File

@ -2499,7 +2499,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
c.apexSdkVersion = android.FutureApiLevel c.apexSdkVersion = android.FutureApiLevel
apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo)
if !apexInfo.IsForPlatform() { if !apexInfo.IsForPlatform() {
c.apexSdkVersion = apexInfo.MinSdkVersion(ctx) c.apexSdkVersion = apexInfo.MinSdkVersion
} }
if android.InList("hwaddress", ctx.Config().SanitizeDevice()) { if android.InList("hwaddress", ctx.Config().SanitizeDevice()) {

View File

@ -20,6 +20,7 @@ import (
"sync" "sync"
"github.com/google/blueprint" "github.com/google/blueprint"
"github.com/google/blueprint/proptools"
"android/soong/android" "android/soong/android"
) )
@ -142,8 +143,8 @@ func (this *stubDecorator) initializeProperties(ctx BaseModuleContext) bool {
return false return false
} }
this.unversionedUntil, err = nativeApiLevelFromUserWithDefault(ctx, str := proptools.StringDefault(this.properties.Unversioned_until, "minimum")
String(this.properties.Unversioned_until), "minimum") this.unversionedUntil, err = nativeApiLevelFromUser(ctx, str)
if err != nil { if err != nil {
ctx.PropertyErrorf("unversioned_until", err.Error()) ctx.PropertyErrorf("unversioned_until", err.Error())
return false return false