MCPcopy Create free account
hub / github.com/KDAB/codebrowser / getVisibility

Method getVisibility

generator/annotator.cpp:123–174  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

121{ }
122
123Annotator::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
176bool Annotator::shouldProcess(clang::FileID FID)
177{

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected