@@ -16,7 +16,6 @@ use rustc_lint_defs::builtin::SUPERTRAIT_ITEM_SHADOWING_DEFINITION;
1616use  rustc_macros:: LintDiagnostic ; 
1717use  rustc_middle:: mir:: interpret:: ErrorHandled ; 
1818use  rustc_middle:: query:: Providers ; 
19- use  rustc_middle:: ty:: print:: with_no_trimmed_paths; 
2019use  rustc_middle:: ty:: trait_def:: TraitSpecializationKind ; 
2120use  rustc_middle:: ty:: { 
2221    self ,  AdtKind ,  GenericArgKind ,  GenericArgs ,  GenericParamDefKind ,  Ty ,  TyCtxt ,  TypeFoldable , 
@@ -143,33 +142,7 @@ where
143142        return  Ok ( ( ) ) ; 
144143    } 
145144
146-     let  is_bevy = ' is_bevy:  { 
147-         // We don't want to emit this for dependents of Bevy, for now. 
148-         // See #119956 
149-         let  is_bevy_paramset = |def :  ty:: AdtDef < ' _ > | { 
150-             let  adt_did = with_no_trimmed_paths ! ( infcx. tcx. def_path_str( def. 0 . did) ) ; 
151-             adt_did. contains ( "ParamSet" ) 
152-         } ; 
153-         for  ty in  assumed_wf_types. iter ( )  { 
154-             match  ty. kind ( )  { 
155-                 ty:: Adt ( def,  _)  => { 
156-                     if  is_bevy_paramset ( * def)  { 
157-                         break  ' is_bevy true ; 
158-                     } 
159-                 } 
160-                 ty:: Ref ( _,  ty,  _)  => match  ty. kind ( )  { 
161-                     ty:: Adt ( def,  _)  => { 
162-                         if  is_bevy_paramset ( * def)  { 
163-                             break  ' is_bevy true ; 
164-                         } 
165-                     } 
166-                     _ => { } 
167-                 } , 
168-                 _ => { } 
169-             } 
170-         } 
171-         false 
172-     } ; 
145+     let  is_bevy = assumed_wf_types. visit_with ( & mut  ContainsBevyParamSet  {  tcx } ) . is_break ( ) ; 
173146
174147    // If we have set `no_implied_bounds_compat`, then do not attempt compatibility. 
175148    // We could also just always enter if `is_bevy`, and call `implied_bounds_tys`, 
@@ -194,6 +167,31 @@ where
194167    } 
195168} 
196169
170+ struct  ContainsBevyParamSet < ' tcx >  { 
171+     tcx :  TyCtxt < ' tcx > , 
172+ } 
173+ 
174+ impl < ' tcx >  TypeVisitor < TyCtxt < ' tcx > >  for  ContainsBevyParamSet < ' tcx >  { 
175+     type  Result  = ControlFlow < ( ) > ; 
176+ 
177+     fn  visit_ty ( & mut  self ,  t :  Ty < ' tcx > )  -> Self :: Result  { 
178+         // We only care to match `ParamSet<T>` or `&ParamSet<T>`. 
179+         match  t. kind ( )  { 
180+             ty:: Adt ( def,  _)  => { 
181+                 if  self . tcx . item_name ( def. did ( ) )  == sym:: ParamSet 
182+                     && self . tcx . crate_name ( def. did ( ) . krate )  == sym:: bevy_ecs
183+                 { 
184+                     return  ControlFlow :: Break ( ( ) ) ; 
185+                 } 
186+             } 
187+             ty:: Ref ( _,  ty,  _)  => ty. visit_with ( self ) ?, 
188+             _ => { } 
189+         } 
190+ 
191+         ControlFlow :: Continue ( ( ) ) 
192+     } 
193+ } 
194+ 
197195fn  check_well_formed ( tcx :  TyCtxt < ' _ > ,  def_id :  LocalDefId )  -> Result < ( ) ,  ErrorGuaranteed >  { 
198196    let  node = tcx. hir_node_by_def_id ( def_id) ; 
199197    let  mut  res = match  node { 
0 commit comments