diff options
Diffstat (limited to 'sdk/sdk.go')
-rw-r--r-- | sdk/sdk.go | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/sdk/sdk.go b/sdk/sdk.go index 624c0fa9b..b1c8aebf9 100644 --- a/sdk/sdk.go +++ b/sdk/sdk.go @@ -169,23 +169,27 @@ func createDynamicSdkMemberTypes(sdkMemberTypes []android.SdkMemberType) *dynami var fields []reflect.StructField // Iterate over the member types creating StructField and sdkMemberListProperty objects. - for f, memberType := range sdkMemberTypes { + nextFieldIndex := 0 + for _, memberType := range sdkMemberTypes { + p := memberType.SdkPropertyName() - // Create a dynamic exported field for the member type's property. - fields = append(fields, reflect.StructField{ - Name: proptools.FieldNameForProperty(p), - Type: reflect.TypeOf([]string{}), - Tag: `android:"arch_variant"`, - }) + var getter func(properties interface{}) []string + var setter func(properties interface{}, list []string) + if memberType.RequiresBpProperty() { + // Create a dynamic exported field for the member type's property. + fields = append(fields, reflect.StructField{ + Name: proptools.FieldNameForProperty(p), + Type: reflect.TypeOf([]string{}), + Tag: `android:"arch_variant"`, + }) - // Copy the field index for use in the getter func as using the loop variable directly will - // cause all funcs to use the last value. - fieldIndex := f + // Copy the field index for use in the getter func as using the loop variable directly will + // cause all funcs to use the last value. + fieldIndex := nextFieldIndex + nextFieldIndex += 1 - // Create an sdkMemberListProperty for the member type. - memberListProperty := &sdkMemberListProperty{ - getter: func(properties interface{}) []string { + getter = func(properties interface{}) []string { // The properties is expected to be of the following form (where // <Module_types> is the name of an SdkMemberType.SdkPropertyName(). // properties *struct {<Module_types> []string, ....} @@ -195,9 +199,9 @@ func createDynamicSdkMemberTypes(sdkMemberTypes []android.SdkMemberType) *dynami // list := reflect.ValueOf(properties).Elem().Field(fieldIndex).Interface().([]string) return list - }, + } - setter: func(properties interface{}, list []string) { + setter = func(properties interface{}, list []string) { // The properties is expected to be of the following form (where // <Module_types> is the name of an SdkMemberType.SdkPropertyName(). // properties *struct {<Module_types> []string, ....} @@ -206,8 +210,13 @@ func createDynamicSdkMemberTypes(sdkMemberTypes []android.SdkMemberType) *dynami // *properties.<Module_types> = list // reflect.ValueOf(properties).Elem().Field(fieldIndex).Set(reflect.ValueOf(list)) - }, + } + } + // Create an sdkMemberListProperty for the member type. + memberListProperty := &sdkMemberListProperty{ + getter: getter, + setter: setter, memberType: memberType, // Dependencies added directly from member properties are always exported. @@ -402,6 +411,9 @@ func memberMutator(mctx android.BottomUpMutatorContext) { // Add dependencies from enabled and non CommonOS variants to the sdk member variants. if s.Enabled() && !s.IsCommonOSVariant() { for _, memberListProperty := range s.memberListProperties() { + if memberListProperty.getter == nil { + continue + } names := memberListProperty.getter(s.dynamicMemberTypeListProperties) if len(names) > 0 { tag := memberListProperty.dependencyTag |