Merge "Make sdk member type related types and vars type specific"

This commit is contained in:
Paul Duffin
2021-09-01 12:26:06 +00:00
committed by Gerrit Code Review
3 changed files with 39 additions and 37 deletions

View File

@@ -401,26 +401,26 @@ type SdkMemberTypeDependencyTag interface {
ExportMember() bool ExportMember() bool
} }
var _ SdkMemberTypeDependencyTag = (*sdkMemberDependencyTag)(nil) var _ SdkMemberTypeDependencyTag = (*sdkMemberTypeDependencyTag)(nil)
var _ ReplaceSourceWithPrebuilt = (*sdkMemberDependencyTag)(nil) var _ ReplaceSourceWithPrebuilt = (*sdkMemberTypeDependencyTag)(nil)
type sdkMemberDependencyTag struct { type sdkMemberTypeDependencyTag struct {
blueprint.BaseDependencyTag blueprint.BaseDependencyTag
memberType SdkMemberType memberType SdkMemberType
export bool export bool
} }
func (t *sdkMemberDependencyTag) SdkMemberType(_ Module) SdkMemberType { func (t *sdkMemberTypeDependencyTag) SdkMemberType(_ Module) SdkMemberType {
return t.memberType return t.memberType
} }
func (t *sdkMemberDependencyTag) ExportMember() bool { func (t *sdkMemberTypeDependencyTag) ExportMember() bool {
return t.export return t.export
} }
// Prevent dependencies from the sdk/module_exports onto their members from being // Prevent dependencies from the sdk/module_exports onto their members from being
// replaced with a preferred prebuilt. // replaced with a preferred prebuilt.
func (t *sdkMemberDependencyTag) ReplaceSourceWithPrebuilt() bool { func (t *sdkMemberTypeDependencyTag) ReplaceSourceWithPrebuilt() bool {
return false return false
} }
@@ -428,7 +428,7 @@ func (t *sdkMemberDependencyTag) ReplaceSourceWithPrebuilt() bool {
// dependencies added by the tag to be added to the sdk as the specified SdkMemberType and exported // dependencies added by the tag to be added to the sdk as the specified SdkMemberType and exported
// (or not) as specified by the export parameter. // (or not) as specified by the export parameter.
func DependencyTagForSdkMemberType(memberType SdkMemberType, export bool) SdkMemberTypeDependencyTag { func DependencyTagForSdkMemberType(memberType SdkMemberType, export bool) SdkMemberTypeDependencyTag {
return &sdkMemberDependencyTag{memberType: memberType, export: export} return &sdkMemberTypeDependencyTag{memberType: memberType, export: export}
} }
// Interface that must be implemented for every type that can be a member of an // Interface that must be implemented for every type that can be a member of an
@@ -610,8 +610,10 @@ func (r *SdkMemberTypesRegistry) UniqueOnceKey() OnceKey {
return NewCustomOnceKey(r) return NewCustomOnceKey(r)
} }
// The set of registered SdkMemberTypes, one for sdk module and one for module_exports. // The set of registered SdkMemberTypes for module_exports modules.
var ModuleExportsMemberTypes = &SdkMemberTypesRegistry{} var ModuleExportsMemberTypes = &SdkMemberTypesRegistry{}
// The set of registered SdkMemberTypes for sdk modules.
var SdkMemberTypes = &SdkMemberTypesRegistry{} var SdkMemberTypes = &SdkMemberTypesRegistry{}
// Register an SdkMemberType object to allow them to be used in the sdk and sdk_snapshot module // Register an SdkMemberType object to allow them to be used in the sdk and sdk_snapshot module

View File

