hir_ty: iterate_method_candidates_for_self_ty pass visible_from_module down to iterate_inherent_methods

This commit is contained in:
cynecx 2021-03-20 19:48:35 +01:00
parent 66d295d72d
commit ac2a831b2e

View file

@ -420,6 +420,7 @@ fn iterate_method_candidates_impl(
env, env,
krate, krate,
traits_in_scope, traits_in_scope,
visible_from_module,
name, name,
callback, callback,
) )
@ -537,10 +538,12 @@ fn iterate_method_candidates_for_self_ty(
env: Arc<TraitEnvironment>, env: Arc<TraitEnvironment>,
krate: CrateId, krate: CrateId,
traits_in_scope: &FxHashSet<TraitId>, traits_in_scope: &FxHashSet<TraitId>,
visible_from_module: Option<ModuleId>,
name: Option<&Name>, name: Option<&Name>,
mut callback: &mut dyn FnMut(&Ty, AssocItemId) -> bool, mut callback: &mut dyn FnMut(&Ty, AssocItemId) -> bool,
) -> bool { ) -> bool {
if iterate_inherent_methods(self_ty, db, name, None, krate, None, &mut callback) { if iterate_inherent_methods(self_ty, db, name, None, krate, visible_from_module, &mut callback)
{
return true; return true;
} }
iterate_trait_method_candidates(self_ty, db, env, krate, traits_in_scope, name, None, callback) iterate_trait_method_candidates(self_ty, db, env, krate, traits_in_scope, name, None, callback)
@ -577,6 +580,8 @@ fn iterate_trait_method_candidates(
// iteration // iteration
let mut known_implemented = false; let mut known_implemented = false;
for (_name, item) in data.items.iter() { for (_name, item) in data.items.iter() {
// Don't pass a `visible_from_module` down to `is_valid_candidate`,
// since only inherent methods should be included into visibility checking.
if !is_valid_candidate(db, name, receiver_ty, *item, self_ty, None) { if !is_valid_candidate(db, name, receiver_ty, *item, self_ty, None) {
continue; continue;
} }