Loading android/sdk.go +9 −0 Original line number Diff line number Diff line Loading @@ -284,11 +284,20 @@ type BpPropertySet interface { // Add a property set with the specified name and return so that additional // properties can be added. AddPropertySet(name string) BpPropertySet // Add comment for property (or property set). AddCommentForProperty(name, text string) } // A .bp module definition. type BpModule interface { BpPropertySet // ModuleType returns the module type of the module ModuleType() string // Name returns the name of the module or "" if no name has been specified. Name() string } // An individual member of the SDK, includes all of the variants that the SDK Loading sdk/bp.go +43 −7 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import ( type bpPropertySet struct { properties map[string]interface{} tags map[string]android.BpPropertyTag comments map[string]string order []string } Loading Loading @@ -133,10 +134,22 @@ func (s *bpPropertySet) getValue(name string) interface{} { return s.properties[name] } func (s *bpPropertySet) getOptionalValue(name string) (interface{}, bool) { value, ok := s.properties[name] return value, ok } func (s *bpPropertySet) getTag(name string) interface{} { return s.tags[name] } func (s *bpPropertySet) AddCommentForProperty(name, text string) { if s.comments == nil { s.comments = map[string]string{} } s.comments[name] = strings.TrimSpace(text) } func (s *bpPropertySet) transformContents(transformer bpPropertyTransformer) { var newOrder []string for _, name := range s.order { Loading Loading @@ -222,6 +235,19 @@ type bpModule struct { moduleType string } func (m *bpModule) ModuleType() string { return m.moduleType } func (m *bpModule) Name() string { name, hasName := m.getOptionalValue("name") if hasName { return name.(string) } else { return "" } } var _ android.BpModule = (*bpModule)(nil) type bpPropertyTransformer interface { Loading Loading @@ -352,16 +378,26 @@ type bpFile struct { // is unique within this file. func (f *bpFile) AddModule(module android.BpModule) { m := module.(*bpModule) if name, ok := m.getValue("name").(string); ok { moduleType := module.ModuleType() name := m.Name() hasName := true if name == "" { // Use a prefixed module type as the name instead just in case this is something like a package // of namespace module which does not require a name. name = "#" + moduleType hasName = false } if f.modules[name] != nil { if hasName { panic(fmt.Sprintf("Module %q already exists in bp file", name)) } else { panic(fmt.Sprintf("Unnamed module type %q already exists in bp file", moduleType)) } } f.modules[name] = m f.order = append(f.order, m) } else { panic("Module does not have a name property, or it is not a string") } } func (f *bpFile) newModule(moduleType string) *bpModule { Loading sdk/update.go +27 −8 Original line number Diff line number Diff line Loading @@ -266,8 +266,11 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext, sdkVariants []*sdk) andro } s.builderForTests = builder // Create the prebuilt modules for each of the member modules. // Group the variants for each member module together and then group the members of each member // type together. members := s.groupMemberVariantsByMemberThenType(ctx, memberVariantDeps) // Create the prebuilt modules for each of the member modules. for _, member := range members { memberType := member.memberType Loading Loading @@ -613,7 +616,7 @@ type unversionedToVersionedTransformation struct { func (t unversionedToVersionedTransformation) transformModule(module *bpModule) *bpModule { // Use a versioned name for the module but remember the original name for the // snapshot. name := module.getValue("name").(string) name := module.Name() module.setProperty("name", t.builder.versionedSdkMemberName(name, true)) module.insertAfter("name", "sdk_member_name", name) // Remove the prefer property if present as versioned modules never need marking with prefer. Loading @@ -637,7 +640,7 @@ type unversionedTransformation struct { func (t unversionedTransformation) transformModule(module *bpModule) *bpModule { // If the module is an internal member then use a unique name for it. name := module.getValue("name").(string) name := module.Name() module.setProperty("name", t.builder.unversionedSdkMemberName(name, true)) return module } Loading Loading @@ -689,12 +692,26 @@ func generateFilteredBpContents(contents *generatedContents, bpFile *bpFile, mod func outputPropertySet(contents *generatedContents, set *bpPropertySet) { contents.Indent() addComment := func(name string) { if text, ok := set.comments[name]; ok { for _, line := range strings.Split(text, "\n") { contents.Printfln("// %s", line) } } } // 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) // Do not write property sets in the properties phase. if _, ok := value.(*bpPropertySet); ok { continue } addComment(name) switch v := value.(type) { case []string: length := len(v) Loading @@ -715,9 +732,6 @@ func outputPropertySet(contents *generatedContents, set *bpPropertySet) { 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) } Loading @@ -729,6 +743,7 @@ func outputPropertySet(contents *generatedContents, set *bpPropertySet) { // Only write property sets in the sets phase. switch v := value.(type) { case *bpPropertySet: addComment(name) contents.Printfln("%s: {", name) outputPropertySet(contents, v) contents.Printfln("},") Loading @@ -747,7 +762,9 @@ func (s *sdk) GetAndroidBpContentsForTests() string { func (s *sdk) GetUnversionedAndroidBpContentsForTests() string { contents := &generatedContents{} generateFilteredBpContents(contents, s.builderForTests.bpFile, func(module *bpModule) bool { return !strings.Contains(module.properties["name"].(string), "@") name := module.Name() // Include modules that are either unversioned or have no name. return !strings.Contains(name, "@") }) return contents.content.String() } Loading @@ -755,7 +772,9 @@ func (s *sdk) GetUnversionedAndroidBpContentsForTests() string { func (s *sdk) GetVersionedAndroidBpContentsForTests() string { contents := &generatedContents{} generateFilteredBpContents(contents, s.builderForTests.bpFile, func(module *bpModule) bool { return strings.Contains(module.properties["name"].(string), "@") name := module.Name() // Include modules that are either versioned or have no name. return name == "" || strings.Contains(name, "@") }) return contents.content.String() } Loading Loading
android/sdk.go +9 −0 Original line number Diff line number Diff line Loading @@ -284,11 +284,20 @@ type BpPropertySet interface { // Add a property set with the specified name and return so that additional // properties can be added. AddPropertySet(name string) BpPropertySet // Add comment for property (or property set). AddCommentForProperty(name, text string) } // A .bp module definition. type BpModule interface { BpPropertySet // ModuleType returns the module type of the module ModuleType() string // Name returns the name of the module or "" if no name has been specified. Name() string } // An individual member of the SDK, includes all of the variants that the SDK Loading
sdk/bp.go +43 −7 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import ( type bpPropertySet struct { properties map[string]interface{} tags map[string]android.BpPropertyTag comments map[string]string order []string } Loading Loading @@ -133,10 +134,22 @@ func (s *bpPropertySet) getValue(name string) interface{} { return s.properties[name] } func (s *bpPropertySet) getOptionalValue(name string) (interface{}, bool) { value, ok := s.properties[name] return value, ok } func (s *bpPropertySet) getTag(name string) interface{} { return s.tags[name] } func (s *bpPropertySet) AddCommentForProperty(name, text string) { if s.comments == nil { s.comments = map[string]string{} } s.comments[name] = strings.TrimSpace(text) } func (s *bpPropertySet) transformContents(transformer bpPropertyTransformer) { var newOrder []string for _, name := range s.order { Loading Loading @@ -222,6 +235,19 @@ type bpModule struct { moduleType string } func (m *bpModule) ModuleType() string { return m.moduleType } func (m *bpModule) Name() string { name, hasName := m.getOptionalValue("name") if hasName { return name.(string) } else { return "" } } var _ android.BpModule = (*bpModule)(nil) type bpPropertyTransformer interface { Loading Loading @@ -352,16 +378,26 @@ type bpFile struct { // is unique within this file. func (f *bpFile) AddModule(module android.BpModule) { m := module.(*bpModule) if name, ok := m.getValue("name").(string); ok { moduleType := module.ModuleType() name := m.Name() hasName := true if name == "" { // Use a prefixed module type as the name instead just in case this is something like a package // of namespace module which does not require a name. name = "#" + moduleType hasName = false } if f.modules[name] != nil { if hasName { panic(fmt.Sprintf("Module %q already exists in bp file", name)) } else { panic(fmt.Sprintf("Unnamed module type %q already exists in bp file", moduleType)) } } f.modules[name] = m f.order = append(f.order, m) } else { panic("Module does not have a name property, or it is not a string") } } func (f *bpFile) newModule(moduleType string) *bpModule { Loading
sdk/update.go +27 −8 Original line number Diff line number Diff line Loading @@ -266,8 +266,11 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext, sdkVariants []*sdk) andro } s.builderForTests = builder // Create the prebuilt modules for each of the member modules. // Group the variants for each member module together and then group the members of each member // type together. members := s.groupMemberVariantsByMemberThenType(ctx, memberVariantDeps) // Create the prebuilt modules for each of the member modules. for _, member := range members { memberType := member.memberType Loading Loading @@ -613,7 +616,7 @@ type unversionedToVersionedTransformation struct { func (t unversionedToVersionedTransformation) transformModule(module *bpModule) *bpModule { // Use a versioned name for the module but remember the original name for the // snapshot. name := module.getValue("name").(string) name := module.Name() module.setProperty("name", t.builder.versionedSdkMemberName(name, true)) module.insertAfter("name", "sdk_member_name", name) // Remove the prefer property if present as versioned modules never need marking with prefer. Loading @@ -637,7 +640,7 @@ type unversionedTransformation struct { func (t unversionedTransformation) transformModule(module *bpModule) *bpModule { // If the module is an internal member then use a unique name for it. name := module.getValue("name").(string) name := module.Name() module.setProperty("name", t.builder.unversionedSdkMemberName(name, true)) return module } Loading Loading @@ -689,12 +692,26 @@ func generateFilteredBpContents(contents *generatedContents, bpFile *bpFile, mod func outputPropertySet(contents *generatedContents, set *bpPropertySet) { contents.Indent() addComment := func(name string) { if text, ok := set.comments[name]; ok { for _, line := range strings.Split(text, "\n") { contents.Printfln("// %s", line) } } } // 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) // Do not write property sets in the properties phase. if _, ok := value.(*bpPropertySet); ok { continue } addComment(name) switch v := value.(type) { case []string: length := len(v) Loading @@ -715,9 +732,6 @@ func outputPropertySet(contents *generatedContents, set *bpPropertySet) { 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) } Loading @@ -729,6 +743,7 @@ func outputPropertySet(contents *generatedContents, set *bpPropertySet) { // Only write property sets in the sets phase. switch v := value.(type) { case *bpPropertySet: addComment(name) contents.Printfln("%s: {", name) outputPropertySet(contents, v) contents.Printfln("},") Loading @@ -747,7 +762,9 @@ func (s *sdk) GetAndroidBpContentsForTests() string { func (s *sdk) GetUnversionedAndroidBpContentsForTests() string { contents := &generatedContents{} generateFilteredBpContents(contents, s.builderForTests.bpFile, func(module *bpModule) bool { return !strings.Contains(module.properties["name"].(string), "@") name := module.Name() // Include modules that are either unversioned or have no name. return !strings.Contains(name, "@") }) return contents.content.String() } Loading @@ -755,7 +772,9 @@ func (s *sdk) GetUnversionedAndroidBpContentsForTests() string { func (s *sdk) GetVersionedAndroidBpContentsForTests() string { contents := &generatedContents{} generateFilteredBpContents(contents, s.builderForTests.bpFile, func(module *bpModule) bool { return strings.Contains(module.properties["name"].(string), "@") name := module.Name() // Include modules that are either versioned or have no name. return name == "" || strings.Contains(name, "@") }) return contents.content.String() } Loading