From cfad882745f0425f0d6df44fa1f22f7f9a2a2509 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 21 Jul 2022 10:17:57 +0200 Subject: [PATCH] fix: Fix `trait_impls_in_deps_query` being called directly instead of as a query --- crates/hir-ty/src/db.rs | 2 +- crates/hir-ty/src/lib.rs | 4 ++-- crates/hir-ty/src/lower.rs | 2 +- crates/hir-ty/src/method_resolution.rs | 9 ++++----- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/crates/hir-ty/src/db.rs b/crates/hir-ty/src/db.rs index de4c1535902..b385b1cafae 100644 --- a/crates/hir-ty/src/db.rs +++ b/crates/hir-ty/src/db.rs @@ -53,7 +53,7 @@ pub trait HirDatabase: DefDatabase + Upcast { #[salsa::invoke(crate::lower::field_types_query)] fn field_types(&self, var: VariantId) -> Arc>>; - #[salsa::invoke(crate::callable_item_sig)] + #[salsa::invoke(crate::lower::callable_item_sig)] fn callable_item_signature(&self, def: CallableDefId) -> PolyFnSig; #[salsa::invoke(crate::lower::return_type_impl_traits)] diff --git a/crates/hir-ty/src/lib.rs b/crates/hir-ty/src/lib.rs index 5abbee89711..d7fc90bda1a 100644 --- a/crates/hir-ty/src/lib.rs +++ b/crates/hir-ty/src/lib.rs @@ -52,8 +52,8 @@ pub use infer::{ }; pub use interner::Interner; pub use lower::{ - associated_type_shorthand_candidates, callable_item_sig, CallableDefId, ImplTraitLoweringMode, - TyDefId, TyLoweringContext, ValueTyDefId, + associated_type_shorthand_candidates, CallableDefId, ImplTraitLoweringMode, TyDefId, + TyLoweringContext, ValueTyDefId, }; pub use mapping::{ from_assoc_type_id, from_chalk_trait_id, from_foreign_def_id, from_placeholder_idx, diff --git a/crates/hir-ty/src/lower.rs b/crates/hir-ty/src/lower.rs index 1605c932d63..59d39079406 100644 --- a/crates/hir-ty/src/lower.rs +++ b/crates/hir-ty/src/lower.rs @@ -1033,7 +1033,7 @@ fn count_impl_traits(type_ref: &TypeRef) -> usize { } /// Build the signature of a callable item (function, struct or enum variant). -pub fn callable_item_sig(db: &dyn HirDatabase, def: CallableDefId) -> PolyFnSig { +pub(crate) fn callable_item_sig(db: &dyn HirDatabase, def: CallableDefId) -> PolyFnSig { match def { CallableDefId::FunctionId(f) => fn_sig_for_fn(db, f), CallableDefId::StructId(s) => fn_sig_for_struct_constructor(db, s), diff --git a/crates/hir-ty/src/method_resolution.rs b/crates/hir-ty/src/method_resolution.rs index d2081d22d79..7e1c45f57ac 100644 --- a/crates/hir-ty/src/method_resolution.rs +++ b/crates/hir-ty/src/method_resolution.rs @@ -137,7 +137,7 @@ pub struct TraitImpls { impl TraitImpls { pub(crate) fn trait_impls_in_crate_query(db: &dyn HirDatabase, krate: CrateId) -> Arc { - let _p = profile::span("trait_impls_in_crate_query"); + let _p = profile::span("trait_impls_in_crate_query").detail(|| format!("{krate:?}")); let mut impls = Self { map: FxHashMap::default() }; let crate_def_map = db.crate_def_map(krate); @@ -162,7 +162,7 @@ impl TraitImpls { } pub(crate) fn trait_impls_in_deps_query(db: &dyn HirDatabase, krate: CrateId) -> Arc { - let _p = profile::span("trait_impls_in_deps_query"); + let _p = profile::span("trait_impls_in_deps_query").detail(|| format!("{krate:?}")); let crate_graph = db.crate_graph(); let mut res = Self { map: FxHashMap::default() }; @@ -214,8 +214,7 @@ impl TraitImpls { for (trait_, other_map) in &other.map { let map = self.map.entry(*trait_).or_default(); for (fp, impls) in other_map { - let vec = map.entry(*fp).or_default(); - vec.extend(impls); + map.entry(*fp).or_default().extend(impls); } } } @@ -584,7 +583,7 @@ pub fn lookup_impl_method( name: &Name, ) -> Option { let self_ty_fp = TyFingerprint::for_trait_impl(self_ty)?; - let trait_impls = TraitImpls::trait_impls_in_deps_query(db, env.krate); + let trait_impls = db.trait_impls_in_deps(env.krate); let impls = trait_impls.for_trait_and_self_ty(trait_, self_ty_fp); let mut table = InferenceTable::new(db, env.clone()); find_matching_impl(impls, &mut table, &self_ty).and_then(|data| {