Skip to content

Commit 30791c5

Browse files
Use Type::new_with_resolver_inner more
1 parent 2972407 commit 30791c5

File tree

1 file changed

+14
-26
lines changed

1 file changed

+14
-26
lines changed

crates/hir/src/lib.rs

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -812,13 +812,11 @@ impl Function {
812812
/// Get this function's return type
813813
pub fn ret_type(self, db: &dyn HirDatabase) -> Type {
814814
let resolver = self.id.resolver(db.upcast());
815+
let krate = self.id.lookup(db.upcast()).container.module(db.upcast()).krate();
815816
let ret_type = &db.function_data(self.id).ret_type;
816817
let ctx = hir_ty::TyLoweringContext::new(db, &resolver);
817-
let environment = TraitEnvironment::lower(db, &resolver);
818-
Type {
819-
krate: self.id.lookup(db.upcast()).container.module(db.upcast()).krate(),
820-
ty: InEnvironment { value: Ty::from_hir_ext(&ctx, ret_type).0, environment },
821-
}
818+
let ty = Ty::from_hir_ext(&ctx, ret_type).0;
819+
Type::new_with_resolver_inner(db, krate, &resolver, ty)
822820
}
823821

824822
pub fn self_param(self, db: &dyn HirDatabase) -> Option<SelfParam> {
@@ -830,14 +828,15 @@ impl Function {
830828

831829
pub fn assoc_fn_params(self, db: &dyn HirDatabase) -> Vec<Param> {
832830
let resolver = self.id.resolver(db.upcast());
831+
let krate = self.id.lookup(db.upcast()).container.module(db.upcast()).krate();
833832
let ctx = hir_ty::TyLoweringContext::new(db, &resolver);
834833
let environment = TraitEnvironment::lower(db, &resolver);
835834
db.function_data(self.id)
836835
.params
837836
.iter()
838837
.map(|type_ref| {
839838
let ty = Type {
840-
krate: self.id.lookup(db.upcast()).container.module(db.upcast()).krate(),
839+
krate,
841840
ty: InEnvironment {
842841
value: Ty::from_hir_ext(&ctx, type_ref).0,
843842
environment: environment.clone(),
@@ -1402,12 +1401,9 @@ impl TypeParam {
14021401

14031402
pub fn ty(self, db: &dyn HirDatabase) -> Type {
14041403
let resolver = self.id.parent.resolver(db.upcast());
1405-
let environment = TraitEnvironment::lower(db, &resolver);
1404+
let krate = self.id.parent.module(db.upcast()).krate();
14061405
let ty = Ty::Placeholder(self.id);
1407-
Type {
1408-
krate: self.id.parent.module(db.upcast()).krate(),
1409-
ty: InEnvironment { value: ty, environment },
1410-
}
1406+
Type::new_with_resolver_inner(db, krate, &resolver, ty)
14111407
}
14121408

14131409
pub fn trait_bounds(self, db: &dyn HirDatabase) -> Vec<Trait> {
@@ -1426,14 +1422,11 @@ impl TypeParam {
14261422
let params = db.generic_defaults(self.id.parent);
14271423
let local_idx = hir_ty::param_idx(db, self.id)?;
14281424
let resolver = self.id.parent.resolver(db.upcast());
1429-
let environment = TraitEnvironment::lower(db, &resolver);
1425+
let krate = self.id.parent.module(db.upcast()).krate();
14301426
let ty = params.get(local_idx)?.clone();
14311427
let subst = Substs::type_params(db, self.id.parent);
14321428
let ty = ty.subst(&subst.prefix(local_idx));
1433-
Some(Type {
1434-
krate: self.id.parent.module(db.upcast()).krate(),
1435-
ty: InEnvironment { value: ty, environment },
1436-
})
1429+
Some(Type::new_with_resolver_inner(db, krate, &resolver, ty))
14371430
}
14381431
}
14391432

@@ -1522,13 +1515,10 @@ impl Impl {
15221515
pub fn target_ty(self, db: &dyn HirDatabase) -> Type {
15231516
let impl_data = db.impl_data(self.id);
15241517
let resolver = self.id.resolver(db.upcast());
1518+
let krate = self.id.lookup(db.upcast()).container.module(db.upcast()).krate();
15251519
let ctx = hir_ty::TyLoweringContext::new(db, &resolver);
1526-
let environment = TraitEnvironment::lower(db, &resolver);
15271520
let ty = Ty::from_hir(&ctx, &impl_data.target_type);
1528-
Type {
1529-
krate: self.id.lookup(db.upcast()).container.module(db.upcast()).krate(),
1530-
ty: InEnvironment { value: ty, environment },
1531-
}
1521+
Type::new_with_resolver_inner(db, krate, &resolver, ty)
15321522
}
15331523

15341524
pub fn items(self, db: &dyn HirDatabase) -> Vec<AssocItem> {
@@ -1724,13 +1714,11 @@ impl Type {
17241714
};
17251715

17261716
match db.trait_solve(self.krate, goal)? {
1727-
Solution::Unique(SolutionVariables(subst)) => subst.value.first().cloned(),
1717+
Solution::Unique(SolutionVariables(subst)) => {
1718+
subst.value.first().map(|ty| self.derived(ty.clone()))
1719+
}
17281720
Solution::Ambig(_) => None,
17291721
}
1730-
.map(|ty| Type {
1731-
krate: self.krate,
1732-
ty: InEnvironment { value: ty, environment: Arc::clone(&self.ty.environment) },
1733-
})
17341722
}
17351723

17361724
pub fn is_copy(&self, db: &dyn HirDatabase) -> bool {

0 commit comments

Comments
 (0)