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

Commit 843f0972 authored by Paul Duffin's avatar Paul Duffin Committed by Gerrit Code Review
Browse files

Merge "Output properties before sets in snapshot module"

parents 2c732606 07ef3cb1
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()
}