Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/semantics.rs')
-rw-r--r--crates/hir/src/semantics.rs16
1 files changed, 14 insertions, 2 deletions
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs
index 523bc6f10a..708db2c08d 100644
--- a/crates/hir/src/semantics.rs
+++ b/crates/hir/src/semantics.rs
@@ -1439,8 +1439,20 @@ impl<'db> SemanticsImpl<'db> {
self.analyze(call.syntax())?.resolve_method_call_fallback(self.db, call)
}
- pub fn resolve_known_blanket_dual_impls(&self, call: &ast::MethodCallExpr) -> Option<Function> {
- self.analyze(call.syntax())?.resolve_known_blanket_dual_impls(self.db, call)
+ /// Env is used to derive the trait environment
+ // FIXME: better api for the trait environment
+ pub fn resolve_trait_impl_method(
+ &self,
+ env: Type,
+ trait_: Trait,
+ func: Function,
+ subst: impl IntoIterator<Item = Type>,
+ ) -> Option<Function> {
+ let mut substs = hir_ty::TyBuilder::subst_for_def(self.db, TraitId::from(trait_), None);
+ for s in subst {
+ substs = substs.push(s.ty);
+ }
+ Some(self.db.lookup_impl_method(env.env, func.into(), substs.build()).0.into())
}
fn resolve_range_pat(&self, range_pat: &ast::RangePat) -> Option<StructId> {