Merge "Document how properties work in defaults modules."

am: 188236ff23

Change-Id: Ie2f093dc2c16c024b81448e53e5d103b1932f02e
This commit is contained in:
Martin Stjernholm 2019-07-08 20:02:51 -07:00 committed by android-build-merger
commit 3b2542d1db
1 changed files with 20 additions and 1 deletions

View File

@ -63,9 +63,28 @@ func InitDefaultableModule(module DefaultableModule) {
type DefaultsModuleBase struct {
DefaultableModuleBase
defaultProperties []interface{}
}
// The common pattern for defaults modules is to register separate instances of
// the xxxProperties structs in the AddProperties calls, rather than reusing the
// ones inherited from Module.
//
// The effect is that e.g. myDefaultsModuleInstance.base().xxxProperties won't
// contain the values that have been set for the defaults module. Rather, to
// retrieve the values it is necessary to iterate over properties(). E.g. to get
// the commonProperties instance that have the real values:
//
// d := myModule.(Defaults)
// for _, props := range d.properties() {
// if cp, ok := props.(*commonProperties); ok {
// ... access property values in cp ...
// }
// }
//
// The rationale is that the properties on a defaults module apply to the
// defaultable modules using it, not to the defaults module itself. E.g. setting
// the "enabled" property false makes inheriting modules disabled by default,
// rather than disabling the defaults module itself.
type Defaults interface {
Defaultable
isDefaults() bool