xref: /aosp_15_r20/external/clang/lib/Index/IndexingContext.h (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li //===- IndexingContext.h - Indexing context data ----------------*- C++ -*-===//
2*67e74705SXin Li //
3*67e74705SXin Li //                     The LLVM Compiler Infrastructure
4*67e74705SXin Li //
5*67e74705SXin Li // This file is distributed under the University of Illinois Open Source
6*67e74705SXin Li // License. See LICENSE.TXT for details.
7*67e74705SXin Li //
8*67e74705SXin Li //===----------------------------------------------------------------------===//
9*67e74705SXin Li 
10*67e74705SXin Li #ifndef LLVM_CLANG_LIB_INDEX_INDEXINGCONTEXT_H
11*67e74705SXin Li #define LLVM_CLANG_LIB_INDEX_INDEXINGCONTEXT_H
12*67e74705SXin Li 
13*67e74705SXin Li #include "clang/Basic/LLVM.h"
14*67e74705SXin Li #include "clang/Index/IndexSymbol.h"
15*67e74705SXin Li #include "clang/Index/IndexingAction.h"
16*67e74705SXin Li #include "llvm/ADT/ArrayRef.h"
17*67e74705SXin Li 
18*67e74705SXin Li namespace clang {
19*67e74705SXin Li   class ASTContext;
20*67e74705SXin Li   class Decl;
21*67e74705SXin Li   class DeclGroupRef;
22*67e74705SXin Li   class ImportDecl;
23*67e74705SXin Li   class TagDecl;
24*67e74705SXin Li   class TypeSourceInfo;
25*67e74705SXin Li   class NamedDecl;
26*67e74705SXin Li   class ObjCMethodDecl;
27*67e74705SXin Li   class DeclContext;
28*67e74705SXin Li   class NestedNameSpecifierLoc;
29*67e74705SXin Li   class Stmt;
30*67e74705SXin Li   class Expr;
31*67e74705SXin Li   class TypeLoc;
32*67e74705SXin Li   class SourceLocation;
33*67e74705SXin Li 
34*67e74705SXin Li namespace index {
35*67e74705SXin Li   class IndexDataConsumer;
36*67e74705SXin Li 
37*67e74705SXin Li class IndexingContext {
38*67e74705SXin Li   IndexingOptions IndexOpts;
39*67e74705SXin Li   IndexDataConsumer &DataConsumer;
40*67e74705SXin Li   ASTContext *Ctx = nullptr;
41*67e74705SXin Li 
42*67e74705SXin Li public:
IndexingContext(IndexingOptions IndexOpts,IndexDataConsumer & DataConsumer)43*67e74705SXin Li   IndexingContext(IndexingOptions IndexOpts, IndexDataConsumer &DataConsumer)
44*67e74705SXin Li     : IndexOpts(IndexOpts), DataConsumer(DataConsumer) {}
45*67e74705SXin Li 
getIndexOpts()46*67e74705SXin Li   const IndexingOptions &getIndexOpts() const { return IndexOpts; }
getDataConsumer()47*67e74705SXin Li   IndexDataConsumer &getDataConsumer() { return DataConsumer; }
48*67e74705SXin Li 
setASTContext(ASTContext & ctx)49*67e74705SXin Li   void setASTContext(ASTContext &ctx) { Ctx = &ctx; }
50*67e74705SXin Li 
shouldSuppressRefs()51*67e74705SXin Li   bool shouldSuppressRefs() const {
52*67e74705SXin Li     return false;
53*67e74705SXin Li   }
54*67e74705SXin Li 
55*67e74705SXin Li   bool shouldIndexFunctionLocalSymbols() const;
56*67e74705SXin Li 
shouldIndexImplicitTemplateInsts()57*67e74705SXin Li   bool shouldIndexImplicitTemplateInsts() const {
58*67e74705SXin Li     return false;
59*67e74705SXin Li   }
60*67e74705SXin Li 
61*67e74705SXin Li   static bool isFunctionLocalDecl(const Decl *D);
62*67e74705SXin Li   static bool isTemplateImplicitInstantiation(const Decl *D);
63*67e74705SXin Li 
64*67e74705SXin Li   bool handleDecl(const Decl *D, SymbolRoleSet Roles = SymbolRoleSet(),
65*67e74705SXin Li                   ArrayRef<SymbolRelation> Relations = None);
66*67e74705SXin Li 
67*67e74705SXin Li   bool handleDecl(const Decl *D, SourceLocation Loc,
68*67e74705SXin Li                   SymbolRoleSet Roles = SymbolRoleSet(),
69*67e74705SXin Li                   ArrayRef<SymbolRelation> Relations = None,
70*67e74705SXin Li                   const DeclContext *DC = nullptr);
71*67e74705SXin Li 
72*67e74705SXin Li   bool handleReference(const NamedDecl *D, SourceLocation Loc,
73*67e74705SXin Li                        const NamedDecl *Parent,
74*67e74705SXin Li                        const DeclContext *DC,
75*67e74705SXin Li                        SymbolRoleSet Roles,
76*67e74705SXin Li                        ArrayRef<SymbolRelation> Relations = None,
77*67e74705SXin Li                        const Expr *RefE = nullptr,
78*67e74705SXin Li                        const Decl *RefD = nullptr);
79*67e74705SXin Li 
80*67e74705SXin Li   bool importedModule(const ImportDecl *ImportD);
81*67e74705SXin Li 
82*67e74705SXin Li   bool indexDecl(const Decl *D);
83*67e74705SXin Li 
84*67e74705SXin Li   void indexTagDecl(const TagDecl *D);
85*67e74705SXin Li 
86*67e74705SXin Li   void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent,
87*67e74705SXin Li                            const DeclContext *DC = nullptr,
88*67e74705SXin Li                            bool isBase = false);
89*67e74705SXin Li 
90*67e74705SXin Li   void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent,
91*67e74705SXin Li                     const DeclContext *DC = nullptr,
92*67e74705SXin Li                     bool isBase = false);
93*67e74705SXin Li 
94*67e74705SXin Li   void indexNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS,
95*67e74705SXin Li                                    const NamedDecl *Parent,
96*67e74705SXin Li                                    const DeclContext *DC = nullptr);
97*67e74705SXin Li 
98*67e74705SXin Li   bool indexDeclContext(const DeclContext *DC);
99*67e74705SXin Li 
100*67e74705SXin Li   void indexBody(const Stmt *S, const NamedDecl *Parent,
101*67e74705SXin Li                  const DeclContext *DC = nullptr);
102*67e74705SXin Li 
103*67e74705SXin Li   bool indexTopLevelDecl(const Decl *D);
104*67e74705SXin Li   bool indexDeclGroupRef(DeclGroupRef DG);
105*67e74705SXin Li 
106*67e74705SXin Li private:
107*67e74705SXin Li   bool shouldIgnoreIfImplicit(const Decl *D);
108*67e74705SXin Li 
109*67e74705SXin Li   bool handleDeclOccurrence(const Decl *D, SourceLocation Loc,
110*67e74705SXin Li                             bool IsRef, const Decl *Parent,
111*67e74705SXin Li                             SymbolRoleSet Roles,
112*67e74705SXin Li                             ArrayRef<SymbolRelation> Relations,
113*67e74705SXin Li                             const Expr *RefE,
114*67e74705SXin Li                             const Decl *RefD,
115*67e74705SXin Li                             const DeclContext *ContainerDC);
116*67e74705SXin Li };
117*67e74705SXin Li 
118*67e74705SXin Li } // end namespace index
119*67e74705SXin Li } // end namespace clang
120*67e74705SXin Li 
121*67e74705SXin Li #endif
122