Skip to content

Commit b6826e9

Browse files
committed
Only add generics with the correct file id to DynMap
1 parent 8d4f40e commit b6826e9

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

crates/hir_def/src/generics.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -454,14 +454,17 @@ impl HasChildSource<LocalConstParamId> for GenericDefId {
454454
}
455455

456456
impl ChildBySource for GenericDefId {
457-
fn child_by_source_to(&self, db: &dyn DefDatabase, res: &mut DynMap, _: HirFileId) {
457+
fn child_by_source_to(&self, db: &dyn DefDatabase, res: &mut DynMap, file_id: HirFileId) {
458+
let (gfile_id, generic_params_list) = file_id_and_params_of(*self, db);
459+
if gfile_id != file_id {
460+
return;
461+
}
462+
458463
let generic_params = db.generic_params(*self);
459464
let mut types_idx_iter = generic_params.types.iter().map(|(idx, _)| idx);
460465
let lts_idx_iter = generic_params.lifetimes.iter().map(|(idx, _)| idx);
461466
let consts_idx_iter = generic_params.consts.iter().map(|(idx, _)| idx);
462467

463-
let (file_id, generic_params_list) = file_id_and_params_of(*self, db);
464-
465468
// For traits the first type index is `Self`, skip it.
466469
if let GenericDefId::TraitId(_) = *self {
467470
types_idx_iter.next().unwrap(); // advance_by(1);
@@ -470,15 +473,15 @@ impl ChildBySource for GenericDefId {
470473
if let Some(generic_params_list) = generic_params_list {
471474
for (local_id, ast_param) in types_idx_iter.zip(generic_params_list.type_params()) {
472475
let id = TypeParamId { parent: *self, local_id };
473-
res[keys::TYPE_PARAM].insert(InFile::new(file_id, ast_param), id);
476+
res[keys::TYPE_PARAM].insert(InFile::new(gfile_id, ast_param), id);
474477
}
475478
for (local_id, ast_param) in lts_idx_iter.zip(generic_params_list.lifetime_params()) {
476479
let id = LifetimeParamId { parent: *self, local_id };
477-
res[keys::LIFETIME_PARAM].insert(InFile::new(file_id, ast_param), id);
480+
res[keys::LIFETIME_PARAM].insert(InFile::new(gfile_id, ast_param), id);
478481
}
479482
for (local_id, ast_param) in consts_idx_iter.zip(generic_params_list.const_params()) {
480483
let id = ConstParamId { parent: *self, local_id };
481-
res[keys::CONST_PARAM].insert(InFile::new(file_id, ast_param), id);
484+
res[keys::CONST_PARAM].insert(InFile::new(gfile_id, ast_param), id);
482485
}
483486
}
484487
}

0 commit comments

Comments
 (0)