@@ -160,17 +160,13 @@ impl TraitImpls {
160160 Arc :: new ( impls)
161161 }
162162
163- pub ( crate ) fn trait_impls_in_deps_query ( db : & dyn HirDatabase , krate : CrateId ) -> Arc < Self > {
163+ pub ( crate ) fn trait_impls_in_deps_query (
164+ db : & dyn HirDatabase ,
165+ krate : CrateId ,
166+ ) -> Arc < [ Arc < Self > ] > {
164167 let _p = profile:: span ( "trait_impls_in_deps_query" ) . detail ( || format ! ( "{krate:?}" ) ) ;
165168 let crate_graph = db. crate_graph ( ) ;
166- let mut res = Self { map : FxHashMap :: default ( ) } ;
167-
168- for krate in crate_graph. transitive_deps ( krate) {
169- res. merge ( & db. trait_impls_in_crate ( krate) ) ;
170- }
171- res. shrink_to_fit ( ) ;
172-
173- Arc :: new ( res)
169+ crate_graph. transitive_deps ( krate) . map ( |krate| db. trait_impls_in_crate ( krate) ) . collect ( )
174170 }
175171
176172 fn shrink_to_fit ( & mut self ) {
@@ -209,15 +205,6 @@ impl TraitImpls {
209205 }
210206 }
211207
212- fn merge ( & mut self , other : & Self ) {
213- for ( trait_, other_map) in & other. map {
214- let map = self . map . entry ( * trait_) . or_default ( ) ;
215- for ( fp, impls) in other_map {
216- map. entry ( * fp) . or_default ( ) . extend ( impls) ;
217- }
218- }
219- }
220-
221208 /// Queries all trait impls for the given type.
222209 pub fn for_self_ty_without_blanket_impls (
223210 & self ,
@@ -713,10 +700,12 @@ fn lookup_impl_assoc_item_for_trait_ref(
713700 env : Arc < TraitEnvironment > ,
714701 name : & Name ,
715702) -> Option < ( AssocItemId , Substitution ) > {
703+ let hir_trait_id = trait_ref. hir_trait_id ( ) ;
716704 let self_ty = trait_ref. self_type_parameter ( Interner ) ;
717705 let self_ty_fp = TyFingerprint :: for_trait_impl ( & self_ty) ?;
718706 let impls = db. trait_impls_in_deps ( env. krate ) ;
719- let impls = impls. for_trait_and_self_ty ( trait_ref. hir_trait_id ( ) , self_ty_fp) ;
707+ let impls =
708+ impls. iter ( ) . flat_map ( |impls| impls. for_trait_and_self_ty ( hir_trait_id, self_ty_fp) ) ;
720709
721710 let table = InferenceTable :: new ( db, env) ;
722711
0 commit comments