@@ -10,7 +10,7 @@ use hir_def::{
1010 docs:: Documentation ,
1111 expr:: { BindingAnnotation , Pat , PatId } ,
1212 per_ns:: PerNs ,
13- resolver:: HasResolver ,
13+ resolver:: { HasResolver , Resolver } ,
1414 type_ref:: { Mutability , TypeRef } ,
1515 AdtId , AssocContainerId , ConstId , DefWithBodyId , EnumId , FunctionId , GenericDefId , HasModule ,
1616 ImplId , LocalEnumVariantId , LocalModuleId , LocalStructFieldId , Lookup , ModuleId , StaticId ,
@@ -912,10 +912,8 @@ impl Local {
912912 let def = DefWithBodyId :: from ( self . parent ) ;
913913 let infer = db. infer ( def) ;
914914 let ty = infer[ self . pat_id ] . clone ( ) ;
915- let resolver = def. resolver ( db. upcast ( ) ) ;
916915 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)
919917 }
920918
921919 pub fn source ( self , db : & dyn HirDatabase ) -> InFile < Either < ast:: BindPat , ast:: SelfParam > > {
@@ -1020,11 +1018,21 @@ impl ImplDef {
10201018
10211019#[ derive( Clone , PartialEq , Eq , Debug ) ]
10221020pub struct Type {
1023- pub ( crate ) krate : CrateId ,
1024- pub ( crate ) ty : InEnvironment < Ty > ,
1021+ krate : CrateId ,
1022+ ty : InEnvironment < Ty > ,
10251023}
10261024
10271025impl 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+
10281036 fn new ( db : & dyn HirDatabase , krate : CrateId , lexical_env : impl HasResolver , ty : Ty ) -> Type {
10291037 let resolver = lexical_env. resolver ( db. upcast ( ) ) ;
10301038 let environment = TraitEnvironment :: lower ( db, & resolver) ;
0 commit comments