summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Paul Duffin <paulduffin@google.com> 2020-02-21 16:06:25 +0000
committer Paul Duffin <paulduffin@google.com> 2020-02-24 14:49:22 +0000
commit180a006a3bf0f46c4cba89be7da2084a461735be (patch)
tree17d63b46d21d71b198ce87f82fff3f7d26c2f6c2
parent047fdcac0fd0815d2ba2da2df0ee9e3f3987ff80 (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.go28
-rw-r--r--sdk/bp_test.go9
2 files changed, 31 insertions, 6 deletions
diff --git a/sdk/bp.go b/sdk/bp.go
index 5c340cda3..c2a75e47b 100644
--- a/sdk/bp.go
+++ b/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) {
- 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}