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)