@@ -50,7 +50,7 @@ type sdk struct {
// The dynamically generated information about the registered SdkMemberType // The dynamically generated information about the registered SdkMemberType
dynamicSdkMemberTypes *dynamicSdkMemberTypes dynamicSdkMemberTypes *dynamicSdkMemberTypes
// The dynamically created instance of the properties struct containing the sdk member // The dynamically created instance of the properties struct containing the sdk member type
// list properties, e.g. java_libs. // list properties, e.g. java_libs.
dynamicMemberTypeListProperties interface{} dynamicMemberTypeListProperties interface{}
@@ -95,9 +95,9 @@ type sdkProperties struct {
Prebuilt_visibility []string Prebuilt_visibility []string
} }
// Contains information about the sdk properties that list sdk members, e.g. // Contains information about the sdk properties that list sdk members by type, e.g.
// Java_header_libs. // Java_header_libs.
type sdkMemberListProperty struct { type sdkMemberTypeListProperty struct {
// getter for the list of member names // getter for the list of member names
getter func(properties interface{}) []string getter func(properties interface{}) []string
@@ -112,7 +112,7 @@ type sdkMemberListProperty struct {
dependencyTag android.SdkMemberTypeDependencyTag dependencyTag android.SdkMemberTypeDependencyTag
} }
func (p *sdkMemberListProperty) propertyName() string { func (p *sdkMemberTypeListProperty) propertyName() string {
return p.memberType.SdkPropertyName() return p.memberType.SdkPropertyName()
} }
@@ -129,12 +129,12 @@ type dynamicSdkMemberTypes struct {
propertiesStructType reflect.Type propertiesStructType reflect.Type
// Information about each of the member type specific list properties. // Information about each of the member type specific list properties.
memberListProperties []*sdkMemberListProperty memberTypeListProperties []*sdkMemberTypeListProperty
memberTypeToProperty map[android.SdkMemberType]*sdkMemberListProperty memberTypeToProperty map[android.SdkMemberType]*sdkMemberTypeListProperty
} }
func (d *dynamicSdkMemberTypes) createMemberListProperties() interface{} { func (d *dynamicSdkMemberTypes) createMemberTypeListProperties() interface{} {
return reflect.New(d.propertiesStructType).Interface() return reflect.New(d.propertiesStructType).Interface()
} }
@@ -164,11 +164,11 @@ func getDynamicSdkMemberTypes(registry *android.SdkMemberTypesRegistry) *dynamic
// //
func createDynamicSdkMemberTypes(sdkMemberTypes []android.SdkMemberType) *dynamicSdkMemberTypes { func createDynamicSdkMemberTypes(sdkMemberTypes []android.SdkMemberType) *dynamicSdkMemberTypes {
var listProperties []*sdkMemberListProperty var listProperties []*sdkMemberTypeListProperty
memberTypeToProperty := map[android.SdkMemberType]*sdkMemberListProperty{} memberTypeToProperty := map[android.SdkMemberType]*sdkMemberTypeListProperty{}
var fields []reflect.StructField var fields []reflect.StructField
// Iterate over the member types creating StructField and sdkMemberListProperty objects. // Iterate over the member types creating StructField and sdkMemberTypeListProperty objects.
nextFieldIndex := 0 nextFieldIndex := 0
for _, memberType := range sdkMemberTypes { for _, memberType := range sdkMemberTypes {
@@ -213,8 +213,8 @@ func createDynamicSdkMemberTypes(sdkMemberTypes []android.SdkMemberType) *dynami
} }
} }
// Create an sdkMemberListProperty for the member type. // Create an sdkMemberTypeListProperty for the member type.
memberListProperty := &sdkMemberListProperty{ memberListProperty := &sdkMemberTypeListProperty{
getter: getter, getter: getter,
setter: setter, setter: setter,
memberType: memberType, memberType: memberType,
@@ -231,9 +231,9 @@ func createDynamicSdkMemberTypes(sdkMemberTypes []android.SdkMemberType) *dynami
propertiesStructType := reflect.StructOf(fields) propertiesStructType := reflect.StructOf(fields)
return &dynamicSdkMemberTypes{ return &dynamicSdkMemberTypes{
memberListProperties: listProperties, memberTypeListProperties: listProperties,
memberTypeToProperty: memberTypeToProperty, memberTypeToProperty: memberTypeToProperty,
propertiesStructType: propertiesStructType, propertiesStructType: propertiesStructType,
} }
} }
@@ -247,16 +247,16 @@ func newSdkModule(moduleExports bool) *sdk {
s := &sdk{} s := &sdk{}
s.properties.Module_exports = moduleExports s.properties.Module_exports = moduleExports
// Get the dynamic sdk member type data for the currently registered sdk member types. // Get the dynamic sdk member type data for the currently registered sdk member types.
var registry *android.SdkMemberTypesRegistry var typeRegistry *android.SdkMemberTypesRegistry
if moduleExports { if moduleExports {
registry = android.ModuleExportsMemberTypes typeRegistry = android.ModuleExportsMemberTypes
} else { } else {
registry = android.SdkMemberTypes typeRegistry = android.SdkMemberTypes
} }
s.dynamicSdkMemberTypes = getDynamicSdkMemberTypes(registry) s.dynamicSdkMemberTypes = getDynamicSdkMemberTypes(typeRegistry)
// Create an instance of the dynamically created struct that contains all the // Create an instance of the dynamically created struct that contains all the
// properties for the member type specific list properties. // properties for the member type specific list properties.
s.dynamicMemberTypeListProperties = s.dynamicSdkMemberTypes.createMemberListProperties() s.dynamicMemberTypeListProperties = s.dynamicSdkMemberTypes.createMemberTypeListProperties()
s.AddProperties(&s.properties, s.dynamicMemberTypeListProperties) s.AddProperties(&s.properties, s.dynamicMemberTypeListProperties)
// Make sure that the prebuilt visibility property is verified for errors. // Make sure that the prebuilt visibility property is verified for errors.
@@ -280,11 +280,11 @@ func SnapshotModuleFactory() android.Module {
return s return s
} }
func (s *sdk) memberListProperties() []*sdkMemberListProperty { func (s *sdk) memberTypeListProperties() []*sdkMemberTypeListProperty {
return s.dynamicSdkMemberTypes.memberListProperties return s.dynamicSdkMemberTypes.memberTypeListProperties
} }
func (s *sdk) memberListProperty(memberType android.SdkMemberType) *sdkMemberListProperty { func (s *sdk) memberTypeListProperty(memberType android.SdkMemberType) *sdkMemberTypeListProperty {
return s.dynamicSdkMemberTypes.memberTypeToProperty[memberType] return s.dynamicSdkMemberTypes.memberTypeToProperty[memberType]
} }
@@ -424,7 +424,7 @@ func memberMutator(mctx android.BottomUpMutatorContext) {
// Add dependencies from enabled and non CommonOS variants to the sdk member variants. // Add dependencies from enabled and non CommonOS variants to the sdk member variants.
if s.Enabled() && !s.IsCommonOSVariant() { if s.Enabled() && !s.IsCommonOSVariant() {
ctx := s.newDependencyContext(mctx) ctx := s.newDependencyContext(mctx)
for _, memberListProperty := range s.memberListProperties() { for _, memberListProperty := range s.memberTypeListProperties() {
if memberListProperty.getter == nil { if memberListProperty.getter == nil {
continue continue
} }

View File

@@ -251,7 +251,7 @@ func (s *sdk) groupMemberVariantsByMemberThenType(ctx android.ModuleContext, mem
} }
var members []*sdkMember var members []*sdkMember
for _, memberListProperty := range s.memberListProperties() { for _, memberListProperty := range s.memberTypeListProperties() {
membersOfType := byType[memberListProperty.memberType] membersOfType := byType[memberListProperty.memberType]
members = append(members, membersOfType...) members = append(members, membersOfType...)
} }
@@ -667,7 +667,7 @@ func (s *sdk) collateSnapshotModuleInfo(ctx android.BaseModuleContext, sdkVarian
staticProperties := &snapshotModuleStaticProperties{ staticProperties := &snapshotModuleStaticProperties{
Compile_multilib: sdkVariant.multilibUsages.String(), Compile_multilib: sdkVariant.multilibUsages.String(),
} }
dynamicProperties := s.dynamicSdkMemberTypes.createMemberListProperties() dynamicProperties := s.dynamicSdkMemberTypes.createMemberTypeListProperties()
combinedProperties := &combinedSnapshotModuleProperties{ combinedProperties := &combinedSnapshotModuleProperties{
sdkVariant: sdkVariant, sdkVariant: sdkVariant,
@@ -687,7 +687,7 @@ func (s *sdk) collateSnapshotModuleInfo(ctx android.BaseModuleContext, sdkVarian
} }
combined := sdkVariantToCombinedProperties[memberVariantDep.sdkVariant] combined := sdkVariantToCombinedProperties[memberVariantDep.sdkVariant]
memberListProperty := s.memberListProperty(memberVariantDep.memberType) memberListProperty := s.memberTypeListProperty(memberVariantDep.memberType)
memberName := ctx.OtherModuleName(memberVariantDep.variant) memberName := ctx.OtherModuleName(memberVariantDep.variant)
if memberListProperty.getter == nil { if memberListProperty.getter == nil {
@@ -717,7 +717,7 @@ func (s *sdk) optimizeSnapshotModuleProperties(ctx android.ModuleContext, list [
} }
// Extract the common members, removing them from the original properties. // Extract the common members, removing them from the original properties.
commonDynamicProperties := s.dynamicSdkMemberTypes.createMemberListProperties() commonDynamicProperties := s.dynamicSdkMemberTypes.createMemberTypeListProperties()
extractor := newCommonValueExtractor(commonDynamicProperties) extractor := newCommonValueExtractor(commonDynamicProperties)
extractCommonProperties(ctx, extractor, commonDynamicProperties, propertyContainers) extractCommonProperties(ctx, extractor, commonDynamicProperties, propertyContainers)
@@ -750,7 +750,7 @@ func (s *sdk) addSnapshotPropertiesToPropertySet(builder *snapshotBuilder, prope
} }
dynamicMemberTypeListProperties := combined.dynamicProperties dynamicMemberTypeListProperties := combined.dynamicProperties
for _, memberListProperty := range s.memberListProperties() { for _, memberListProperty := range s.memberTypeListProperties() {
if memberListProperty.getter == nil { if memberListProperty.getter == nil {
continue continue
} }