]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/lib/Index/IndexingContext.h
Merge llvm, clang, lld, lldb, compiler-rt and libc++ r301441, and update
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / 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/LLVM.h"
14 #include "clang/Index/IndexSymbol.h"
15 #include "clang/Index/IndexingAction.h"
16 #include "llvm/ADT/ArrayRef.h"
17
18 namespace clang {
19   class ASTContext;
20   class Decl;
21   class DeclGroupRef;
22   class ImportDecl;
23   class TagDecl;
24   class TypeSourceInfo;
25   class NamedDecl;
26   class ObjCMethodDecl;
27   class DeclContext;
28   class NestedNameSpecifierLoc;
29   class Stmt;
30   class Expr;
31   class TypeLoc;
32   class SourceLocation;
33
34 namespace index {
35   class IndexDataConsumer;
36
37 class IndexingContext {
38   IndexingOptions IndexOpts;
39   IndexDataConsumer &DataConsumer;
40   ASTContext *Ctx = nullptr;
41
42 public:
43   IndexingContext(IndexingOptions IndexOpts, IndexDataConsumer &DataConsumer)
44     : IndexOpts(IndexOpts), DataConsumer(DataConsumer) {}
45
46   const IndexingOptions &getIndexOpts() const { return IndexOpts; }
47   IndexDataConsumer &getDataConsumer() { return DataConsumer; }
48
49   void setASTContext(ASTContext &ctx) { Ctx = &ctx; }
50
51   bool shouldIndex(const Decl *D);
52
53   const LangOptions &getLangOpts() const;
54
55   bool shouldSuppressRefs() const {
56     return false;
57   }
58
59   bool shouldIndexFunctionLocalSymbols() const;
60
61   bool shouldIndexImplicitTemplateInsts() const {
62     return false;
63   }
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   bool importedModule(const ImportDecl *ImportD);
84
85   bool indexDecl(const Decl *D);
86
87   void indexTagDecl(const TagDecl *D,
88                     ArrayRef<SymbolRelation> Relations = None);
89
90   void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent,
91                            const DeclContext *DC = nullptr,
92                            bool isBase = false,
93                            bool isIBType = false);
94
95   void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent,
96                     const DeclContext *DC = nullptr,
97                     bool isBase = false,
98                     bool isIBType = false);
99
100   void indexNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS,
101                                    const NamedDecl *Parent,
102                                    const DeclContext *DC = nullptr);
103
104   bool indexDeclContext(const DeclContext *DC);
105
106   void indexBody(const Stmt *S, const NamedDecl *Parent,
107                  const DeclContext *DC = nullptr);
108
109   bool indexTopLevelDecl(const Decl *D);
110   bool indexDeclGroupRef(DeclGroupRef DG);
111
112 private:
113   bool shouldIgnoreIfImplicit(const Decl *D);
114
115   bool handleDeclOccurrence(const Decl *D, SourceLocation Loc,
116                             bool IsRef, const Decl *Parent,
117                             SymbolRoleSet Roles,
118                             ArrayRef<SymbolRelation> Relations,
119                             const Expr *RefE,
120                             const Decl *RefD,
121                             const DeclContext *ContainerDC);
122 };
123
124 } // end namespace index
125 } // end namespace clang
126
127 #endif