Allow defaults modules to have defaults

Allow chaining defaults modules by making Defaults be a Defaultable.

Change-Id: I4ba86c07f7aad9c396ed33d55fe95d1fb78e487d
diff --git a/android/defaults.go b/android/defaults.go
index f9cf0cc..2c589b9 100644
--- a/android/defaults.go
+++ b/android/defaults.go
@@ -45,7 +45,7 @@
 type Defaultable interface {
 	defaults() *defaultsProperties
 	setProperties([]interface{})
-	applyDefaults(TopDownMutatorContext, Defaults)
+	applyDefaults(BottomUpMutatorContext, Defaults)
 }
 
 var _ Defaultable = (*DefaultableModule)(nil)
@@ -61,12 +61,13 @@
 }
 
 type DefaultsModule struct {
+	DefaultableModule
 	defaultProperties []interface{}
 }
 
 type Defaults interface {
+	Defaultable
 	isDefaults() bool
-	setProperties([]interface{})
 	properties() []interface{}
 }
 
@@ -75,22 +76,16 @@
 }
 
 func (d *DefaultsModule) properties() []interface{} {
-	return d.defaultProperties
-}
-
-func (d *DefaultsModule) setProperties(props []interface{}) {
-	d.defaultProperties = props
+	return d.defaultableProperties
 }
 
 func InitDefaultsModule(module Module, d Defaults, props ...interface{}) (blueprint.Module, []interface{}) {
-	d.setProperties(props)
-
-	return module, props
+	return InitDefaultableModule(module, d, props...)
 }
 
 var _ Defaults = (*DefaultsModule)(nil)
 
-func (defaultable *DefaultableModule) applyDefaults(ctx TopDownMutatorContext,
+func (defaultable *DefaultableModule) applyDefaults(ctx BottomUpMutatorContext,
 	defaults Defaults) {
 
 	for _, prop := range defaultable.defaultableProperties {
@@ -115,7 +110,7 @@
 	}
 }
 
-func defaultsMutator(ctx TopDownMutatorContext) {
+func defaultsMutator(ctx BottomUpMutatorContext) {
 	if defaultable, ok := ctx.Module().(Defaultable); ok {
 		for _, defaultsDep := range defaultable.defaults().Defaults {
 			ctx.VisitDirectDeps(func(m blueprint.Module) {