diff --git a/rust/project_json.go b/rust/project_json.go
index 8310479..7537540 100644
--- a/rust/project_json.go
+++ b/rust/project_json.go
@@ -76,15 +76,15 @@
 	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 @@
 	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 @@
 	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 8521940..89ba8d3 100644
--- a/rust/project_json_test.go
+++ b/rust/project_json_test.go
@@ -117,55 +117,3 @@
 	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)
-}
