in tools/migration/crosstool_to_starlark_lib.go [542:601]
func getStringArrStatement(attr string, arrValToIds map[string][]string,
cToolchainIdentifiers map[string]CToolchainIdentifier, depth int, plainString bool) string {
var b bytes.Buffer
if len(arrValToIds) == 0 {
b.WriteString(fmt.Sprintf("%s%s = []\n", getTabs(depth), attr))
} else if len(arrValToIds) == 1 {
for value := range arrValToIds {
var arr []string
if value == "" {
arr = []string{}
} else if value == "None" {
b.WriteString(fmt.Sprintf("%s%s = None\n", getTabs(depth), attr))
break
} else {
arr = strings.Split(value, "{arrayFieldDelimiter}")
}
b.WriteString(
fmt.Sprintf(
"%s%s = %s\n",
getTabs(depth),
attr,
makeStringArr(arr, depth+1, plainString)))
break
}
} else {
first := true
var keys []string
for k := range arrValToIds {
keys = append(keys, k)
}
sort.Strings(keys)
for _, value := range keys {
ids := arrValToIds[value]
branch := "elif"
if first {
branch = "if"
}
first = false
var arr []string
if value == "" {
arr = []string{}
} else if value == "None" {
b.WriteString(
getIfStatement(
branch, ids, attr, "None", cToolchainIdentifiers,
depth /* isPlainString= */, true))
continue
} else {
arr = strings.Split(value, "{arrayFieldDelimiter}")
}
b.WriteString(
getIfStatement(branch, ids, attr,
makeStringArr(arr, depth+1, plainString),
cToolchainIdentifiers, depth /* isPlainString= */, false))
}
b.WriteString(fmt.Sprintf("%selse:\n%sfail(\"Unreachable\")\n", getTabs(depth), getTabs(depth+1)))
}
b.WriteString("\n")
return b.String()
}