aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ty/method_resolution.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/ty/method_resolution.rs')
-rw-r--r--crates/ra_hir/src/ty/method_resolution.rs16
1 files changed, 8 insertions, 8 deletions
diff --git a/crates/ra_hir/src/ty/method_resolution.rs b/crates/ra_hir/src/ty/method_resolution.rs
index 40f5eabf0..e214bf1af 100644
--- a/crates/ra_hir/src/ty/method_resolution.rs
+++ b/crates/ra_hir/src/ty/method_resolution.rs
@@ -211,8 +211,8 @@ fn iterate_trait_method_candidates<T>(
211 let data = m.data(db); 211 let data = m.data(db);
212 if name.map_or(true, |name| data.name() == name) && data.has_self_param() { 212 if name.map_or(true, |name| data.name() == name) && data.has_self_param() {
213 if !known_implemented { 213 if !known_implemented {
214 let trait_ref = canonical_trait_ref(db, env.clone(), t, ty.clone()); 214 let goal = generic_implements_goal(db, env.clone(), t, ty.clone());
215 if db.implements(krate, trait_ref).is_none() { 215 if db.solve(krate, goal).is_none() {
216 continue 'traits; 216 continue 'traits;
217 } 217 }
218 } 218 }
@@ -279,12 +279,12 @@ impl Ty {
279 279
280/// This creates Substs for a trait with the given Self type and type variables 280/// This creates Substs for a trait with the given Self type and type variables
281/// for all other parameters, to query Chalk with it. 281/// for all other parameters, to query Chalk with it.
282fn canonical_trait_ref( 282fn generic_implements_goal(
283 db: &impl HirDatabase, 283 db: &impl HirDatabase,
284 env: Arc<Environment>, 284 env: Arc<Environment>,
285 trait_: Trait, 285 trait_: Trait,
286 self_ty: Canonical<Ty>, 286 self_ty: Canonical<Ty>,
287) -> Canonical<InEnvironment<TraitRef>> { 287) -> Canonical<InEnvironment<super::Obligation>> {
288 let mut substs = Vec::new(); 288 let mut substs = Vec::new();
289 let generics = trait_.generic_params(db); 289 let generics = trait_.generic_params(db);
290 let num_vars = self_ty.num_vars; 290 let num_vars = self_ty.num_vars;
@@ -297,8 +297,8 @@ fn canonical_trait_ref(
297 .enumerate() 297 .enumerate()
298 .map(|(i, _p)| Ty::Bound((i + num_vars) as u32)), 298 .map(|(i, _p)| Ty::Bound((i + num_vars) as u32)),
299 ); 299 );
300 Canonical { 300 let num_vars = substs.len() - 1 + self_ty.num_vars;
301 num_vars: substs.len() - 1 + self_ty.num_vars, 301 let trait_ref = TraitRef { trait_, substs: substs.into() };
302 value: InEnvironment::new(env, TraitRef { trait_, substs: substs.into() }), 302 let obligation = super::Obligation::Trait(trait_ref);
303 } 303 Canonical { num_vars, value: InEnvironment::new(env, obligation) }
304} 304}