blob: 774650547f833acced7d49dbc50ad6612723157b [file] [log] [blame]
Argyrios Kyrtzidisf4fb85b2016-02-12 23:10:59 +00001//===- 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
18namespace 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
34namespace index {
35 class IndexDataConsumer;
36
37class IndexingContext {
38 IndexingOptions IndexOpts;
39 IndexDataConsumer &DataConsumer;
40 ASTContext *Ctx = nullptr;
41
42public:
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 shouldSuppressRefs() const {
52 return false;
53 }
54
55 bool shouldIndexFunctionLocalSymbols() const;
56
57 bool shouldIndexImplicitTemplateInsts() const {
58 return false;
59 }
60
61 static bool isFunctionLocalDecl(const Decl *D);
62 static bool isTemplateImplicitInstantiation(const Decl *D);
63
64 bool handleDecl(const Decl *D, SymbolRoleSet Roles = SymbolRoleSet(),
65 ArrayRef<SymbolRelation> Relations = {});
66
67 bool handleDecl(const Decl *D, SourceLocation Loc,
68 SymbolRoleSet Roles = SymbolRoleSet(),
69 ArrayRef<SymbolRelation> Relations = {},
70 const DeclContext *DC = nullptr);
71
72 bool handleReference(const NamedDecl *D, SourceLocation Loc,
73 const NamedDecl *Parent,
74 const DeclContext *DC,
75 SymbolRoleSet Roles,
76 ArrayRef<SymbolRelation> Relations = {},
77 const Expr *RefE = nullptr,
78 const Decl *RefD = nullptr);
79
80 bool importedModule(const ImportDecl *ImportD);
81
82 bool indexDecl(const Decl *D);
83
84 void indexTagDecl(const TagDecl *D);
85
86 void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent,
87 const DeclContext *DC = nullptr,
88 bool isBase = false);
89
90 void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent,
91 const DeclContext *DC = nullptr,
92 bool isBase = false);
93
94 void indexNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS,
95 const NamedDecl *Parent,
96 const DeclContext *DC = nullptr);
97
98 bool indexDeclContext(const DeclContext *DC);
99
100 void indexBody(const Stmt *S, const NamedDecl *Parent,
101 const DeclContext *DC = nullptr);
102
103 bool indexTopLevelDecl(const Decl *D);
104 bool indexDeclGroupRef(DeclGroupRef DG);
105
106private:
107 bool shouldIgnoreIfImplicit(const Decl *D);
108
109 bool handleDeclOccurrence(const Decl *D, SourceLocation Loc,
110 bool IsRef, const Decl *Parent,
111 SymbolRoleSet Roles,
112 ArrayRef<SymbolRelation> Relations,
113 const Expr *RefE,
114 const Decl *RefD,
115 const DeclContext *ContainerDC);
116};
117
118} // end namespace index
119} // end namespace clang
120
121#endif