1 #include "clang/ExtractAPI/AvailabilityInfo.h" 2 #include "clang/AST/ASTContext.h" 3 #include "clang/AST/Attr.h" 4 #include "clang/Basic/TargetInfo.h" 5 #include "llvm/ADT/STLExtras.h" 6 7 using namespace clang::extractapi; 8 using namespace llvm; 9 createFromDecl(const Decl * Decl)10AvailabilityInfo AvailabilityInfo::createFromDecl(const Decl *Decl) { 11 ASTContext &Context = Decl->getASTContext(); 12 StringRef PlatformName = Context.getTargetInfo().getPlatformName(); 13 AvailabilityInfo Availability; 14 15 // Collect availability attributes from all redeclarations. 16 for (const auto *RD : Decl->redecls()) { 17 for (const auto *A : RD->specific_attrs<AvailabilityAttr>()) { 18 if (A->getPlatform()->getName() != PlatformName) 19 continue; 20 Availability = 21 AvailabilityInfo(A->getPlatform()->getName(), A->getIntroduced(), 22 A->getDeprecated(), A->getObsoleted(), false, false); 23 break; 24 } 25 26 if (const auto *A = RD->getAttr<UnavailableAttr>()) 27 if (!A->isImplicit()) 28 Availability.UnconditionallyUnavailable = true; 29 30 if (const auto *A = RD->getAttr<DeprecatedAttr>()) 31 if (!A->isImplicit()) 32 Availability.UnconditionallyDeprecated = true; 33 } 34 return Availability; 35 } 36