#pragma once #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-parameter" #endif //===- ExtractAPI/ExtractAPIVisitor.h ---------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// This file defines the ExtractAPVisitor AST visitation interface. /// //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_EXTRACTAPI_EXTRACT_API_VISITOR_H #define LLVM_CLANG_EXTRACTAPI_EXTRACT_API_VISITOR_H #include "clang/AST/RecursiveASTVisitor.h" #include "clang/Basic/SourceManager.h" #include "clang/ExtractAPI/API.h" #include "llvm/ADT/FunctionExtras.h" namespace clang { namespace extractapi { /// The RecursiveASTVisitor to traverse symbol declarations and collect API /// information. class ExtractAPIVisitor : public RecursiveASTVisitor { public: ExtractAPIVisitor(ASTContext &Context, llvm::unique_function LocationChecker, APISet &API) : Context(Context), API(API), LocationChecker(std::move(LocationChecker)) {} const APISet &getAPI() const { return API; } bool VisitVarDecl(const VarDecl *Decl); bool VisitFunctionDecl(const FunctionDecl *Decl); bool VisitEnumDecl(const EnumDecl *Decl); bool VisitRecordDecl(const RecordDecl *Decl); bool VisitObjCInterfaceDecl(const ObjCInterfaceDecl *Decl); bool VisitObjCProtocolDecl(const ObjCProtocolDecl *Decl); bool VisitTypedefNameDecl(const TypedefNameDecl *Decl); bool VisitObjCCategoryDecl(const ObjCCategoryDecl *Decl); private: /// Collect API information for the enum constants and associate with the /// parent enum. void recordEnumConstants(EnumRecord *EnumRecord, const EnumDecl::enumerator_range Constants); /// Collect API information for the struct fields and associate with the /// parent struct. void recordStructFields(StructRecord *StructRecord, const RecordDecl::field_range Fields); /// Collect API information for the Objective-C methods and associate with the /// parent container. void recordObjCMethods(ObjCContainerRecord *Container, const ObjCContainerDecl::method_range Methods); void recordObjCProperties(ObjCContainerRecord *Container, const ObjCContainerDecl::prop_range Properties); void recordObjCInstanceVariables( ObjCContainerRecord *Container, const llvm::iterator_range< DeclContext::specific_decl_iterator> Ivars); void recordObjCProtocols(ObjCContainerRecord *Container, ObjCInterfaceDecl::protocol_range Protocols); ASTContext &Context; APISet &API; llvm::unique_function LocationChecker; }; } // namespace extractapi } // namespace clang #endif // LLVM_CLANG_EXTRACTAPI_EXTRACT_API_VISITOR_H #ifdef __GNUC__ #pragma GCC diagnostic pop #endif