| 121 | { } |
| 122 | |
| 123 | Annotator::Visibility Annotator::getVisibility(const clang::NamedDecl *decl) |
| 124 | { |
| 125 | if (llvm::isa<clang::EnumConstantDecl>(decl) || |
| 126 | llvm::isa<clang::EnumDecl>(decl) || |
| 127 | llvm::isa<clang::NamespaceDecl>(decl) || |
| 128 | llvm::isa<clang::NamespaceAliasDecl>(decl) || |
| 129 | llvm::isa<clang::TypedefDecl>(decl) || |
| 130 | llvm::isa<clang::TypedefNameDecl>(decl)) { |
| 131 | |
| 132 | if (!decl->isDefinedOutsideFunctionOrMethod()) |
| 133 | return Visibility::Local; |
| 134 | if (decl->isInAnonymousNamespace()) |
| 135 | return Visibility::Static; |
| 136 | return Visibility::Global; //FIXME |
| 137 | } |
| 138 | |
| 139 | if (llvm::isa<clang::NonTypeTemplateParmDecl>(decl)) |
| 140 | return Visibility::Static; |
| 141 | |
| 142 | if (llvm::isa<clang::LabelDecl>(decl)) |
| 143 | return Visibility::Local; |
| 144 | |
| 145 | clang::SourceManager &sm = getSourceMgr(); |
| 146 | clang::FileID mainFID = sm.getMainFileID(); |
| 147 | |
| 148 | switch (decl->getLinkageInternal()) |
| 149 | { |
| 150 | default: |
| 151 | case clang::NoLinkage: |
| 152 | return Visibility::Local; |
| 153 | case clang::ExternalLinkage: |
| 154 | if (decl->getDeclContext()->isRecord() |
| 155 | && mainFID == sm.getFileID(sm.getSpellingLoc(llvm::dyn_cast<clang::NamedDecl>(decl->getDeclContext())->getCanonicalDecl()->getSourceRange().getBegin()))) { |
| 156 | // private class |
| 157 | const clang::CXXMethodDecl* fun = llvm::dyn_cast<clang::CXXMethodDecl>(decl); |
| 158 | if (fun && fun->isVirtual()) |
| 159 | return Visibility::Global; //because we need to check overrides |
| 160 | return Visibility::Static; |
| 161 | } |
| 162 | if (decl->isInvalidDecl() && llvm::isa<clang::VarDecl>(decl)) { |
| 163 | // Avoid polution because of invalid declarations |
| 164 | return Visibility::Static; |
| 165 | } |
| 166 | return Visibility::Global; |
| 167 | case clang::InternalLinkage: |
| 168 | if (mainFID != sm.getFileID(sm.getSpellingLoc(decl->getSourceRange().getBegin()))) |
| 169 | return Visibility::Global; |
| 170 | return Visibility::Static; |
| 171 | case clang::UniqueExternalLinkage: |
| 172 | return Visibility::Static; |
| 173 | } |
| 174 | } |
| 175 | |
| 176 | bool Annotator::shouldProcess(clang::FileID FID) |
| 177 | { |
nothing calls this directly
no outgoing calls
no test coverage detected