Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- ExtractAPI/ExtractAPIVisitor.h ---------------------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. ///
  9. /// \file
  10. /// This file defines the ExtractAPVisitor AST visitation interface.
  11. ///
  12. //===----------------------------------------------------------------------===//
  13.  
  14. #ifndef LLVM_CLANG_EXTRACTAPI_EXTRACT_API_VISITOR_H
  15. #define LLVM_CLANG_EXTRACTAPI_EXTRACT_API_VISITOR_H
  16.  
  17. #include "clang/AST/RecursiveASTVisitor.h"
  18. #include "clang/Basic/SourceManager.h"
  19. #include "clang/ExtractAPI/API.h"
  20. #include "llvm/ADT/FunctionExtras.h"
  21.  
  22. namespace clang {
  23. namespace extractapi {
  24.  
  25. /// The RecursiveASTVisitor to traverse symbol declarations and collect API
  26. /// information.
  27. class ExtractAPIVisitor : public RecursiveASTVisitor<ExtractAPIVisitor> {
  28. public:
  29.   ExtractAPIVisitor(ASTContext &Context,
  30.                     llvm::unique_function<bool(SourceLocation)> LocationChecker,
  31.                     APISet &API)
  32.       : Context(Context), API(API),
  33.         LocationChecker(std::move(LocationChecker)) {}
  34.  
  35.   const APISet &getAPI() const { return API; }
  36.  
  37.   bool VisitVarDecl(const VarDecl *Decl);
  38.  
  39.   bool VisitFunctionDecl(const FunctionDecl *Decl);
  40.  
  41.   bool VisitEnumDecl(const EnumDecl *Decl);
  42.  
  43.   bool VisitRecordDecl(const RecordDecl *Decl);
  44.  
  45.   bool VisitObjCInterfaceDecl(const ObjCInterfaceDecl *Decl);
  46.  
  47.   bool VisitObjCProtocolDecl(const ObjCProtocolDecl *Decl);
  48.  
  49.   bool VisitTypedefNameDecl(const TypedefNameDecl *Decl);
  50.  
  51.   bool VisitObjCCategoryDecl(const ObjCCategoryDecl *Decl);
  52.  
  53. private:
  54.   /// Collect API information for the enum constants and associate with the
  55.   /// parent enum.
  56.   void recordEnumConstants(EnumRecord *EnumRecord,
  57.                            const EnumDecl::enumerator_range Constants);
  58.  
  59.   /// Collect API information for the struct fields and associate with the
  60.   /// parent struct.
  61.   void recordStructFields(StructRecord *StructRecord,
  62.                           const RecordDecl::field_range Fields);
  63.  
  64.   /// Collect API information for the Objective-C methods and associate with the
  65.   /// parent container.
  66.   void recordObjCMethods(ObjCContainerRecord *Container,
  67.                          const ObjCContainerDecl::method_range Methods);
  68.  
  69.   void recordObjCProperties(ObjCContainerRecord *Container,
  70.                             const ObjCContainerDecl::prop_range Properties);
  71.  
  72.   void recordObjCInstanceVariables(
  73.       ObjCContainerRecord *Container,
  74.       const llvm::iterator_range<
  75.           DeclContext::specific_decl_iterator<ObjCIvarDecl>>
  76.           Ivars);
  77.  
  78.   void recordObjCProtocols(ObjCContainerRecord *Container,
  79.                            ObjCInterfaceDecl::protocol_range Protocols);
  80.   ASTContext &Context;
  81.   APISet &API;
  82.   llvm::unique_function<bool(SourceLocation)> LocationChecker;
  83. };
  84.  
  85. } // namespace extractapi
  86. } // namespace clang
  87.  
  88. #endif // LLVM_CLANG_EXTRACTAPI_EXTRACT_API_VISITOR_H
  89.