Merge "Make sdk member type related types and vars type specific"
This commit is contained in:
@@ -401,26 +401,26 @@ type SdkMemberTypeDependencyTag interface {
|
||||
ExportMember() bool
|
||||
}
|
||||
|
||||
var _ SdkMemberTypeDependencyTag = (*sdkMemberDependencyTag)(nil)
|
||||
var _ ReplaceSourceWithPrebuilt = (*sdkMemberDependencyTag)(nil)
|
||||
var _ SdkMemberTypeDependencyTag = (*sdkMemberTypeDependencyTag)(nil)
|
||||
var _ ReplaceSourceWithPrebuilt = (*sdkMemberTypeDependencyTag)(nil)
|
||||
|
||||
type sdkMemberDependencyTag struct {
|
||||
type sdkMemberTypeDependencyTag struct {
|
||||
blueprint.BaseDependencyTag
|
||||
memberType SdkMemberType
|
||||
export bool
|
||||
}
|
||||
|
||||
func (t *sdkMemberDependencyTag) SdkMemberType(_ Module) SdkMemberType {
|
||||
func (t *sdkMemberTypeDependencyTag) SdkMemberType(_ Module) SdkMemberType {
|
||||
return t.memberType
|
||||
}
|
||||
|
||||
func (t *sdkMemberDependencyTag) ExportMember() bool {
|
||||
func (t *sdkMemberTypeDependencyTag) ExportMember() bool {
|
||||
return t.export
|
||||
}
|
||||
|
||||
// Prevent dependencies from the sdk/module_exports onto their members from being
|
||||
// replaced with a preferred prebuilt.
|
||||
func (t *sdkMemberDependencyTag) ReplaceSourceWithPrebuilt() bool {
|
||||
func (t *sdkMemberTypeDependencyTag) ReplaceSourceWithPrebuilt() bool {
|
||||
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
|
||||
// (or not) as specified by the export parameter.
|
||||
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
|
||||
@@ -610,8 +610,10 @@ func (r *SdkMemberTypesRegistry) UniqueOnceKey() OnceKey {
|
||||
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{}
|
||||
|
||||
// The set of registered SdkMemberTypes for sdk modules.
|
||||
var SdkMemberTypes = &SdkMemberTypesRegistry{}
|
||||
|
||||
// Register an SdkMemberType object to allow them to be used in the sdk and sdk_snapshot module
|
||||
|
48
sdk/sdk.go
48
sdk/sdk.go
@@ -50,7 +50,7 @@ type sdk struct {
|
||||
// The dynamically generated information about the registered SdkMemberType
|
||||
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.
|
||||
dynamicMemberTypeListProperties interface{}
|
||||
|
||||
@@ -95,9 +95,9 @@ type sdkProperties struct {
|
||||
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.
|
||||
type sdkMemberListProperty struct {
|
||||
type sdkMemberTypeListProperty struct {
|
||||
// getter for the list of member names
|
||||
getter func(properties interface{}) []string
|
||||
|
||||
@@ -112,7 +112,7 @@ type sdkMemberListProperty struct {
|
||||
dependencyTag android.SdkMemberTypeDependencyTag
|
||||
}
|
||||
|
||||
func (p *sdkMemberListProperty) propertyName() string {
|
||||
func (p *sdkMemberTypeListProperty) propertyName() string {
|
||||
return p.memberType.SdkPropertyName()
|
||||
}
|
||||
|
||||
@@ -129,12 +129,12 @@ type dynamicSdkMemberTypes struct {
|
||||
propertiesStructType reflect.Type
|
||||
|
||||
// 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()
|
||||
}
|
||||
|
||||
@@ -164,11 +164,11 @@ func getDynamicSdkMemberTypes(registry *android.SdkMemberTypesRegistry) *dynamic
|
||||
//
|
||||
func createDynamicSdkMemberTypes(sdkMemberTypes []android.SdkMemberType) *dynamicSdkMemberTypes {
|
||||
|
||||
var listProperties []*sdkMemberListProperty
|
||||
memberTypeToProperty := map[android.SdkMemberType]*sdkMemberListProperty{}
|
||||
var listProperties []*sdkMemberTypeListProperty
|
||||
memberTypeToProperty := map[android.SdkMemberType]*sdkMemberTypeListProperty{}
|
||||
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
|
||||
for _, memberType := range sdkMemberTypes {
|
||||
|
||||
@@ -213,8 +213,8 @@ func createDynamicSdkMemberTypes(sdkMemberTypes []android.SdkMemberType) *dynami
|
||||
}
|
||||
}
|
||||
|
||||
// Create an sdkMemberListProperty for the member type.
|
||||
memberListProperty := &sdkMemberListProperty{
|
||||
// Create an sdkMemberTypeListProperty for the member type.
|
||||
memberListProperty := &sdkMemberTypeListProperty{
|
||||
getter: getter,
|
||||
setter: setter,
|
||||
memberType: memberType,
|
||||
@@ -231,9 +231,9 @@ func createDynamicSdkMemberTypes(sdkMemberTypes []android.SdkMemberType) *dynami
|
||||
propertiesStructType := reflect.StructOf(fields)
|
||||
|
||||
return &dynamicSdkMemberTypes{
|
||||
memberListProperties: listProperties,
|
||||
memberTypeToProperty: memberTypeToProperty,
|
||||
propertiesStructType: propertiesStructType,
|
||||
memberTypeListProperties: listProperties,
|
||||
memberTypeToProperty: memberTypeToProperty,
|
||||
propertiesStructType: propertiesStructType,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -247,16 +247,16 @@ func newSdkModule(moduleExports bool) *sdk {
|
||||
s := &sdk{}
|
||||
s.properties.Module_exports = moduleExports
|
||||
// Get the dynamic sdk member type data for the currently registered sdk member types.
|
||||
var registry *android.SdkMemberTypesRegistry
|
||||
var typeRegistry *android.SdkMemberTypesRegistry
|
||||
if moduleExports {
|
||||
registry = android.ModuleExportsMemberTypes
|
||||
typeRegistry = android.ModuleExportsMemberTypes
|
||||
} 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
|
||||
// properties for the member type specific list properties.
|
||||
s.dynamicMemberTypeListProperties = s.dynamicSdkMemberTypes.createMemberListProperties()
|
||||
s.dynamicMemberTypeListProperties = s.dynamicSdkMemberTypes.createMemberTypeListProperties()
|
||||
s.AddProperties(&s.properties, s.dynamicMemberTypeListProperties)
|
||||
|
||||
// Make sure that the prebuilt visibility property is verified for errors.
|
||||
@@ -280,11 +280,11 @@ func SnapshotModuleFactory() android.Module {
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *sdk) memberListProperties() []*sdkMemberListProperty {
|
||||
return s.dynamicSdkMemberTypes.memberListProperties
|
||||
func (s *sdk) memberTypeListProperties() []*sdkMemberTypeListProperty {
|
||||
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]
|
||||
}
|
||||
|
||||
@@ -424,7 +424,7 @@ func memberMutator(mctx android.BottomUpMutatorContext) {
|
||||
// Add dependencies from enabled and non CommonOS variants to the sdk member variants.
|
||||
if s.Enabled() && !s.IsCommonOSVariant() {
|
||||
ctx := s.newDependencyContext(mctx)
|
||||
for _, memberListProperty := range s.memberListProperties() {
|
||||
for _, memberListProperty := range s.memberTypeListProperties() {
|
||||
if memberListProperty.getter == nil {
|
||||
continue
|
||||
}
|
||||
|
@@ -251,7 +251,7 @@ func (s *sdk) groupMemberVariantsByMemberThenType(ctx android.ModuleContext, mem
|
||||
}
|
||||
|
||||
var members []*sdkMember
|
||||
for _, memberListProperty := range s.memberListProperties() {
|
||||
for _, memberListProperty := range s.memberTypeListProperties() {
|
||||
membersOfType := byType[memberListProperty.memberType]
|
||||
members = append(members, membersOfType...)
|
||||
}
|
||||
@@ -667,7 +667,7 @@ func (s *sdk) collateSnapshotModuleInfo(ctx android.BaseModuleContext, sdkVarian
|
||||
staticProperties := &snapshotModuleStaticProperties{
|
||||
Compile_multilib: sdkVariant.multilibUsages.String(),
|
||||
}
|
||||
dynamicProperties := s.dynamicSdkMemberTypes.createMemberListProperties()
|
||||
dynamicProperties := s.dynamicSdkMemberTypes.createMemberTypeListProperties()
|
||||
|
||||
combinedProperties := &combinedSnapshotModuleProperties{
|
||||
sdkVariant: sdkVariant,
|
||||
@@ -687,7 +687,7 @@ func (s *sdk) collateSnapshotModuleInfo(ctx android.BaseModuleContext, sdkVarian
|
||||
}
|
||||
|
||||
combined := sdkVariantToCombinedProperties[memberVariantDep.sdkVariant]
|
||||
memberListProperty := s.memberListProperty(memberVariantDep.memberType)
|
||||
memberListProperty := s.memberTypeListProperty(memberVariantDep.memberType)
|
||||
memberName := ctx.OtherModuleName(memberVariantDep.variant)
|
||||
|
||||
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.
|
||||
commonDynamicProperties := s.dynamicSdkMemberTypes.createMemberListProperties()
|
||||
commonDynamicProperties := s.dynamicSdkMemberTypes.createMemberTypeListProperties()
|
||||
extractor := newCommonValueExtractor(commonDynamicProperties)
|
||||
extractCommonProperties(ctx, extractor, commonDynamicProperties, propertyContainers)
|
||||
|
||||
@@ -750,7 +750,7 @@ func (s *sdk) addSnapshotPropertiesToPropertySet(builder *snapshotBuilder, prope
|
||||
}
|
||||
|
||||
dynamicMemberTypeListProperties := combined.dynamicProperties
|
||||
for _, memberListProperty := range s.memberListProperties() {
|
||||
for _, memberListProperty := range s.memberTypeListProperties() {
|
||||
if memberListProperty.getter == nil {
|
||||
continue
|
||||
}
|
||||
|
Reference in New Issue
Block a user