Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 35dbafcf authored by Paul Duffin's avatar Paul Duffin
Browse files

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
Bug: 153306490
Test: m nothing
Merged-In: Ia025bfc751f1217d1658de6fb8e15091ea0ea9ff
Change-Id: Ia025bfc751f1217d1658de6fb8e15091ea0ea9ff
parent 2bdbe83e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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(`
+27 −15
Original line number Diff line number Diff line
@@ -510,41 +510,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()
}