Merge "Refactor the printing of an sdk snapshot's Android.bp contents" am: e59cad2089
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1742966 Change-Id: Ia1389619734eaad926e34132cb4140763bb1f62a
This commit is contained in:
commit
7210d02ad2
1 changed files with 65 additions and 32 deletions
|
@ -114,8 +114,16 @@ func (gc *generatedContents) Dedent() {
|
||||||
gc.indentLevel--
|
gc.indentLevel--
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gc *generatedContents) Printfln(format string, args ...interface{}) {
|
// IndentedPrintf will add spaces to indent the line to the appropriate level before printing the
|
||||||
fmt.Fprintf(&(gc.content), strings.Repeat(" ", gc.indentLevel)+format+"\n", args...)
|
// arguments.
|
||||||
|
func (gc *generatedContents) IndentedPrintf(format string, args ...interface{}) {
|
||||||
|
fmt.Fprintf(&(gc.content), strings.Repeat(" ", gc.indentLevel)+format, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnindentedPrintf does not add spaces to indent the line to the appropriate level before printing
|
||||||
|
// the arguments.
|
||||||
|
func (gc *generatedContents) UnindentedPrintf(format string, args ...interface{}) {
|
||||||
|
fmt.Fprintf(&(gc.content), format, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gf *generatedFile) build(pctx android.PackageContext, ctx android.BuilderContext, implicits android.Paths) {
|
func (gf *generatedFile) build(pctx android.PackageContext, ctx android.BuilderContext, implicits android.Paths) {
|
||||||
|
@ -742,13 +750,13 @@ func generateBpContents(contents *generatedContents, bpFile *bpFile) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateFilteredBpContents(contents *generatedContents, bpFile *bpFile, moduleFilter func(module *bpModule) bool) {
|
func generateFilteredBpContents(contents *generatedContents, bpFile *bpFile, moduleFilter func(module *bpModule) bool) {
|
||||||
contents.Printfln("// This is auto-generated. DO NOT EDIT.")
|
contents.IndentedPrintf("// This is auto-generated. DO NOT EDIT.\n")
|
||||||
for _, bpModule := range bpFile.order {
|
for _, bpModule := range bpFile.order {
|
||||||
if moduleFilter(bpModule) {
|
if moduleFilter(bpModule) {
|
||||||
contents.Printfln("")
|
contents.IndentedPrintf("\n")
|
||||||
contents.Printfln("%s {", bpModule.moduleType)
|
contents.IndentedPrintf("%s {\n", bpModule.moduleType)
|
||||||
outputPropertySet(contents, bpModule.bpPropertySet)
|
outputPropertySet(contents, bpModule.bpPropertySet)
|
||||||
contents.Printfln("}")
|
contents.IndentedPrintf("}\n")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -759,7 +767,7 @@ func outputPropertySet(contents *generatedContents, set *bpPropertySet) {
|
||||||
addComment := func(name string) {
|
addComment := func(name string) {
|
||||||
if text, ok := set.comments[name]; ok {
|
if text, ok := set.comments[name]; ok {
|
||||||
for _, line := range strings.Split(text, "\n") {
|
for _, line := range strings.Split(text, "\n") {
|
||||||
contents.Printfln("// %s", line)
|
contents.IndentedPrintf("// %s\n", line)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -776,29 +784,8 @@ func outputPropertySet(contents *generatedContents, set *bpPropertySet) {
|
||||||
}
|
}
|
||||||
|
|
||||||
addComment(name)
|
addComment(name)
|
||||||
switch v := value.(type) {
|
reflectValue := reflect.ValueOf(value)
|
||||||
case []string:
|
outputNamedValue(contents, name, reflectValue)
|
||||||
length := len(v)
|
|
||||||
if length > 1 {
|
|
||||||
contents.Printfln("%s: [", name)
|
|
||||||
contents.Indent()
|
|
||||||
for i := 0; i < length; i = i + 1 {
|
|
||||||
contents.Printfln("%q,", v[i])
|
|
||||||
}
|
|
||||||
contents.Dedent()
|
|
||||||
contents.Printfln("],")
|
|
||||||
} else if length == 0 {
|
|
||||||
contents.Printfln("%s: [],", name)
|
|
||||||
} else {
|
|
||||||
contents.Printfln("%s: [%q],", name, v[0])
|
|
||||||
}
|
|
||||||
|
|
||||||
case bool:
|
|
||||||
contents.Printfln("%s: %t,", name, v)
|
|
||||||
|
|
||||||
default:
|
|
||||||
contents.Printfln("%s: %q,", name, value)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, name := range set.order {
|
for _, name := range set.order {
|
||||||
|
@ -808,15 +795,61 @@ func outputPropertySet(contents *generatedContents, set *bpPropertySet) {
|
||||||
switch v := value.(type) {
|
switch v := value.(type) {
|
||||||
case *bpPropertySet:
|
case *bpPropertySet:
|
||||||
addComment(name)
|
addComment(name)
|
||||||
contents.Printfln("%s: {", name)
|
contents.IndentedPrintf("%s: {\n", name)
|
||||||
outputPropertySet(contents, v)
|
outputPropertySet(contents, v)
|
||||||
contents.Printfln("},")
|
contents.IndentedPrintf("},\n")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
contents.Dedent()
|
contents.Dedent()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// outputNamedValue outputs a value that has an associated name. The name will be indented, followed
|
||||||
|
// by the value and then followed by a , and a newline.
|
||||||
|
func outputNamedValue(contents *generatedContents, name string, value reflect.Value) {
|
||||||
|
contents.IndentedPrintf("%s: ", name)
|
||||||
|
outputUnnamedValue(contents, value)
|
||||||
|
contents.UnindentedPrintf(",\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
// outputUnnamedValue outputs a single value. The value is not indented and is not followed by
|
||||||
|
// either a , or a newline. With multi-line values, e.g. slices, all but the first line will be
|
||||||
|
// indented and all but the last line will end with a newline.
|
||||||
|
func outputUnnamedValue(contents *generatedContents, value reflect.Value) {
|
||||||
|
valueType := value.Type()
|
||||||
|
switch valueType.Kind() {
|
||||||
|
case reflect.Bool:
|
||||||
|
contents.UnindentedPrintf("%t", value.Bool())
|
||||||
|
|
||||||
|
case reflect.String:
|
||||||
|
contents.UnindentedPrintf("%q", value)
|
||||||
|
|
||||||
|
case reflect.Slice:
|
||||||
|
length := value.Len()
|
||||||
|
if length == 0 {
|
||||||
|
contents.UnindentedPrintf("[]")
|
||||||
|
} else if length == 1 {
|
||||||
|
contents.UnindentedPrintf("[")
|
||||||
|
outputUnnamedValue(contents, value.Index(0))
|
||||||
|
contents.UnindentedPrintf("]")
|
||||||
|
} else {
|
||||||
|
contents.UnindentedPrintf("[\n")
|
||||||
|
contents.Indent()
|
||||||
|
for i := 0; i < length; i++ {
|
||||||
|
itemValue := value.Index(i)
|
||||||
|
contents.IndentedPrintf("")
|
||||||
|
outputUnnamedValue(contents, itemValue)
|
||||||
|
contents.UnindentedPrintf(",\n")
|
||||||
|
}
|
||||||
|
contents.Dedent()
|
||||||
|
contents.IndentedPrintf("]")
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
panic(fmt.Errorf("Unknown type: %T of value %#v", value, value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (s *sdk) GetAndroidBpContentsForTests() string {
|
func (s *sdk) GetAndroidBpContentsForTests() string {
|
||||||
contents := &generatedContents{}
|
contents := &generatedContents{}
|
||||||
generateBpContents(contents, s.builderForTests.bpFile)
|
generateBpContents(contents, s.builderForTests.bpFile)
|
||||||
|
|
Loading…
Reference in a new issue