clang 22.0.0git
clang::extractapi::APISetVisitor< Derived > Class Template Reference

The base interface of visitors for API information, the interface and usage is almost identical to RecurisveASTVistor. More...

#include "clang/ExtractAPI/Serialization/APISetVisitor.h"

Inheritance diagram for clang::extractapi::APISetVisitor< Derived >:
[legend]

Public Member Functions

bool traverseAPISet ()
bool traverseAPIRecord (const APIRecord *Record)
bool walkUpFromAPIRecord (const APIRecord *Record)
bool visitAPIRecord (const APIRecord *Record)
 CONCRETE_RECORD (GlobalFunctionTemplateRecord, GlobalFunctionRecord, RK_GlobalFunctionTemplate) CONCRETE_RECORD(GlobalFunctionTemplateSpecializationRecord
RK_GlobalFunctionTemplateSpecialization CONCRETE_RECORD (GlobalVariableTemplateRecord, GlobalVariableRecord, RK_GlobalVariableTemplate) CONCRETE_RECORD(GlobalVariableTemplateSpecializationRecord
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization CONCRETE_RECORD (GlobalVariableTemplatePartialSpecializationRecord, GlobalVariableRecord, RK_GlobalVariableTemplatePartialSpecialization) CONCRETE_RECORD(CXXMethodTemplateSpecializationRecord
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization CONCRETE_RECORD (ObjCInstancePropertyRecord, ObjCPropertyRecord, RK_ObjCInstanceProperty) CONCRETE_RECORD(ObjCClassPropertyRecord
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization RK_ObjCClassProperty CONCRETE_RECORD (ObjCInstanceMethodRecord, ObjCMethodRecord, RK_ObjCInstanceMethod) CONCRETE_RECORD(ClassTemplateSpecializationRecord
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization RK_ObjCClassProperty RK_ClassTemplateSpecialization CONCRETE_RECORD (ClassTemplatePartialSpecializationRecord, CXXClassRecord, RK_ClassTemplatePartialSpecialization) RECORD_CONTEXT(ClassTemplateSpecializationRecord
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization RK_ObjCClassProperty RK_ClassTemplateSpecialization RK_ClassTemplateSpecialization RECORD_CONTEXT (ClassTemplatePartialSpecializationRecord, RK_ClassTemplatePartialSpecialization) RECORD_CONTEXT(GlobalVariableTemplateSpecializationRecord
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization RK_ObjCClassProperty RK_ClassTemplateSpecialization RK_ClassTemplateSpecialization RK_GlobalVariableTemplateSpecialization RECORD_CONTEXT (GlobalVariableTemplatePartialSpecializationRecord, RK_GlobalVariableTemplatePartialSpecialization) bool traverseRecordContext(const RecordContext *)
 APISetVisitor ()=delete
 APISetVisitor (const APISetVisitor &)=delete
 APISetVisitor (APISetVisitor &&)=delete
APISetVisitoroperator= (const APISetVisitor &)=delete
APISetVisitoroperator= (APISetVisitor &&)=delete

Public Attributes

 GlobalFunctionRecord
RK_GlobalFunctionTemplateSpecialization GlobalVariableRecord
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization CXXMethodRecord
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization ObjCPropertyRecord
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization RK_ObjCClassProperty CXXClassRecord

Protected Member Functions

 APISetVisitor (const APISet &API)
 ~APISetVisitor ()=default
Derived * getDerived ()

Protected Attributes

const APISetAPI

Detailed Description

template<typename Derived>
class clang::extractapi::APISetVisitor< Derived >

The base interface of visitors for API information, the interface and usage is almost identical to RecurisveASTVistor.

This class performs three distinct tasks:

  1. traverse the APISet (i.e. go to every record);
  2. at a given record, walk up the class hierarchy starting from the record's dynamic type until APIRecord is reached.
  3. given a (record, class) combination where 'class' is some base class of the dynamic type of 'record', call a user-overridable function to actually visit the record.

These tasks are done by three groups of methods, respectively:

  1. traverseRecord(APIRecord *x) does task #1, it is the entry point for traversing the records starting from x. This method simply forwards to traverseFoo(Foo *x) where Foo is the dynamic type of *x, which calls walkUpFromFoo(x) and then recursively visits the child records of x.
  2. walkUpFromFoo(Foo *x) does task #2. It doesn't visit children records of x, instead it first calls walkUpFromBar(x) where Bar is the direct parent class of Foo (unless Foo has no parent) and then calls visitFoo(x).
  3. visitFoo(Foo *x) does task #3.

These three method groups are tiered (traverse* > walkUpFrom* > visit*). A method (e.g. traverse*) may call methods from the same tier (e.g. other traverse*) or one tier lower (e.g. walkUpFrom*). It may not call methods from a higher tier.

Note that since walkUpFromFoo() calls walkUpFromBar() (where Bar is Foo's super class) before calling visitFoo(), the result is that the visit*() methods for a given record are called in the top-down order (e.g. for a record of type ObjCInstancePropertyRecord, the order will be visitRecord(), visitObjCPropertyRecord(), and then visitObjCInstancePropertyRecord()).

This scheme guarantees that all visit*() calls for the same record are grouped together. In other words, visit*() methods for different records are never interleaved.

Clients of this visitor should subclass the visitor (providing themselves as the template argument, using the curiously recurring template pattern) and override any of the traverse*, walkUpFrom*, and visit* methods for records where the visitor should customize behavior. Most users only need to override visit*. Advanced users may override traverse* and walkUpFrom* to implement custom traversal strategies. Returning false from one of these overridden functions will abort the entire traversal.

Definition at line 76 of file APISetVisitor.h.

Constructor & Destructor Documentation

◆ APISetVisitor() [1/4]

template<typename Derived>
clang::extractapi::APISetVisitor< Derived >::APISetVisitor ( )
delete

◆ APISetVisitor() [2/4]

template<typename Derived>
clang::extractapi::APISetVisitor< Derived >::APISetVisitor ( const APISetVisitor< Derived > & )
delete

◆ APISetVisitor() [3/4]

template<typename Derived>
clang::extractapi::APISetVisitor< Derived >::APISetVisitor ( APISetVisitor< Derived > && )
delete

◆ APISetVisitor() [4/4]

template<typename Derived>
clang::extractapi::APISetVisitor< Derived >::APISetVisitor ( const APISet & API)
inlineprotected

Definition at line 135 of file APISetVisitor.h.

◆ ~APISetVisitor()

template<typename Derived>
clang::extractapi::APISetVisitor< Derived >::~APISetVisitor ( )
protecteddefault

Member Function Documentation

◆ CONCRETE_RECORD() [1/6]

template<typename Derived>
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization RK_ObjCClassProperty RK_ClassTemplateSpecialization clang::extractapi::APISetVisitor< Derived >::CONCRETE_RECORD ( ClassTemplatePartialSpecializationRecord ,
CXXClassRecord ,
RK_ClassTemplatePartialSpecialization  )

◆ CONCRETE_RECORD() [2/6]

template<typename Derived>
clang::extractapi::APISetVisitor< Derived >::CONCRETE_RECORD ( GlobalFunctionTemplateRecord ,
GlobalFunctionRecord ,
RK_GlobalFunctionTemplate  )

◆ CONCRETE_RECORD() [3/6]

template<typename Derived>
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization clang::extractapi::APISetVisitor< Derived >::CONCRETE_RECORD ( GlobalVariableTemplatePartialSpecializationRecord ,
GlobalVariableRecord ,
RK_GlobalVariableTemplatePartialSpecialization  )

◆ CONCRETE_RECORD() [4/6]

template<typename Derived>
RK_GlobalFunctionTemplateSpecialization clang::extractapi::APISetVisitor< Derived >::CONCRETE_RECORD ( GlobalVariableTemplateRecord ,
GlobalVariableRecord ,
RK_GlobalVariableTemplate  )

◆ CONCRETE_RECORD() [5/6]

template<typename Derived>
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization RK_ObjCClassProperty clang::extractapi::APISetVisitor< Derived >::CONCRETE_RECORD ( ObjCInstanceMethodRecord ,
ObjCMethodRecord ,
RK_ObjCInstanceMethod  )

◆ CONCRETE_RECORD() [6/6]

template<typename Derived>
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization clang::extractapi::APISetVisitor< Derived >::CONCRETE_RECORD ( ObjCInstancePropertyRecord ,
ObjCPropertyRecord ,
RK_ObjCInstanceProperty  )

◆ getDerived()

template<typename Derived>
Derived * clang::extractapi::APISetVisitor< Derived >::getDerived ( )
inlineprotected

Definition at line 138 of file APISetVisitor.h.

◆ operator=() [1/2]

template<typename Derived>
APISetVisitor & clang::extractapi::APISetVisitor< Derived >::operator= ( APISetVisitor< Derived > && )
delete

◆ operator=() [2/2]

template<typename Derived>
APISetVisitor & clang::extractapi::APISetVisitor< Derived >::operator= ( const APISetVisitor< Derived > & )
delete

◆ RECORD_CONTEXT() [1/2]

template<typename Derived>
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization RK_ObjCClassProperty RK_ClassTemplateSpecialization RK_ClassTemplateSpecialization clang::extractapi::APISetVisitor< Derived >::RECORD_CONTEXT ( ClassTemplatePartialSpecializationRecord ,
RK_ClassTemplatePartialSpecialization  )

◆ RECORD_CONTEXT() [2/2]

template<typename Derived>
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization RK_ObjCClassProperty RK_ClassTemplateSpecialization RK_ClassTemplateSpecialization RK_GlobalVariableTemplateSpecialization clang::extractapi::APISetVisitor< Derived >::RECORD_CONTEXT ( GlobalVariableTemplatePartialSpecializationRecord ,
RK_GlobalVariableTemplatePartialSpecialization  ) const

◆ traverseAPIRecord()

template<typename Derived>
bool clang::extractapi::APISetVisitor< Derived >::traverseAPIRecord ( const APIRecord * Record)

◆ traverseAPISet()

◆ visitAPIRecord()

template<typename Derived>
bool clang::extractapi::APISetVisitor< Derived >::visitAPIRecord ( const APIRecord * Record)
inline

◆ walkUpFromAPIRecord()

template<typename Derived>
bool clang::extractapi::APISetVisitor< Derived >::walkUpFromAPIRecord ( const APIRecord * Record)
inline

Definition at line 86 of file APISetVisitor.h.

Member Data Documentation

◆ API

template<typename Derived>
const APISet& clang::extractapi::APISetVisitor< Derived >::API
protected

Definition at line 125 of file APISetVisitor.h.

◆ CXXClassRecord

template<typename Derived>
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization RK_ObjCClassProperty clang::extractapi::APISetVisitor< Derived >::CXXClassRecord

Definition at line 72 of file APISetVisitor.h.

◆ CXXMethodRecord

template<typename Derived>
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization clang::extractapi::APISetVisitor< Derived >::CXXMethodRecord

Definition at line 56 of file APISetVisitor.h.

◆ GlobalFunctionRecord

template<typename Derived>
clang::extractapi::APISetVisitor< Derived >::GlobalFunctionRecord

Definition at line 30 of file APISetVisitor.h.

◆ GlobalVariableRecord

template<typename Derived>
RK_GlobalFunctionTemplateSpecialization clang::extractapi::APISetVisitor< Derived >::GlobalVariableRecord

Definition at line 35 of file APISetVisitor.h.

◆ ObjCPropertyRecord

template<typename Derived>
RK_GlobalFunctionTemplateSpecialization RK_GlobalVariableTemplateSpecialization RK_CXXMethodTemplateSpecialization clang::extractapi::APISetVisitor< Derived >::ObjCPropertyRecord

Definition at line 61 of file APISetVisitor.h.


The documentation for this class was generated from the following file: