Add support for transforming a property set after its contents
This change adds support for transforming a property set after its contents. This allows a transform to recursively prune empty property sets that were created for a module. The transformPropertySet method was renamed to transformPropertySetBeforeContents and a new transformPropertySetAfterContents method was added. Bug: 148933848 Bug: 153306490 Test: m nothing Merged-In: Ia198d47e042b98c69406db4bc12859869816a387 Change-Id: Ia198d47e042b98c69406db4bc12859869816a387
This commit is contained in:
28
sdk/bp.go
28
sdk/bp.go
@@ -94,9 +94,11 @@ func (s *bpPropertySet) transformContents(transformer bpPropertyTransformer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func transformPropertySet(transformer bpPropertyTransformer, name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag) {
|
func transformPropertySet(transformer bpPropertyTransformer, name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag) {
|
||||||
newPropertySet, newTag := transformer.transformPropertySet(name, propertySet, tag)
|
newPropertySet, newTag := transformer.transformPropertySetBeforeContents(name, propertySet, tag)
|
||||||
if newPropertySet != nil {
|
if newPropertySet != nil {
|
||||||
newPropertySet.transformContents(transformer)
|
newPropertySet.transformContents(transformer)
|
||||||
|
|
||||||
|
newPropertySet, newTag = transformer.transformPropertySetAfterContents(name, newPropertySet, newTag)
|
||||||
}
|
}
|
||||||
return newPropertySet, newTag
|
return newPropertySet, newTag
|
||||||
}
|
}
|
||||||
@@ -149,7 +151,17 @@ type bpPropertyTransformer interface {
|
|||||||
// The name will be "" for the top level property set.
|
// The name will be "" for the top level property set.
|
||||||
//
|
//
|
||||||
// Returning (nil, ...) will cause the property set to be removed.
|
// Returning (nil, ...) will cause the property set to be removed.
|
||||||
transformPropertySet(name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag)
|
transformPropertySetBeforeContents(name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag)
|
||||||
|
|
||||||
|
// Transform the property set, returning the new property set/tag to insert back into the
|
||||||
|
// parent property set (or module if this is the top level property set).
|
||||||
|
//
|
||||||
|
// This will be called after transforming the properties in the supplied set.
|
||||||
|
//
|
||||||
|
// The name will be "" for the top level property set.
|
||||||
|
//
|
||||||
|
// Returning (nil, ...) will cause the property set to be removed.
|
||||||
|
transformPropertySetAfterContents(name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag)
|
||||||
|
|
||||||
// Transform a property, return the new value/tag to insert back into the property set.
|
// Transform a property, return the new value/tag to insert back into the property set.
|
||||||
//
|
//
|
||||||
@@ -178,7 +190,11 @@ func (t identityTransformation) transformModule(module *bpModule) *bpModule {
|
|||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t identityTransformation) transformPropertySet(name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag) {
|
func (t identityTransformation) transformPropertySetBeforeContents(name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag) {
|
||||||
|
return propertySet, tag
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t identityTransformation) transformPropertySetAfterContents(name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag) {
|
||||||
return propertySet, tag
|
return propertySet, tag
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,7 +213,9 @@ func (m *bpModule) transform(transformer bpTransformer) *bpModule {
|
|||||||
return transformedModule
|
return transformedModule
|
||||||
}
|
}
|
||||||
|
|
||||||
type deepCopyTransformation struct{}
|
type deepCopyTransformation struct {
|
||||||
|
identityTransformation
|
||||||
|
}
|
||||||
|
|
||||||
func (t deepCopyTransformation) transformModule(module *bpModule) *bpModule {
|
func (t deepCopyTransformation) transformModule(module *bpModule) *bpModule {
|
||||||
// Take a shallow copy of the module. Any mutable property values will be copied by the
|
// Take a shallow copy of the module. Any mutable property values will be copied by the
|
||||||
@@ -206,7 +224,7 @@ func (t deepCopyTransformation) transformModule(module *bpModule) *bpModule {
|
|||||||
return &moduleCopy
|
return &moduleCopy
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t deepCopyTransformation) transformPropertySet(name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag) {
|
func (t deepCopyTransformation) transformPropertySetBeforeContents(name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag) {
|
||||||
// Create a shallow copy of the properties map. Any mutable property values will be copied by the
|
// Create a shallow copy of the properties map. Any mutable property values will be copied by the
|
||||||
// transformer.
|
// transformer.
|
||||||
propertiesCopy := make(map[string]interface{})
|
propertiesCopy := make(map[string]interface{})
|
||||||
|
@@ -31,13 +31,20 @@ func (t removeFredTransformation) transformProperty(name string, value interface
|
|||||||
return value, tag
|
return value, tag
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t removeFredTransformation) transformPropertySet(name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag) {
|
func (t removeFredTransformation) transformPropertySetBeforeContents(name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag) {
|
||||||
if name == "fred" {
|
if name == "fred" {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
return propertySet, tag
|
return propertySet, tag
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t removeFredTransformation) transformPropertySetAfterContents(name string, propertySet *bpPropertySet, tag android.BpPropertyTag) (*bpPropertySet, android.BpPropertyTag) {
|
||||||
|
if len(propertySet.properties) == 0 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
return propertySet, tag
|
||||||
|
}
|
||||||
|
|
||||||
func TestTransformRemoveProperty(t *testing.T) {
|
func TestTransformRemoveProperty(t *testing.T) {
|
||||||
|
|
||||||
helper := &TestHelper{t}
|
helper := &TestHelper{t}
|
||||||
|
Reference in New Issue
Block a user