diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2022-01-08 11:34:58 +0100 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2022-01-08 11:34:58 +0100 |
| commit | b6826e924616ca60dceb29a6f491b8905d5f95b4 (patch) | |
| tree | 05ac884bda5b37da2da642ec9a831d0700276640 | |
| parent | 8d4f40e8815970d549ba31a47c3c5660e624d37f (diff) | |
| download | rust-b6826e924616ca60dceb29a6f491b8905d5f95b4.tar.gz rust-b6826e924616ca60dceb29a6f491b8905d5f95b4.zip | |
Only add generics with the correct file id to DynMap
| -rw-r--r-- | crates/hir_def/src/generics.rs | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/crates/hir_def/src/generics.rs b/crates/hir_def/src/generics.rs index c4bd5b39c5b..6261295e788 100644 --- a/crates/hir_def/src/generics.rs +++ b/crates/hir_def/src/generics.rs @@ -454,14 +454,17 @@ impl HasChildSource<LocalConstParamId> for GenericDefId { } impl ChildBySource for GenericDefId { - fn child_by_source_to(&self, db: &dyn DefDatabase, res: &mut DynMap, _: HirFileId) { + fn child_by_source_to(&self, db: &dyn DefDatabase, res: &mut DynMap, file_id: HirFileId) { + let (gfile_id, generic_params_list) = file_id_and_params_of(*self, db); + if gfile_id != file_id { + return; + } + let generic_params = db.generic_params(*self); let mut types_idx_iter = generic_params.types.iter().map(|(idx, _)| idx); let lts_idx_iter = generic_params.lifetimes.iter().map(|(idx, _)| idx); let consts_idx_iter = generic_params.consts.iter().map(|(idx, _)| idx); - let (file_id, generic_params_list) = file_id_and_params_of(*self, db); - // For traits the first type index is `Self`, skip it. if let GenericDefId::TraitId(_) = *self { types_idx_iter.next().unwrap(); // advance_by(1); @@ -470,15 +473,15 @@ impl ChildBySource for GenericDefId { if let Some(generic_params_list) = generic_params_list { for (local_id, ast_param) in types_idx_iter.zip(generic_params_list.type_params()) { let id = TypeParamId { parent: *self, local_id }; - res[keys::TYPE_PARAM].insert(InFile::new(file_id, ast_param), id); + res[keys::TYPE_PARAM].insert(InFile::new(gfile_id, ast_param), id); } for (local_id, ast_param) in lts_idx_iter.zip(generic_params_list.lifetime_params()) { let id = LifetimeParamId { parent: *self, local_id }; - res[keys::LIFETIME_PARAM].insert(InFile::new(file_id, ast_param), id); + res[keys::LIFETIME_PARAM].insert(InFile::new(gfile_id, ast_param), id); } for (local_id, ast_param) in consts_idx_iter.zip(generic_params_list.const_params()) { let id = ConstParamId { parent: *self, local_id }; - res[keys::CONST_PARAM].insert(InFile::new(file_id, ast_param), id); + res[keys::CONST_PARAM].insert(InFile::new(gfile_id, ast_param), id); } } } |
