Fix module rename inside namespace
Rename was expecting fully qualified names, but context.go always
passes it short names.
Bug: 77922456
Test: TestRename in namespace_test.go
Change-Id: I552ff39fd8ed6ba6da4262925060b45104840ff7
diff --git a/android/namespace.go b/android/namespace.go
index 1f8ef5a..0230524 100644
--- a/android/namespace.go
+++ b/android/namespace.go
@@ -255,22 +255,7 @@
}
func (r *NameResolver) Rename(oldName string, newName string, namespace blueprint.Namespace) []error {
- oldNs := r.findNamespace(oldName)
- newNs := r.findNamespace(newName)
- if oldNs != newNs {
- return []error{fmt.Errorf("cannot rename %v to %v because the destination is outside namespace %v", oldName, newName, oldNs.Path)}
- }
-
- oldName, err := filepath.Rel(oldNs.Path, oldName)
- if err != nil {
- panic(err)
- }
- newName, err = filepath.Rel(newNs.Path, newName)
- if err != nil {
- panic(err)
- }
-
- return oldNs.moduleContainer.Rename(oldName, newName, nil)
+ return namespace.(*Namespace).moduleContainer.Rename(oldName, newName, namespace)
}
// resolve each element of namespace.importedNamespaceNames and put the result in namespace.visibleNamespaces
diff --git a/android/namespace_test.go b/android/namespace_test.go
index 8bec0ad..9a791a5 100644
--- a/android/namespace_test.go
+++ b/android/namespace_test.go
@@ -582,6 +582,25 @@
}
}
+// so that the generated .ninja file will have consistent names
+func TestRename(t *testing.T) {
+ _ = setupTest(t,
+ map[string]string{
+ "dir1": `
+ soong_namespace {
+ }
+ test_module {
+ name: "a",
+ deps: ["c"],
+ }
+ test_module {
+ name: "b",
+ rename: "c",
+ }
+ `})
+ // setupTest will report any errors
+}
+
// some utils to support the tests
func mockFiles(bps map[string]string) (files map[string][]byte) {
@@ -607,6 +626,9 @@
ctx.RegisterModuleType("test_module", ModuleFactoryAdaptor(newTestModule))
ctx.RegisterModuleType("soong_namespace", ModuleFactoryAdaptor(NamespaceFactory))
ctx.PreArchMutators(RegisterNamespaceMutator)
+ ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) {
+ ctx.BottomUp("rename", renameMutator)
+ })
ctx.Register()
_, errs = ctx.ParseBlueprintsFiles("Android.bp")
@@ -672,12 +694,16 @@
type testModule struct {
ModuleBase
properties struct {
- Deps []string
- Id string
+ Rename string
+ Deps []string
+ Id string
}
}
func (m *testModule) DepsMutator(ctx BottomUpMutatorContext) {
+ if m.properties.Rename != "" {
+ ctx.Rename(m.properties.Rename)
+ }
for _, d := range m.properties.Deps {
ctx.AddDependency(ctx.Module(), nil, d)
}
@@ -686,6 +712,14 @@
func (m *testModule) GenerateAndroidBuildActions(ModuleContext) {
}
+func renameMutator(ctx BottomUpMutatorContext) {
+ if m, ok := ctx.Module().(*testModule); ok {
+ if m.properties.Rename != "" {
+ ctx.Rename(m.properties.Rename)
+ }
+ }
+}
+
func newTestModule() Module {
m := &testModule{}
m.AddProperties(&m.properties)