@@ -1588,41 +1588,20 @@ fn generics_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::Generics {
15881588 _ => None ,
15891589 } ;
15901590
1591- let mut opt_self = None ;
1592- let mut allow_defaults = false ;
1593-
15941591 let no_generics = hir:: Generics :: empty ( ) ;
1595- let ast_generics = match node {
1596- Node :: TraitItem ( item) => & item. generics ,
1597-
1598- Node :: ImplItem ( item) => & item. generics ,
1599-
1592+ let ast_generics = node. generics ( ) . unwrap_or ( & no_generics) ;
1593+ let ( opt_self, allow_defaults) = match node {
16001594 Node :: Item ( item) => {
16011595 match item. kind {
1602- ItemKind :: Fn ( .., ref generics, _)
1603- | ItemKind :: Impl ( hir:: Impl { ref generics, .. } ) => generics,
1604-
1605- ItemKind :: TyAlias ( _, ref generics)
1606- | ItemKind :: Enum ( _, ref generics)
1607- | ItemKind :: Struct ( _, ref generics)
1608- | ItemKind :: OpaqueTy ( hir:: OpaqueTy { ref generics, .. } )
1609- | ItemKind :: Union ( _, ref generics) => {
1610- allow_defaults = true ;
1611- generics
1612- }
1613-
1614- ItemKind :: Trait ( _, _, ref generics, ..)
1615- | ItemKind :: TraitAlias ( ref generics, ..) => {
1596+ ItemKind :: Trait ( ..) | ItemKind :: TraitAlias ( ..) => {
16161597 // Add in the self type parameter.
16171598 //
16181599 // Something of a hack: use the node id for the trait, also as
16191600 // the node id for the Self type parameter.
1620- let param_id = item. def_id ;
1621-
1622- opt_self = Some ( ty:: GenericParamDef {
1601+ let opt_self = Some ( ty:: GenericParamDef {
16231602 index : 0 ,
16241603 name : kw:: SelfUpper ,
1625- def_id : param_id . to_def_id ( ) ,
1604+ def_id,
16261605 pure_wrt_drop : false ,
16271606 kind : ty:: GenericParamDefKind :: Type {
16281607 has_default : false ,
@@ -1631,21 +1610,17 @@ fn generics_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::Generics {
16311610 } ,
16321611 } ) ;
16331612
1634- allow_defaults = true ;
1635- generics
1613+ ( opt_self, true )
16361614 }
1637-
1638- _ => & no_generics,
1615+ ItemKind :: TyAlias ( ..)
1616+ | ItemKind :: Enum ( ..)
1617+ | ItemKind :: Struct ( ..)
1618+ | ItemKind :: OpaqueTy ( ..)
1619+ | ItemKind :: Union ( ..) => ( None , true ) ,
1620+ _ => ( None , false ) ,
16391621 }
16401622 }
1641-
1642- Node :: ForeignItem ( item) => match item. kind {
1643- ForeignItemKind :: Static ( ..) => & no_generics,
1644- ForeignItemKind :: Fn ( _, _, ref generics) => generics,
1645- ForeignItemKind :: Type => & no_generics,
1646- } ,
1647-
1648- _ => & no_generics,
1623+ _ => ( None , false ) ,
16491624 } ;
16501625
16511626 let has_self = opt_self. is_some ( ) ;
0 commit comments