@@ -10,7 +10,7 @@ use hir_def::{
10
10
docs:: Documentation ,
11
11
expr:: { BindingAnnotation , Pat , PatId } ,
12
12
per_ns:: PerNs ,
13
- resolver:: HasResolver ,
13
+ resolver:: { HasResolver , Resolver } ,
14
14
type_ref:: { Mutability , TypeRef } ,
15
15
AdtId , AssocContainerId , ConstId , DefWithBodyId , EnumId , FunctionId , GenericDefId , HasModule ,
16
16
ImplId , LocalEnumVariantId , LocalModuleId , LocalStructFieldId , Lookup , ModuleId , StaticId ,
@@ -912,10 +912,8 @@ impl Local {
912
912
let def = DefWithBodyId :: from ( self . parent ) ;
913
913
let infer = db. infer ( def) ;
914
914
let ty = infer[ self . pat_id ] . clone ( ) ;
915
- let resolver = def. resolver ( db. upcast ( ) ) ;
916
915
let krate = def. module ( db. upcast ( ) ) . krate ;
917
- let environment = TraitEnvironment :: lower ( db, & resolver) ;
918
- Type { krate, ty : InEnvironment { value : ty, environment } }
916
+ Type :: new ( db, krate, def, ty)
919
917
}
920
918
921
919
pub fn source ( self , db : & dyn HirDatabase ) -> InFile < Either < ast:: BindPat , ast:: SelfParam > > {
@@ -1020,11 +1018,21 @@ impl ImplDef {
1020
1018
1021
1019
#[ derive( Clone , PartialEq , Eq , Debug ) ]
1022
1020
pub struct Type {
1023
- pub ( crate ) krate : CrateId ,
1024
- pub ( crate ) ty : InEnvironment < Ty > ,
1021
+ krate : CrateId ,
1022
+ ty : InEnvironment < Ty > ,
1025
1023
}
1026
1024
1027
1025
impl Type {
1026
+ pub ( crate ) fn new_with_resolver (
1027
+ db : & dyn HirDatabase ,
1028
+ resolver : & Resolver ,
1029
+ ty : Ty ,
1030
+ ) -> Option < Type > {
1031
+ let krate = resolver. krate ( ) ?;
1032
+ let environment = TraitEnvironment :: lower ( db, & resolver) ;
1033
+ Some ( Type { krate, ty : InEnvironment { value : ty, environment } } )
1034
+ }
1035
+
1028
1036
fn new ( db : & dyn HirDatabase , krate : CrateId , lexical_env : impl HasResolver , ty : Ty ) -> Type {
1029
1037
let resolver = lexical_env. resolver ( db. upcast ( ) ) ;
1030
1038
let environment = TraitEnvironment :: lower ( db, & resolver) ;
0 commit comments