#ifndef LLVM_CLANG_EXTRACTAPI_EXTRACT_API_VISITOR_H
#define LLVM_CLANG_EXTRACTAPI_EXTRACT_API_VISITOR_H
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/ParentMapContext.h"
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/Module.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/Specifiers.h"
#include "clang/ExtractAPI/API.h"
#include "clang/ExtractAPI/DeclarationFragments.h"
#include "clang/ExtractAPI/TypedefUnderlyingTypeResolver.h"
#include "clang/Index/USRGeneration.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/Casting.h"
#include <type_traits>
namespace clang {
namespace extractapi {
namespace impl {
template <typename Derived>
class ExtractAPIVisitorBase : public RecursiveASTVisitor<Derived> { … };
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitVarDecl(const VarDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitFunctionDecl(
const FunctionDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitEnumDecl(const EnumDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::WalkUpFromFunctionDecl(
const FunctionDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::WalkUpFromRecordDecl(
const RecordDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::WalkUpFromCXXRecordDecl(
const CXXRecordDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::WalkUpFromCXXMethodDecl(
const CXXMethodDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::WalkUpFromClassTemplateSpecializationDecl(
const ClassTemplateSpecializationDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::
WalkUpFromClassTemplatePartialSpecializationDecl(
const ClassTemplatePartialSpecializationDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::WalkUpFromVarTemplateDecl(
const VarTemplateDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::WalkUpFromVarTemplateSpecializationDecl(
const VarTemplateSpecializationDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::
WalkUpFromVarTemplatePartialSpecializationDecl(
const VarTemplatePartialSpecializationDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::WalkUpFromFunctionTemplateDecl(
const FunctionTemplateDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::WalkUpFromNamespaceDecl(
const NamespaceDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitNamespaceDecl(
const NamespaceDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::TraverseRecordDecl(RecordDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitRecordDecl(const RecordDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::TraverseCXXRecordDecl(
CXXRecordDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitCXXRecordDecl(
const CXXRecordDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitCXXMethodDecl(
const CXXMethodDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitCXXConstructorDecl(
const CXXConstructorDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitCXXDestructorDecl(
const CXXDestructorDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitConceptDecl(const ConceptDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitClassTemplateSpecializationDecl(
const ClassTemplateSpecializationDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::
VisitClassTemplatePartialSpecializationDecl(
const ClassTemplatePartialSpecializationDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitVarTemplateDecl(
const VarTemplateDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitVarTemplateSpecializationDecl(
const VarTemplateSpecializationDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitVarTemplatePartialSpecializationDecl(
const VarTemplatePartialSpecializationDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitFunctionTemplateDecl(
const FunctionTemplateDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitObjCInterfaceDecl(
const ObjCInterfaceDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitObjCProtocolDecl(
const ObjCProtocolDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitTypedefNameDecl(
const TypedefNameDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitObjCCategoryDecl(
const ObjCCategoryDecl *Decl) { … }
template <typename Derived>
void ExtractAPIVisitorBase<Derived>::recordEnumConstants(
SymbolReference Container, const EnumDecl::enumerator_range Constants) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitFieldDecl(const FieldDecl *Decl) { … }
template <typename Derived>
bool ExtractAPIVisitorBase<Derived>::VisitCXXConversionDecl(
const CXXConversionDecl *Decl) { … }
template <typename Derived>
void ExtractAPIVisitorBase<Derived>::recordObjCMethods(
ObjCContainerRecord *Container,
const ObjCContainerDecl::method_range Methods) { … }
template <typename Derived>
void ExtractAPIVisitorBase<Derived>::recordObjCProperties(
ObjCContainerRecord *Container,
const ObjCContainerDecl::prop_range Properties) { … }
template <typename Derived>
void ExtractAPIVisitorBase<Derived>::recordObjCInstanceVariables(
ObjCContainerRecord *Container,
const llvm::iterator_range<
DeclContext::specific_decl_iterator<ObjCIvarDecl>>
Ivars) { … }
template <typename Derived>
void ExtractAPIVisitorBase<Derived>::recordObjCProtocols(
ObjCContainerRecord *Container,
ObjCInterfaceDecl::protocol_range Protocols) { … }
}
template <typename Derived = void>
class ExtractAPIVisitor
: public impl::ExtractAPIVisitorBase<std::conditional_t<
std::is_same_v<Derived, void>, ExtractAPIVisitor<>, Derived>> { … };
}
}
#endif