summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android/hooks.go17
-rw-r--r--android/register.go6
2 files changed, 22 insertions, 1 deletions
diff --git a/android/hooks.go b/android/hooks.go
index bded76467..5e3a4a7e7 100644
--- a/android/hooks.go
+++ b/android/hooks.go
@@ -15,7 +15,10 @@
package android
import (
+ "fmt"
+ "path"
"reflect"
+ "runtime"
"github.com/google/blueprint"
"github.com/google/blueprint/proptools"
@@ -88,7 +91,19 @@ func (l *loadHookContext) PrependProperties(props ...interface{}) {
func (l *loadHookContext) CreateModule(factory ModuleFactory, props ...interface{}) Module {
inherited := []interface{}{&l.Module().base().commonProperties}
- module := l.bp.CreateModule(ModuleFactoryAdaptor(factory), append(inherited, props...)...).(Module)
+
+ var typeName string
+ if typeNameLookup, ok := ModuleTypeByFactory()[reflect.ValueOf(factory)]; ok {
+ typeName = typeNameLookup
+ } else {
+ factoryPtr := reflect.ValueOf(factory).Pointer()
+ factoryFunc := runtime.FuncForPC(factoryPtr)
+ filePath, _ := factoryFunc.FileLine(factoryPtr)
+ typeName = fmt.Sprintf("%s_%s", path.Base(filePath), factoryFunc.Name())
+ }
+ typeName = typeName + "_loadHookModule"
+
+ module := l.bp.CreateModule(ModuleFactoryAdaptor(factory), typeName, append(inherited, props...)...).(Module)
if l.Module().base().variableProperties != nil && module.base().variableProperties != nil {
src := l.Module().base().variableProperties
diff --git a/android/register.go b/android/register.go
index 10e14e04d..c50583322 100644
--- a/android/register.go
+++ b/android/register.go
@@ -59,6 +59,7 @@ func (t moduleType) register(ctx *Context) {
var moduleTypes []moduleType
var moduleTypesForDocs = map[string]reflect.Value{}
+var moduleTypeByFactory = map[reflect.Value]string{}
type singleton struct {
// True if this should be registered as a pre-singleton, false otherwise.
@@ -140,6 +141,7 @@ func RegisterModuleType(name string, factory ModuleFactory) {
// RegisterModuleType was a lambda.
func RegisterModuleTypeForDocs(name string, factory reflect.Value) {
moduleTypesForDocs[name] = factory
+ moduleTypeByFactory[factory] = name
}
func RegisterSingletonType(name string, factory SingletonFactory) {
@@ -228,6 +230,10 @@ func ModuleTypeFactoriesForDocs() map[string]reflect.Value {
return moduleTypesForDocs
}
+func ModuleTypeByFactory() map[reflect.Value]string {
+ return moduleTypeByFactory
+}
+
// Interface for registering build components.
//
// Provided to allow registration of build components to be shared between the runtime