diff --git a/crates/hir_ty/src/autoderef.rs b/crates/hir_ty/src/autoderef.rs index 6d2cf461986..2c07494a978 100644 --- a/crates/hir_ty/src/autoderef.rs +++ b/crates/hir_ty/src/autoderef.rs @@ -85,10 +85,7 @@ fn deref_by_trait( environment: ty.environment.clone(), }, }; - if { - let _p = profile::span("db.trait_solve"); - db.trait_solve(krate, implements_goal).is_none() - } { + if db.trait_solve(krate, implements_goal).is_none() { return None; } diff --git a/crates/hir_ty/src/db.rs b/crates/hir_ty/src/db.rs index 1690926ad38..cf67d42662e 100644 --- a/crates/hir_ty/src/db.rs +++ b/crates/hir_ty/src/db.rs @@ -128,13 +128,21 @@ pub trait HirDatabase: DefDatabase + Upcast { id: chalk_db::AssociatedTyValueId, ) -> Arc; - #[salsa::invoke(crate::traits::trait_solve_query)] + #[salsa::invoke(trait_solve_wait)] + #[salsa::transparent] fn trait_solve( &self, krate: CrateId, goal: crate::Canonical>, ) -> Option; + #[salsa::invoke(crate::traits::trait_solve_query)] + fn trait_solve_query( + &self, + krate: CrateId, + goal: crate::Canonical>, + ) -> Option; + #[salsa::invoke(chalk_db::program_clauses_for_chalk_env_query)] fn program_clauses_for_chalk_env( &self, @@ -156,6 +164,15 @@ fn infer_wait(db: &dyn HirDatabase, def: DefWithBodyId) -> Arc db.infer_query(def) } +fn trait_solve_wait( + db: &dyn HirDatabase, + krate: CrateId, + goal: crate::Canonical>, +) -> Option { + let _p = profile::span("trait_solve::wait"); + db.trait_solve_query(krate, goal) +} + #[test] fn hir_database_is_object_safe() { fn _assert_object_safe(_: &dyn HirDatabase) {} diff --git a/crates/ide_db/src/apply_change.rs b/crates/ide_db/src/apply_change.rs index 6c67425d755..eac5ef6b95b 100644 --- a/crates/ide_db/src/apply_change.rs +++ b/crates/ide_db/src/apply_change.rs @@ -201,7 +201,7 @@ impl RootDatabase { hir::db::InternImplTraitIdQuery hir::db::InternClosureQuery hir::db::AssociatedTyValueQuery - hir::db::TraitSolveQuery + hir::db::TraitSolveQueryQuery // SymbolsDatabase crate::symbol_index::FileSymbolsQuery