blob: 056880dab7b36d5d9734128abf1b892288e44caf [file] [log] [blame]
// Copyright 2016 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package android
import "github.com/google/blueprint/proptools"
type CustomizePropertiesContext interface {
BaseContext
AppendProperties(...interface{})
PrependProperties(...interface{})
}
type customizePropertiesContext struct {
BaseContext
module *ModuleBase
}
type PropertyCustomizer interface {
CustomizeProperties(CustomizePropertiesContext)
}
func customizerMutator(ctx TopDownMutatorContext) {
if m, ok := ctx.Module().(Module); ok {
a := m.base()
if len(a.customizers) > 0 {
mctx := &customizePropertiesContext{
BaseContext: ctx,
module: a,
}
for _, c := range a.customizers {
c.CustomizeProperties(mctx)
if mctx.Failed() {
return
}
}
}
}
}
func (ctx *customizePropertiesContext) AppendProperties(props ...interface{}) {
for _, p := range props {
err := proptools.AppendMatchingProperties(ctx.module.customizableProperties, p, nil)
if err != nil {
if propertyErr, ok := err.(*proptools.ExtendPropertyError); ok {
ctx.PropertyErrorf(propertyErr.Property, "%s", propertyErr.Err.Error())
} else {
panic(err)
}
}
}
}
func (ctx *customizePropertiesContext) PrependProperties(props ...interface{}) {
for _, p := range props {
err := proptools.PrependMatchingProperties(ctx.module.customizableProperties, p, nil)
if err != nil {
if propertyErr, ok := err.(*proptools.ExtendPropertyError); ok {
ctx.PropertyErrorf(propertyErr.Property, "%s", propertyErr.Err.Error())
} else {
panic(err)
}
}
}
}