use rustc::hir::exports::Export;
use rustc::middle::cstore::CrateStore;
use rustc::ty;
+use rustc_attr as attr;
use rustc_data_structures::sync::Lrc;
use rustc_errors::{struct_span_err, Applicability};
use rustc_expand::base::SyntaxExtension;
use syntax::ast::{self, Block, ForeignItem, ForeignItemKind, Item, ItemKind, NodeId};
use syntax::ast::{AssocItem, AssocItemKind, MetaItemKind, StmtKind};
use syntax::ast::{Ident, Name};
-use syntax::attr;
use syntax::token::{self, Token};
-use syntax::visit::{self, Visitor};
+use syntax::visit::{self, AssocCtxt, Visitor};
use log::debug;
use std::cell::Cell;
self.parent_scope.legacy = orig_current_legacy_scope;
}
- fn visit_trait_item(&mut self, item: &'b AssocItem) {
+ fn visit_assoc_item(&mut self, item: &'b AssocItem, ctxt: AssocCtxt) {
let parent = self.parent_scope.module;
if let AssocItemKind::Macro(_) = item.kind {
return;
}
+ if let AssocCtxt::Impl = ctxt {
+ self.resolve_visibility(&item.vis);
+ visit::walk_assoc_item(self, item, ctxt);
+ return;
+ }
+
// Add the item to the trait info.
let item_def_id = self.r.definitions.local_def_id(item.id);
let (res, ns) = match item.kind {
AssocItemKind::Const(..) => (Res::Def(DefKind::AssocConst, item_def_id), ValueNS),
- AssocItemKind::Fn(ref sig, _) => {
+ AssocItemKind::Fn(ref sig, _, _) => {
if sig.decl.has_self() {
self.r.has_self.insert(item_def_id);
}
let expansion = self.parent_scope.expansion;
self.r.define(parent, item.ident, ns, (res, vis, item.span, expansion));
- visit::walk_trait_item(self, item);
- }
-
- fn visit_impl_item(&mut self, item: &'b ast::AssocItem) {
- if let ast::AssocItemKind::Macro(..) = item.kind {
- self.visit_invoc(item.id);
- } else {
- self.resolve_visibility(&item.vis);
- visit::walk_impl_item(self, item);
- }
+ visit::walk_assoc_item(self, item, ctxt);
}
fn visit_token(&mut self, t: Token) {