@@ -18,11 +18,11 @@ use triomphe::Arc;
1818use crate :: {
1919 db:: DefDatabase ,
2020 expander:: Expander ,
21- item_tree:: ItemTree ,
21+ item_tree:: { GenericsItemTreeNode , ItemTree } ,
2222 lower:: LowerCtx ,
2323 nameres:: { DefMap , MacroSubNs } ,
2424 type_ref:: { ConstRef , LifetimeRef , TypeBound , TypeRef } ,
25- AdtId , ConstParamId , GenericDefId , HasModule , LocalTypeOrConstParamId , Lookup ,
25+ AdtId , ConstParamId , GenericDefId , HasModule , ItemTreeLoc , LocalTypeOrConstParamId , Lookup ,
2626 TypeOrConstParamId , TypeParamId ,
2727} ;
2828
@@ -414,13 +414,18 @@ impl GenericParams {
414414 } )
415415 }
416416 } ;
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)
424429 }
425430
426431 match def {
@@ -453,13 +458,13 @@ impl GenericParams {
453458 Interned :: new ( generic_params. finish ( ) )
454459 }
455460 }
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 ) ,
463468 GenericDefId :: EnumVariantId ( _) | GenericDefId :: ConstId ( _) => {
464469 Interned :: new ( GenericParams {
465470 type_or_consts : Default :: default ( ) ,
0 commit comments