Clean up sortedKeys function
This introduces a generic function SortedStringKeys which can be used to
get a slice of sorted string keys for all kinds of maps having string
keys.
Bug: N/A
Test: m
Change-Id: I542194c68984d909b7ad1dbf060d4d3a98f0ef23
diff --git a/android/module.go b/android/module.go
index 1c36279..394d0f4 100644
--- a/android/module.go
+++ b/android/module.go
@@ -18,7 +18,6 @@
"fmt"
"path"
"path/filepath"
- "sort"
"strings"
"text/scanner"
@@ -1628,17 +1627,8 @@
return
}
- sortedKeys := func(m map[string]Paths) []string {
- s := make([]string, 0, len(m))
- for k := range m {
- s = append(s, k)
- }
- sort.Strings(s)
- return s
- }
-
// Ensure ancestor directories are in modulesInDir
- dirs := sortedKeys(modulesInDir)
+ dirs := SortedStringKeys(modulesInDir)
for _, dir := range dirs {
dir := parentDir(dir)
for dir != "." && dir != "/" {
@@ -1651,7 +1641,6 @@
}
// Make directories build their direct subdirectories
- dirs = sortedKeys(modulesInDir)
for _, dir := range dirs {
p := parentDir(dir)
if p != "." && p != "/" {
@@ -1708,8 +1697,7 @@
}
// Wrap those into host|host-cross|target phony rules
- osClasses := sortedKeys(osClass)
- for _, class := range osClasses {
+ for _, class := range SortedStringKeys(osClass) {
ctx.Build(pctx, BuildParams{
Rule: blueprint.Phony,
Output: PathForPhony(ctx, class),
diff --git a/android/util.go b/android/util.go
index f7a3437..3b8bc78 100644
--- a/android/util.go
+++ b/android/util.go
@@ -16,6 +16,7 @@
import (
"fmt"
+ "reflect"
"regexp"
"runtime"
"sort"
@@ -77,10 +78,15 @@
return string(ret)
}
-func sortedKeys(m map[string][]string) []string {
- s := make([]string, 0, len(m))
- for k := range m {
- s = append(s, k)
+func SortedStringKeys(m interface{}) []string {
+ v := reflect.ValueOf(m)
+ if v.Kind() != reflect.Map {
+ panic(fmt.Sprintf("%#v is not a map", m))
+ }
+ keys := v.MapKeys()
+ s := make([]string, 0, len(keys))
+ for _, key := range keys {
+ s = append(s, key.String())
}
sort.Strings(s)
return s
diff --git a/androidmk/Android.bp b/androidmk/Android.bp
index 1d939b0..79fe530 100644
--- a/androidmk/Android.bp
+++ b/androidmk/Android.bp
@@ -30,6 +30,7 @@
"androidmk-parser",
"blueprint-parser",
"bpfix-lib",
+ "soong-android",
],
}
diff --git a/androidmk/cmd/androidmk/android.go b/androidmk/cmd/androidmk/android.go
index 24057af..62aa3dc 100644
--- a/androidmk/cmd/androidmk/android.go
+++ b/androidmk/cmd/androidmk/android.go
@@ -15,9 +15,9 @@
package main
import (
+ "android/soong/android"
mkparser "android/soong/androidmk/parser"
"fmt"
- "sort"
"strings"
bpparser "github.com/google/blueprint/parser"
@@ -335,15 +335,6 @@
}
}
-func sortedMapKeys(inputMap map[string]string) (sortedKeys []string) {
- keys := make([]string, 0, len(inputMap))
- for key := range inputMap {
- keys = append(keys, key)
- }
- sort.Strings(keys)
- return keys
-}
-
// splitAndAssign splits a Make list into components and then
// creates the corresponding variable assignments.
func splitAndAssign(ctx variableAssignmentContext, splitFunc listSplitFunc, namesByClassification map[string]string) error {
@@ -357,7 +348,7 @@
return err
}
- for _, nameClassification := range sortedMapKeys(namesByClassification) {
+ for _, nameClassification := range android.SortedStringKeys(namesByClassification) {
name := namesByClassification[nameClassification]
if component, ok := lists[nameClassification]; ok && !emptyList(component) {
err = setVariable(ctx.file, ctx.append, ctx.prefix, name, component, true)