Output properties before sets in snapshot module
This ensures a consistent output irrespective of whether property sets are created before or after the properties are added. This provides a little more flexibility in the creation code which allows that to be simplfied. Also switches from using reflection to a type switch. Bug: 142918168 Test: m nothing Change-Id: Ia025bfc751f1217d1658de6fb8e15091ea0ea9ff
This commit is contained in:
parent
0174d8d2c9
commit
07ef3cb1fd
3 changed files with 29 additions and 17 deletions
|
@ -1212,12 +1212,12 @@ module_exports_snapshot {
|
|||
name: "myexports@current",
|
||||
device_supported: false,
|
||||
host_supported: true,
|
||||
native_static_libs: ["myexports_mynativelib@current"],
|
||||
target: {
|
||||
host: {
|
||||
compile_multilib: "64",
|
||||
},
|
||||
},
|
||||
native_static_libs: ["myexports_mynativelib@current"],
|
||||
}`),
|
||||
checkAllCopyRules(`
|
||||
include/Test.h -> include/include/Test.h
|
||||
|
|
|
@ -920,6 +920,7 @@ java_import {
|
|||
module_exports_snapshot {
|
||||
name: "myexports@current",
|
||||
host_supported: true,
|
||||
java_libs: ["myexports_myjavalib@current"],
|
||||
target: {
|
||||
android: {
|
||||
java_header_libs: ["myexports_androidjavalib@current"],
|
||||
|
@ -928,7 +929,6 @@ module_exports_snapshot {
|
|||
java_header_libs: ["myexports_hostjavalib@current"],
|
||||
},
|
||||
},
|
||||
java_libs: ["myexports_myjavalib@current"],
|
||||
}
|
||||
`),
|
||||
checkAllCopyRules(`
|
||||
|
|
|
@ -515,41 +515,53 @@ func generateBpContents(contents *generatedContents, bpFile *bpFile) {
|
|||
|
||||
func outputPropertySet(contents *generatedContents, set *bpPropertySet) {
|
||||
contents.Indent()
|
||||
|
||||
// Output the properties first, followed by the nested sets. This ensures a
|
||||
// consistent output irrespective of whether property sets are created before
|
||||
// or after the properties. This simplifies the creation of the module.
|
||||
for _, name := range set.order {
|
||||
value := set.getValue(name)
|
||||
|
||||
reflectedValue := reflect.ValueOf(value)
|
||||
t := reflectedValue.Type()
|
||||
|
||||
kind := t.Kind()
|
||||
switch kind {
|
||||
case reflect.Slice:
|
||||
length := reflectedValue.Len()
|
||||
switch v := value.(type) {
|
||||
case []string:
|
||||
length := len(v)
|
||||
if length > 1 {
|
||||
contents.Printfln("%s: [", name)
|
||||
contents.Indent()
|
||||
for i := 0; i < length; i = i + 1 {
|
||||
contents.Printfln("%q,", reflectedValue.Index(i).Interface())
|
||||
contents.Printfln("%q,", v[i])
|
||||
}
|
||||
contents.Dedent()
|
||||
contents.Printfln("],")
|
||||
} else if length == 0 {
|
||||
contents.Printfln("%s: [],", name)
|
||||
} else {
|
||||
contents.Printfln("%s: [%q],", name, reflectedValue.Index(0).Interface())
|
||||
contents.Printfln("%s: [%q],", name, v[0])
|
||||
}
|
||||
case reflect.Bool:
|
||||
contents.Printfln("%s: %t,", name, reflectedValue.Bool())
|
||||
|
||||
case reflect.Ptr:
|
||||
contents.Printfln("%s: {", name)
|
||||
outputPropertySet(contents, reflectedValue.Interface().(*bpPropertySet))
|
||||
contents.Printfln("},")
|
||||
case bool:
|
||||
contents.Printfln("%s: %t,", name, v)
|
||||
|
||||
case *bpPropertySet:
|
||||
// Do not write property sets in the properties phase.
|
||||
|
||||
default:
|
||||
contents.Printfln("%s: %q,", name, value)
|
||||
}
|
||||
}
|
||||
|
||||
for _, name := range set.order {
|
||||
value := set.getValue(name)
|
||||
|
||||
// Only write property sets in the sets phase.
|
||||
switch v := value.(type) {
|
||||
case *bpPropertySet:
|
||||
contents.Printfln("%s: {", name)
|
||||
outputPropertySet(contents, v)
|
||||
contents.Printfln("},")
|
||||
}
|
||||
}
|
||||
|
||||
contents.Dedent()
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue