From 370fd0b0500e8817eb1f4cc94ba0fbc29b8444a8 Mon Sep 17 00:00:00 2001 From: Anton Hansson Date: Fri, 22 Jan 2021 15:05:04 +0000 Subject: [PATCH] Minor cleanup in prebuilt_apis Use ints instead of strings for version comparison. Bug: 178171189 Test: m Change-Id: I53d71b138a64b902b3f00adafec5d354630a5e35 --- java/prebuilt_apis.go | 39 +++++++++++++++++++-------------------- java/testing.go | 7 +++++-- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/java/prebuilt_apis.go b/java/prebuilt_apis.go index bcc6cc0cf..0ffbaaa40 100644 --- a/java/prebuilt_apis.go +++ b/java/prebuilt_apis.go @@ -15,7 +15,7 @@ package java import ( - "sort" + "strconv" "strings" "github.com/google/blueprint/proptools" @@ -173,39 +173,38 @@ func prebuiltApiFiles(mctx android.LoadHookContext, p *prebuiltApis) { // construct a map to find out the latest api file path // for each (, ) pair. type latestApiInfo struct { - module string - scope string - apiver string - path string + module string + scope string + version int + path string } - m := make(map[string]latestApiInfo) + // Create filegroups for all (, ) triplets, + // and a "latest" filegroup variant for each (, ) pair + m := make(map[string]latestApiInfo) for _, f := range files { - // create a filegroup for each api txt file localPath := strings.TrimPrefix(f, mydir) module, apiver, scope := parseApiFilePath(mctx, localPath) createFilegroup(mctx, module, scope, apiver, localPath) - // find the latest apiver + version, err := strconv.Atoi(apiver) + if err != nil { + mctx.ModuleErrorf("Found finalized API files in non-numeric dir %v", apiver) + return + } + key := module + "." + scope info, ok := m[key] if !ok { - m[key] = latestApiInfo{module, scope, apiver, localPath} - } else if len(apiver) > len(info.apiver) || (len(apiver) == len(info.apiver) && - strings.Compare(apiver, info.apiver) > 0) { - info.apiver = apiver + m[key] = latestApiInfo{module, scope, version, localPath} + } else if version > info.version { + info.version = version info.path = localPath m[key] = info } } - // create filegroups for the latest version of (, ) pairs - // sort the keys in order to make build.ninja stable - keys := make([]string, 0, len(m)) - for k := range m { - keys = append(keys, k) - } - sort.Strings(keys) - for _, k := range keys { + // Sort the keys in order to make build.ninja stable + for _, k := range android.SortedStringKeys(m) { info := m[k] createFilegroup(mctx, info.module, info.scope, "latest", info.path) } diff --git a/java/testing.go b/java/testing.go index 0b1e2eb74..445b8b2fa 100644 --- a/java/testing.go +++ b/java/testing.go @@ -86,8 +86,11 @@ func prebuiltApisFilesForLibs(apiLevels []string, sdkLibs []string) map[string][ for _, lib := range sdkLibs { for _, scope := range []string{"public", "system", "module-lib", "system-server", "test"} { fs[fmt.Sprintf("prebuilts/sdk/%s/%s/%s.jar", level, scope, lib)] = nil - fs[fmt.Sprintf("prebuilts/sdk/%s/%s/api/%s.txt", level, scope, lib)] = nil - fs[fmt.Sprintf("prebuilts/sdk/%s/%s/api/%s-removed.txt", level, scope, lib)] = nil + // No finalized API files for "current" + if level != "current" { + fs[fmt.Sprintf("prebuilts/sdk/%s/%s/api/%s.txt", level, scope, lib)] = nil + fs[fmt.Sprintf("prebuilts/sdk/%s/%s/api/%s-removed.txt", level, scope, lib)] = nil + } } } fs[fmt.Sprintf("prebuilts/sdk/%s/public/framework.aidl", level)] = nil