@@ -454,14 +454,17 @@ impl HasChildSource<LocalConstParamId> for GenericDefId {
454
454
}
455
455
456
456
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
+
458
463
let generic_params = db. generic_params ( * self ) ;
459
464
let mut types_idx_iter = generic_params. types . iter ( ) . map ( |( idx, _) | idx) ;
460
465
let lts_idx_iter = generic_params. lifetimes . iter ( ) . map ( |( idx, _) | idx) ;
461
466
let consts_idx_iter = generic_params. consts . iter ( ) . map ( |( idx, _) | idx) ;
462
467
463
- let ( file_id, generic_params_list) = file_id_and_params_of ( * self , db) ;
464
-
465
468
// For traits the first type index is `Self`, skip it.
466
469
if let GenericDefId :: TraitId ( _) = * self {
467
470
types_idx_iter. next ( ) . unwrap ( ) ; // advance_by(1);
@@ -470,15 +473,15 @@ impl ChildBySource for GenericDefId {
470
473
if let Some ( generic_params_list) = generic_params_list {
471
474
for ( local_id, ast_param) in types_idx_iter. zip ( generic_params_list. type_params ( ) ) {
472
475
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) ;
474
477
}
475
478
for ( local_id, ast_param) in lts_idx_iter. zip ( generic_params_list. lifetime_params ( ) ) {
476
479
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) ;
478
481
}
479
482
for ( local_id, ast_param) in consts_idx_iter. zip ( generic_params_list. const_params ( ) ) {
480
483
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) ;
482
485
}
483
486
}
484
487
}
0 commit comments