123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #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<ExtractAPIVisitor> {
- public:
- ExtractAPIVisitor(ASTContext &Context,
- llvm::unique_function<bool(SourceLocation)> 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<ObjCIvarDecl>>
- Ivars);
- void recordObjCProtocols(ObjCContainerRecord *Container,
- ObjCInterfaceDecl::protocol_range Protocols);
- ASTContext &Context;
- APISet &API;
- llvm::unique_function<bool(SourceLocation)> LocationChecker;
- };
- } // namespace extractapi
- } // namespace clang
- #endif // LLVM_CLANG_EXTRACTAPI_EXTRACT_API_VISITOR_H
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|