Skip to content

Commit 3686530

Browse files
committed
Decouple
1 parent 12501fc commit 3686530

File tree

1 file changed

+15
-20
lines changed

1 file changed

+15
-20
lines changed

crates/ra_hir/src/ty/lower.rs

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ use crate::{
3131
utils::{all_super_traits, associated_type_by_name_including_super_traits, variant_data},
3232
},
3333
util::make_mut_slice,
34-
ImplBlock, Trait,
3534
};
3635

3736
impl Ty {
@@ -148,13 +147,8 @@ impl Ty {
148147
) -> Ty {
149148
let ty = match resolution {
150149
TypeNs::TraitId(trait_) => {
151-
let trait_ref = TraitRef::from_resolved_path(
152-
db,
153-
resolver,
154-
trait_.into(),
155-
resolved_segment,
156-
None,
157-
);
150+
let trait_ref =
151+
TraitRef::from_resolved_path(db, resolver, trait_, resolved_segment, None);
158152
return if remaining_segments.len() == 1 {
159153
let segment = &remaining_segments[0];
160154
let associated_ty = associated_type_by_name_including_super_traits(
@@ -187,7 +181,11 @@ impl Ty {
187181
let name = resolved_segment.name.clone();
188182
Ty::Param { idx, name }
189183
}
190-
TypeNs::SelfType(impl_block) => ImplBlock::from(impl_block).target_ty(db),
184+
TypeNs::SelfType(impl_id) => {
185+
let impl_data = db.impl_data(impl_id);
186+
let resolver = impl_id.resolver(db);
187+
Ty::from_hir(db, &resolver, &impl_data.target_type)
188+
}
191189
TypeNs::AdtSelfType(adt) => db.ty(adt.into()),
192190

193191
TypeNs::AdtId(it) => Ty::from_hir_path_inner(db, resolver, resolved_segment, it.into()),
@@ -250,14 +248,11 @@ impl Ty {
250248
GenericPredicate::Implemented(tr) if tr.self_ty() == &self_ty => Some(tr.trait_),
251249
_ => None,
252250
});
253-
let traits = traits_from_env.flat_map(|t| all_super_traits(db, t)).map(Trait::from);
251+
let traits = traits_from_env.flat_map(|t| all_super_traits(db, t));
254252
for t in traits {
255-
if let Some(associated_ty) = db.trait_data(t.id).associated_type_by_name(&segment.name)
256-
{
257-
let substs = Substs::build_for_def(db, t.id)
258-
.push(self_ty.clone())
259-
.fill_with_unknown()
260-
.build();
253+
if let Some(associated_ty) = db.trait_data(t).associated_type_by_name(&segment.name) {
254+
let substs =
255+
Substs::build_for_def(db, t).push(self_ty.clone()).fill_with_unknown().build();
261256
// FIXME handle type parameters on the segment
262257
return Ty::Projection(ProjectionTy { associated_ty, parameters: substs });
263258
}
@@ -391,15 +386,15 @@ impl TraitRef {
391386
pub(super) fn from_resolved_path(
392387
db: &impl HirDatabase,
393388
resolver: &Resolver,
394-
resolved: Trait,
389+
resolved: TraitId,
395390
segment: &PathSegment,
396391
explicit_self_ty: Option<Ty>,
397392
) -> Self {
398393
let mut substs = TraitRef::substs_from_path(db, resolver, segment, resolved);
399394
if let Some(self_ty) = explicit_self_ty {
400395
make_mut_slice(&mut substs.0)[0] = self_ty;
401396
}
402-
TraitRef { trait_: resolved.id, substs }
397+
TraitRef { trait_: resolved, substs }
403398
}
404399

405400
pub(crate) fn from_hir(
@@ -419,11 +414,11 @@ impl TraitRef {
419414
db: &impl HirDatabase,
420415
resolver: &Resolver,
421416
segment: &PathSegment,
422-
resolved: Trait,
417+
resolved: TraitId,
423418
) -> Substs {
424419
let has_self_param =
425420
segment.args_and_bindings.as_ref().map(|a| a.has_self_type).unwrap_or(false);
426-
substs_from_path_segment(db, resolver, segment, Some(resolved.id.into()), !has_self_param)
421+
substs_from_path_segment(db, resolver, segment, Some(resolved.into()), !has_self_param)
427422
}
428423

429424
pub(crate) fn for_trait(db: &impl HirDatabase, trait_: TraitId) -> TraitRef {

0 commit comments

Comments
 (0)