From 7212dbef03157f0bd048410c07283e4f1232b876 Mon Sep 17 00:00:00 2001 From: Anton Hansson Date: Tue, 20 Sep 2022 17:08:49 +0000 Subject: [PATCH] Tweak logic for when extension txt is latest Always use the latest extension as the latest API, regardless of the current base extension version. This makes it so that we can bump the base in master without changing which txt is considered latest. Also extend the error check to apply more widely (which caught an error in the extension 3 finalization). Bug: 228017107 Test: m checkapi (with api break & bumped base) Test: prebuilt_apis_test.go Change-Id: Ia10eb41ff500c566736f0d29a29984a99386bb6f --- java/prebuilt_apis.go | 9 ++++----- java/prebuilt_apis_test.go | 29 +++++++++++++++++++---------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/java/prebuilt_apis.go b/java/prebuilt_apis.go index 944970783..c6acd55e5 100644 --- a/java/prebuilt_apis.go +++ b/java/prebuilt_apis.go @@ -255,12 +255,11 @@ func prebuiltApiFiles(mctx android.LoadHookContext, p *prebuiltApis) { if p.properties.Extensions_dir != nil { extensionApiFiles := globExtensionDirs(mctx, p, "api/*.txt") for k, v := range getLatest(extensionApiFiles) { - if v.version > mctx.Config().PlatformBaseSdkExtensionVersion() { - if _, exists := latest[k]; !exists { - mctx.ModuleErrorf("Module %v finalized for extension %d but never during an API level; likely error", v.module, v.version) - } - latest[k] = v + if _, exists := latest[k]; !exists { + mctx.ModuleErrorf("Module %v finalized for extension %d but never during an API level; likely error", v.module, v.version) } + // The extension version is always at least as new as the last sdk int version (potentially identical) + latest[k] = v } } diff --git a/java/prebuilt_apis_test.go b/java/prebuilt_apis_test.go index 75422ad45..2b8435325 100644 --- a/java/prebuilt_apis_test.go +++ b/java/prebuilt_apis_test.go @@ -61,7 +61,7 @@ func TestPrebuiltApis_SystemModulesCreation(t *testing.T) { } func TestPrebuiltApis_WithExtensions(t *testing.T) { - runTestWithBaseExtensionLevel := func(v int) (foo_input string, bar_input string) { + runTestWithBaseExtensionLevel := func(v int) (foo_input, bar_input, baz_input string) { result := android.GroupFixturePreparers( prepareForJavaTest, android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { @@ -69,7 +69,7 @@ func TestPrebuiltApis_WithExtensions(t *testing.T) { }), FixtureWithPrebuiltApisAndExtensions(map[string][]string{ "31": {"foo"}, - "32": {"foo", "bar"}, + "32": {"foo", "bar", "baz"}, "current": {"foo", "bar"}, }, map[string][]string{ "1": {"foo"}, @@ -78,15 +78,24 @@ func TestPrebuiltApis_WithExtensions(t *testing.T) { ).RunTest(t) foo_input = result.ModuleForTests("foo.api.public.latest", "").Rule("generator").Implicits[0].String() bar_input = result.ModuleForTests("bar.api.public.latest", "").Rule("generator").Implicits[0].String() + baz_input = result.ModuleForTests("baz.api.public.latest", "").Rule("generator").Implicits[0].String() return } - // Here, the base extension level is 1, so extension level 2 is the latest - foo_input, bar_input := runTestWithBaseExtensionLevel(1) - android.AssertStringEquals(t, "Expected latest = extension level 2", "prebuilts/sdk/extensions/2/public/api/foo.txt", foo_input) - android.AssertStringEquals(t, "Expected latest = extension level 2", "prebuilts/sdk/extensions/2/public/api/bar.txt", bar_input) + // Extension 2 is the latest for both foo and bar, finalized after the base extension version. + foo_input, bar_input, baz_input := runTestWithBaseExtensionLevel(1) + android.AssertStringEquals(t, "Expected latest foo = extension level 2", "prebuilts/sdk/extensions/2/public/api/foo.txt", foo_input) + android.AssertStringEquals(t, "Expected latest bar = extension level 2", "prebuilts/sdk/extensions/2/public/api/bar.txt", bar_input) + android.AssertStringEquals(t, "Expected latest baz = api level 32", "prebuilts/sdk/32/public/api/baz.txt", baz_input) - // Here, the base extension level is 2, so 2 is not later than 32. - foo_input, bar_input = runTestWithBaseExtensionLevel(2) - android.AssertStringEquals(t, "Expected latest = api level 32", "prebuilts/sdk/32/public/api/foo.txt", foo_input) - android.AssertStringEquals(t, "Expected latest = api level 32", "prebuilts/sdk/32/public/api/bar.txt", bar_input) + // Extension 2 is the latest for both foo and bar, finalized together with 32 + foo_input, bar_input, baz_input = runTestWithBaseExtensionLevel(2) + android.AssertStringEquals(t, "Expected latest foo = extension level 2", "prebuilts/sdk/extensions/2/public/api/foo.txt", foo_input) + android.AssertStringEquals(t, "Expected latest bar = extension level 2", "prebuilts/sdk/extensions/2/public/api/bar.txt", bar_input) + android.AssertStringEquals(t, "Expected latest baz = api level 32", "prebuilts/sdk/32/public/api/baz.txt", baz_input) + + // Extension 3 is the current extension, but it has not yet been finalized. + foo_input, bar_input, baz_input = runTestWithBaseExtensionLevel(3) + android.AssertStringEquals(t, "Expected latest foo = extension level 2", "prebuilts/sdk/extensions/2/public/api/foo.txt", foo_input) + android.AssertStringEquals(t, "Expected latest bar = extension level 2", "prebuilts/sdk/extensions/2/public/api/bar.txt", bar_input) + android.AssertStringEquals(t, "Expected latest baz = api level 32", "prebuilts/sdk/32/public/api/baz.txt", baz_input) }