summaryrefslogtreecommitdiff
path: root/rust/project_json.go
diff options
context:
space:
mode:
author ThiƩbaud Weksteen <tweek@google.com> 2020-08-05 14:27:32 +0200
committer ThiƩbaud Weksteen <tweek@google.com> 2020-08-05 16:34:38 +0200
commitad8ac5358182e72bb4ede89e9a98e2b23b03523b (patch)
treee28dcba3dc8c57276581778be1e06645a680c2b8 /rust/project_json.go
parent891cd578c70911416775511654ad396fc95be054 (diff)
rust: handle modules with same crate_name
crate_name do not need to be unique. A library may depend on two different versions of the same crate. Use the module name instead of the crate name when indexing the modules for rust-project.json. Test: SOONG_GEN_RUST_PROJECT=1 m nothing Bug: 162896400 Change-Id: I275f04639ef05f2b649c30168046e13b2efcacb9
Diffstat (limited to 'rust/project_json.go')
-rw-r--r--rust/project_json.go13
1 files changed, 7 insertions, 6 deletions
diff --git a/rust/project_json.go b/rust/project_json.go
index 75375408c..831047938 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, childName, ok := appendLibraryAndDeps(ctx, project, knownCrates, child)
+ childId, childCrateName, ok := appendLibraryAndDeps(ctx, project, knownCrates, child)
if !ok {
return
}
- if _, ok = deps[childName]; ok {
+ if _, ok = deps[ctx.ModuleName(child)]; ok {
return
}
- crate.Deps = append(crate.Deps, rustProjectDep{Crate: childId, Name: childName})
- deps[childName] = childId
+ crate.Deps = append(crate.Deps, rustProjectDep{Crate: childId, Name: childCrateName})
+ deps[ctx.ModuleName(child)] = childId
})
}
@@ -105,8 +105,9 @@ func appendLibraryAndDeps(ctx android.SingletonContext, project *rustProjectJson
if !ok {
return 0, "", false
}
+ moduleName := ctx.ModuleName(module)
crateName := rModule.CrateName()
- if cInfo, ok := knownCrates[crateName]; ok {
+ if cInfo, ok := knownCrates[moduleName]; ok {
// We have seen this crate already; merge any new dependencies.
crate := project.Crates[cInfo.ID]
mergeDependencies(ctx, project, knownCrates, module, &crate, cInfo.Deps)
@@ -125,7 +126,7 @@ func appendLibraryAndDeps(ctx android.SingletonContext, project *rustProjectJson
mergeDependencies(ctx, project, knownCrates, module, &crate, deps)
id := len(project.Crates)
- knownCrates[crateName] = crateInfo{ID: id, Deps: deps}
+ knownCrates[moduleName] = 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.