diff --git a/rust/project_json.go b/rust/project_json.go index 831047938..75375408c 100644 --- a/rust/project_json.go +++ b/rust/project_json.go @@ -76,15 +76,15 @@ func mergeDependencies(ctx android.SingletonContext, project *rustProjectJson, crate *rustProjectCrate, deps map[string]int) { ctx.VisitDirectDeps(module, func(child android.Module) { - childId, childCrateName, ok := appendLibraryAndDeps(ctx, project, knownCrates, child) + childId, childName, ok := appendLibraryAndDeps(ctx, project, knownCrates, child) if !ok { return } - if _, ok = deps[ctx.ModuleName(child)]; ok { + if _, ok = deps[childName]; ok { return } - crate.Deps = append(crate.Deps, rustProjectDep{Crate: childId, Name: childCrateName}) - deps[ctx.ModuleName(child)] = childId + crate.Deps = append(crate.Deps, rustProjectDep{Crate: childId, Name: childName}) + deps[childName] = childId }) } @@ -105,9 +105,8 @@ func appendLibraryAndDeps(ctx android.SingletonContext, project *rustProjectJson if !ok { return 0, "", false } - moduleName := ctx.ModuleName(module) crateName := rModule.CrateName() - if cInfo, ok := knownCrates[moduleName]; ok { + if cInfo, ok := knownCrates[crateName]; ok { // We have seen this crate already; merge any new dependencies. crate := project.Crates[cInfo.ID] mergeDependencies(ctx, project, knownCrates, module, &crate, cInfo.Deps) @@ -126,7 +125,7 @@ func appendLibraryAndDeps(ctx android.SingletonContext, project *rustProjectJson mergeDependencies(ctx, project, knownCrates, module, &crate, deps) id := len(project.Crates) - knownCrates[moduleName] = crateInfo{ID: id, Deps: deps} + knownCrates[crateName] = crateInfo{ID: id, Deps: deps} project.Crates = append(project.Crates, crate) // rust-analyzer requires that all crates belong to at least one root: // https://github.com/rust-analyzer/rust-analyzer/issues/4735. diff --git a/rust/project_json_test.go b/rust/project_json_test.go index 85219404a..89ba8d352 100644 --- a/rust/project_json_test.go +++ b/rust/project_json_test.go @@ -117,55 +117,3 @@ func TestProjectJsonBindGen(t *testing.T) { jsonContent := testProjectJson(t, bp, fs) validateJsonCrates(t, jsonContent) } - -func TestProjectJsonMultiVersion(t *testing.T) { - bp := ` - rust_library { - name: "liba1", - srcs: ["a1/src/lib.rs"], - crate_name: "a" - } - rust_library { - name: "liba2", - srcs: ["a2/src/lib.rs"], - crate_name: "a", - } - rust_library { - name: "libb", - srcs: ["b/src/lib.rs"], - crate_name: "b", - rustlibs: ["liba1", "liba2"], - } - ` + GatherRequiredDepsForTest() - fs := map[string][]byte{ - "a1/src/lib.rs": nil, - "a2/src/lib.rs": nil, - "b/src/lib.rs": nil, - } - jsonContent := testProjectJson(t, bp, fs) - crates := validateJsonCrates(t, jsonContent) - for _, crate := range crates { - c := crate.(map[string]interface{}) - if c["root_module"] == "b/src/lib.rs" { - deps, ok := c["deps"].([]interface{}) - if !ok { - t.Errorf("Unexpected format for deps: %v", c["deps"]) - } - aCount := 0 - for _, dep := range deps { - d, ok := dep.(map[string]interface{}) - if !ok { - t.Errorf("Unexpected format for dep: %v", dep) - } - if d["name"] == "a" { - aCount++ - } - } - if aCount != 2 { - t.Errorf("Unexpected number of liba dependencies want %v, got %v: %v", 2, aCount, deps) - } - return - } - } - t.Errorf("libb crate has not been found: %v", crates) -}