diff options
author | 2020-02-21 16:06:25 +0000 | |
---|---|---|
committer | 2020-02-24 14:49:22 +0000 | |
commit | 180a006a3bf0f46c4cba89be7da2084a461735be (patch) | |
tree | 17d63b46d21d71b198ce87f82fff3f7d26c2f6c2 | |
parent | 047fdcac0fd0815d2ba2da2df0ee9e3f3987ff80 (diff) |
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
Test: m nothing
Change-Id: Ia198d47e042b98c69406db4bc12859869816a387
-rw-r--r-- | sdk/bp.go | 28 | ||||
-rw-r--r-- | sdk/bp_test.go | 9 |
2 files changed, 31 insertions, 6 deletions
@@ -94,9 +94,11 @@ func (s *bpPropertySet) transformContents(transformer bpPropertyTransformer) { } 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 { newPropertySet.transformContents(transformer) + + newPropertySet, newTag = transformer.transformPropertySetAfterContents(name, newPropertySet, newTag) } return newPropertySet, newTag } @@ -149,7 +151,17 @@ type bpPropertyTransformer interface { // The name will be "" for the top level property set. // // 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. // @@ -178,7 +190,11 @@ func (t identityTransformation) transformModule(module *bpModule) *bpModule { 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 } @@ -197,7 +213,9 @@ func (m *bpModule) transform(transformer bpTransformer) *bpModule { return transformedModule } -type deepCopyTransformation struct{} +type deepCopyTransformation struct { + identityTransformation +} func (t deepCopyTransformation) transformModule(module *bpModule) *bpModule { // 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 } -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 // transformer. propertiesCopy := make(map[string]interface{}) diff --git a/sdk/bp_test.go b/sdk/bp_test.go index 4414ee9f5..f89f38c1c 100644 --- a/sdk/bp_test.go +++ b/sdk/bp_test.go @@ -31,13 +31,20 @@ func (t removeFredTransformation) transformProperty(name string, value interface 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" { return nil, nil } 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) { helper := &TestHelper{t} |