@@ -160,17 +160,13 @@ impl TraitImpls {
160
160
Arc :: new ( impls)
161
161
}
162
162
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 > ] > {
164
167
let _p = profile:: span ( "trait_impls_in_deps_query" ) . detail ( || format ! ( "{krate:?}" ) ) ;
165
168
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 ( )
174
170
}
175
171
176
172
fn shrink_to_fit ( & mut self ) {
@@ -209,15 +205,6 @@ impl TraitImpls {
209
205
}
210
206
}
211
207
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
-
221
208
/// Queries all trait impls for the given type.
222
209
pub fn for_self_ty_without_blanket_impls (
223
210
& self ,
@@ -713,10 +700,12 @@ fn lookup_impl_assoc_item_for_trait_ref(
713
700
env : Arc < TraitEnvironment > ,
714
701
name : & Name ,
715
702
) -> Option < ( AssocItemId , Substitution ) > {
703
+ let hir_trait_id = trait_ref. hir_trait_id ( ) ;
716
704
let self_ty = trait_ref. self_type_parameter ( Interner ) ;
717
705
let self_ty_fp = TyFingerprint :: for_trait_impl ( & self_ty) ?;
718
706
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) ) ;
720
709
721
710
let table = InferenceTable :: new ( db, env) ;
722
711
0 commit comments