diff options
Diffstat (limited to 'crates/ra_hir/src/ty/method_resolution.rs')
-rw-r--r-- | crates/ra_hir/src/ty/method_resolution.rs | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/crates/ra_hir/src/ty/method_resolution.rs b/crates/ra_hir/src/ty/method_resolution.rs index 4b71b376f..ad2ab560d 100644 --- a/crates/ra_hir/src/ty/method_resolution.rs +++ b/crates/ra_hir/src/ty/method_resolution.rs | |||
@@ -10,7 +10,6 @@ use rustc_hash::FxHashMap; | |||
10 | use super::{autoderef, lower, Canonical, InEnvironment, TraitEnvironment, TraitRef}; | 10 | use super::{autoderef, lower, Canonical, InEnvironment, TraitEnvironment, TraitRef}; |
11 | use crate::{ | 11 | use crate::{ |
12 | db::HirDatabase, | 12 | db::HirDatabase, |
13 | generics::HasGenericParams, | ||
14 | impl_block::{ImplBlock, ImplId}, | 13 | impl_block::{ImplBlock, ImplId}, |
15 | nameres::CrateModuleId, | 14 | nameres::CrateModuleId, |
16 | resolve::Resolver, | 15 | resolve::Resolver, |
@@ -331,20 +330,13 @@ fn generic_implements_goal( | |||
331 | trait_: Trait, | 330 | trait_: Trait, |
332 | self_ty: Canonical<Ty>, | 331 | self_ty: Canonical<Ty>, |
333 | ) -> Canonical<InEnvironment<super::Obligation>> { | 332 | ) -> Canonical<InEnvironment<super::Obligation>> { |
334 | let mut substs = Vec::new(); | ||
335 | let generics = trait_.generic_params(db); | ||
336 | let num_vars = self_ty.num_vars; | 333 | let num_vars = self_ty.num_vars; |
337 | substs.push(self_ty.value); | 334 | let substs = super::Substs::build_for_def(db, trait_) |
338 | substs.extend( | 335 | .push(self_ty.value) |
339 | generics | 336 | .fill_with_bound_vars(num_vars as u32) |
340 | .params_including_parent() | 337 | .build(); |
341 | .into_iter() | ||
342 | .skip(1) | ||
343 | .enumerate() | ||
344 | .map(|(i, _p)| Ty::Bound((i + num_vars) as u32)), | ||
345 | ); | ||
346 | let num_vars = substs.len() - 1 + self_ty.num_vars; | 338 | let num_vars = substs.len() - 1 + self_ty.num_vars; |
347 | let trait_ref = TraitRef { trait_, substs: substs.into() }; | 339 | let trait_ref = TraitRef { trait_, substs }; |
348 | let obligation = super::Obligation::Trait(trait_ref); | 340 | let obligation = super::Obligation::Trait(trait_ref); |
349 | Canonical { num_vars, value: InEnvironment::new(env, obligation) } | 341 | Canonical { num_vars, value: InEnvironment::new(env, obligation) } |
350 | } | 342 | } |