@@ -18,11 +18,11 @@ use triomphe::Arc;
18
18
use crate :: {
19
19
db:: DefDatabase ,
20
20
expander:: Expander ,
21
- item_tree:: ItemTree ,
21
+ item_tree:: { GenericsItemTreeNode , ItemTree } ,
22
22
lower:: LowerCtx ,
23
23
nameres:: { DefMap , MacroSubNs } ,
24
24
type_ref:: { ConstRef , LifetimeRef , TypeBound , TypeRef } ,
25
- AdtId , ConstParamId , GenericDefId , HasModule , LocalTypeOrConstParamId , Lookup ,
25
+ AdtId , ConstParamId , GenericDefId , HasModule , ItemTreeLoc , LocalTypeOrConstParamId , Lookup ,
26
26
TypeOrConstParamId , TypeParamId ,
27
27
} ;
28
28
@@ -414,13 +414,18 @@ impl GenericParams {
414
414
} )
415
415
}
416
416
} ;
417
- macro_rules! id_to_generics {
418
- ( $id: ident) => { {
419
- let id = $id. lookup( db) . id;
420
- let tree = id. item_tree( db) ;
421
- let item = & tree[ id. value] ;
422
- enabled_params( & item. generic_params, & tree)
423
- } } ;
417
+ fn id_to_generics < Id : GenericsItemTreeNode > (
418
+ db : & dyn DefDatabase ,
419
+ id : impl for < ' db > Lookup <
420
+ Database < ' db > = dyn DefDatabase + ' db ,
421
+ Data = impl ItemTreeLoc < Id = Id > ,
422
+ > ,
423
+ enabled_params : impl Fn ( & Interned < GenericParams > , & ItemTree ) -> Interned < GenericParams > ,
424
+ ) -> Interned < GenericParams > {
425
+ let id = id. lookup ( db) . item_tree_id ( ) ;
426
+ let tree = id. item_tree ( db) ;
427
+ let item = & tree[ id. value ] ;
428
+ enabled_params ( item. generic_params ( ) , & tree)
424
429
}
425
430
426
431
match def {
@@ -453,13 +458,13 @@ impl GenericParams {
453
458
Interned :: new ( generic_params. finish ( ) )
454
459
}
455
460
}
456
- GenericDefId :: AdtId ( AdtId :: StructId ( id) ) => id_to_generics ! ( id ) ,
457
- GenericDefId :: AdtId ( AdtId :: EnumId ( id) ) => id_to_generics ! ( id ) ,
458
- GenericDefId :: AdtId ( AdtId :: UnionId ( id) ) => id_to_generics ! ( id ) ,
459
- GenericDefId :: TraitId ( id) => id_to_generics ! ( id ) ,
460
- GenericDefId :: TraitAliasId ( id) => id_to_generics ! ( id ) ,
461
- GenericDefId :: TypeAliasId ( id) => id_to_generics ! ( id ) ,
462
- GenericDefId :: ImplId ( id) => id_to_generics ! ( id ) ,
461
+ GenericDefId :: AdtId ( AdtId :: StructId ( id) ) => id_to_generics ( db , id , enabled_params ) ,
462
+ GenericDefId :: AdtId ( AdtId :: EnumId ( id) ) => id_to_generics ( db , id , enabled_params ) ,
463
+ GenericDefId :: AdtId ( AdtId :: UnionId ( id) ) => id_to_generics ( db , id , enabled_params ) ,
464
+ GenericDefId :: TraitId ( id) => id_to_generics ( db , id , enabled_params ) ,
465
+ GenericDefId :: TraitAliasId ( id) => id_to_generics ( db , id , enabled_params ) ,
466
+ GenericDefId :: TypeAliasId ( id) => id_to_generics ( db , id , enabled_params ) ,
467
+ GenericDefId :: ImplId ( id) => id_to_generics ( db , id , enabled_params ) ,
463
468
GenericDefId :: EnumVariantId ( _) | GenericDefId :: ConstId ( _) => {
464
469
Interned :: new ( GenericParams {
465
470
type_or_consts : Default :: default ( ) ,
0 commit comments