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