@@ -46,15 +46,15 @@ trait ToNameBinding<'a> {
46
46
fn to_name_binding ( self ) -> NameBinding < ' a > ;
47
47
}
48
48
49
- impl < ' a > ToNameBinding < ' a > for ( Module < ' a > , Span ) {
49
+ impl < ' a > ToNameBinding < ' a > for ( Module < ' a > , Span , ty :: Visibility ) {
50
50
fn to_name_binding ( self ) -> NameBinding < ' a > {
51
- NameBinding :: create_from_module ( self . 0 , Some ( self . 1 ) )
51
+ NameBinding { kind : NameBindingKind :: Module ( self . 0 ) , span : self . 1 , vis : self . 2 }
52
52
}
53
53
}
54
54
55
55
impl < ' a > ToNameBinding < ' a > for ( Def , Span , ty:: Visibility ) {
56
56
fn to_name_binding ( self ) -> NameBinding < ' a > {
57
- NameBinding { kind : NameBindingKind :: Def ( self . 0 ) , span : Some ( self . 1 ) , vis : self . 2 }
57
+ NameBinding { kind : NameBindingKind :: Def ( self . 0 ) , span : self . 1 , vis : self . 2 }
58
58
}
59
59
}
60
60
@@ -247,8 +247,8 @@ impl<'b, 'tcx:'b> Resolver<'b, 'tcx> {
247
247
} ;
248
248
let parent_link = ModuleParentLink ( parent, name) ;
249
249
let def = Def :: Mod ( def_id) ;
250
- let module = self . new_extern_crate_module ( parent_link, def, vis , item. id ) ;
251
- self . define ( parent, name, TypeNS , ( module, sp) ) ;
250
+ let module = self . new_extern_crate_module ( parent_link, def, item. id ) ;
251
+ self . define ( parent, name, TypeNS , ( module, sp, vis ) ) ;
252
252
253
253
self . build_reduced_graph_for_external_crate ( module) ;
254
254
}
@@ -257,8 +257,8 @@ impl<'b, 'tcx:'b> Resolver<'b, 'tcx> {
257
257
ItemMod ( ..) => {
258
258
let parent_link = ModuleParentLink ( parent, name) ;
259
259
let def = Def :: Mod ( self . ast_map . local_def_id ( item. id ) ) ;
260
- let module = self . new_module ( parent_link, Some ( def) , false , vis ) ;
261
- self . define ( parent, name, TypeNS , ( module, sp) ) ;
260
+ let module = self . new_module ( parent_link, Some ( def) , false ) ;
261
+ self . define ( parent, name, TypeNS , ( module, sp, vis ) ) ;
262
262
self . module_map . insert ( item. id , module) ;
263
263
* parent_ref = module;
264
264
}
@@ -289,12 +289,12 @@ impl<'b, 'tcx:'b> Resolver<'b, 'tcx> {
289
289
ItemEnum ( ref enum_definition, _) => {
290
290
let parent_link = ModuleParentLink ( parent, name) ;
291
291
let def = Def :: Enum ( self . ast_map . local_def_id ( item. id ) ) ;
292
- let module = self . new_module ( parent_link, Some ( def) , false , vis ) ;
293
- self . define ( parent, name, TypeNS , ( module, sp) ) ;
292
+ let module = self . new_module ( parent_link, Some ( def) , false ) ;
293
+ self . define ( parent, name, TypeNS , ( module, sp, vis ) ) ;
294
294
295
295
for variant in & ( * enum_definition) . variants {
296
296
let item_def_id = self . ast_map . local_def_id ( item. id ) ;
297
- self . build_reduced_graph_for_variant ( variant, item_def_id, module) ;
297
+ self . build_reduced_graph_for_variant ( variant, item_def_id, module, vis ) ;
298
298
}
299
299
}
300
300
@@ -328,21 +328,25 @@ impl<'b, 'tcx:'b> Resolver<'b, 'tcx> {
328
328
// Add all the items within to a new module.
329
329
let parent_link = ModuleParentLink ( parent, name) ;
330
330
let def = Def :: Trait ( def_id) ;
331
- let module_parent = self . new_module ( parent_link, Some ( def) , false , vis ) ;
332
- self . define ( parent, name, TypeNS , ( module_parent, sp) ) ;
331
+ let module_parent = self . new_module ( parent_link, Some ( def) , false ) ;
332
+ self . define ( parent, name, TypeNS , ( module_parent, sp, vis ) ) ;
333
333
334
334
// Add the names of all the items to the trait info.
335
335
for item in items {
336
336
let item_def_id = self . ast_map . local_def_id ( item. id ) ;
337
+ let mut is_static_method = false ;
337
338
let ( def, ns) = match item. node {
338
339
hir:: ConstTraitItem ( ..) => ( Def :: AssociatedConst ( item_def_id) , ValueNS ) ,
339
- hir:: MethodTraitItem ( ..) => ( Def :: Method ( item_def_id) , ValueNS ) ,
340
+ hir:: MethodTraitItem ( ref sig, _) => {
341
+ is_static_method = sig. explicit_self . node == hir:: SelfStatic ;
342
+ ( Def :: Method ( item_def_id) , ValueNS )
343
+ }
340
344
hir:: TypeTraitItem ( ..) => ( Def :: AssociatedTy ( def_id, item_def_id) , TypeNS ) ,
341
345
} ;
342
346
343
347
self . define ( module_parent, item. name , ns, ( def, item. span , vis) ) ;
344
348
345
- self . trait_item_map . insert ( ( item. name , def_id) , item_def_id ) ;
349
+ self . trait_item_map . insert ( ( item. name , def_id) , is_static_method ) ;
346
350
}
347
351
}
348
352
}
@@ -353,7 +357,8 @@ impl<'b, 'tcx:'b> Resolver<'b, 'tcx> {
353
357
fn build_reduced_graph_for_variant ( & mut self ,
354
358
variant : & Variant ,
355
359
item_id : DefId ,
356
- parent : Module < ' b > ) {
360
+ parent : Module < ' b > ,
361
+ vis : ty:: Visibility ) {
357
362
let name = variant. node . name ;
358
363
if variant. node . data . is_struct ( ) {
359
364
// Not adding fields for variants as they are not accessed with a self receiver
@@ -364,8 +369,8 @@ impl<'b, 'tcx:'b> Resolver<'b, 'tcx> {
364
369
// Variants are always treated as importable to allow them to be glob used.
365
370
// All variants are defined in both type and value namespaces as future-proofing.
366
371
let def = Def :: Variant ( item_id, self . ast_map . local_def_id ( variant. node . data . id ( ) ) ) ;
367
- self . define ( parent, name, ValueNS , ( def, variant. span , parent . vis ) ) ;
368
- self . define ( parent, name, TypeNS , ( def, variant. span , parent . vis ) ) ;
372
+ self . define ( parent, name, ValueNS , ( def, variant. span , vis) ) ;
373
+ self . define ( parent, name, TypeNS , ( def, variant. span , vis) ) ;
369
374
}
370
375
371
376
/// Constructs the reduced graph for one foreign item.
@@ -396,7 +401,7 @@ impl<'b, 'tcx:'b> Resolver<'b, 'tcx> {
396
401
block_id) ;
397
402
398
403
let parent_link = BlockParentLink ( parent, block_id) ;
399
- let new_module = self . new_module ( parent_link, None , false , parent . vis ) ;
404
+ let new_module = self . new_module ( parent_link, None , false ) ;
400
405
self . module_map . insert ( block_id, new_module) ;
401
406
* parent = new_module;
402
407
}
@@ -425,8 +430,8 @@ impl<'b, 'tcx:'b> Resolver<'b, 'tcx> {
425
430
debug ! ( "(building reduced graph for external crate) building module {} {:?}" ,
426
431
name, vis) ;
427
432
let parent_link = ModuleParentLink ( parent, name) ;
428
- let module = self . new_module ( parent_link, Some ( def) , true , vis ) ;
429
- self . try_define ( parent, name, TypeNS , ( module, DUMMY_SP ) ) ;
433
+ let module = self . new_module ( parent_link, Some ( def) , true ) ;
434
+ self . try_define ( parent, name, TypeNS , ( module, DUMMY_SP , vis ) ) ;
430
435
}
431
436
Def :: Variant ( _, variant_id) => {
432
437
debug ! ( "(building reduced graph for external crate) building variant {}" , name) ;
@@ -463,12 +468,12 @@ impl<'b, 'tcx:'b> Resolver<'b, 'tcx> {
463
468
'{}'",
464
469
trait_item_name) ;
465
470
466
- self . trait_item_map . insert ( ( trait_item_name, def_id) , trait_item_def . def_id ( ) ) ;
471
+ self . trait_item_map . insert ( ( trait_item_name, def_id) , false ) ;
467
472
}
468
473
469
474
let parent_link = ModuleParentLink ( parent, name) ;
470
- let module = self . new_module ( parent_link, Some ( def) , true , vis ) ;
471
- self . try_define ( parent, name, TypeNS , ( module, DUMMY_SP ) ) ;
475
+ let module = self . new_module ( parent_link, Some ( def) , true ) ;
476
+ self . try_define ( parent, name, TypeNS , ( module, DUMMY_SP , vis ) ) ;
472
477
}
473
478
Def :: TyAlias ( ..) | Def :: AssociatedTy ( ..) => {
474
479
debug ! ( "(building reduced graph for external crate) building type {}" , name) ;
0 commit comments