1 //===- IndexingContext.h - Indexing context data ----------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef LLVM_CLANG_LIB_INDEX_INDEXINGCONTEXT_H
11 #define LLVM_CLANG_LIB_INDEX_INDEXINGCONTEXT_H
13 #include "clang/Basic/LLVM.h"
14 #include "clang/Index/IndexSymbol.h"
15 #include "clang/Index/IndexingAction.h"
16 #include "llvm/ADT/ArrayRef.h"
28 class NestedNameSpecifierLoc;
35 class IndexDataConsumer;
37 class IndexingContext {
38 IndexingOptions IndexOpts;
39 IndexDataConsumer &DataConsumer;
40 ASTContext *Ctx = nullptr;
43 IndexingContext(IndexingOptions IndexOpts, IndexDataConsumer &DataConsumer)
44 : IndexOpts(IndexOpts), DataConsumer(DataConsumer) {}
46 const IndexingOptions &getIndexOpts() const { return IndexOpts; }
47 IndexDataConsumer &getDataConsumer() { return DataConsumer; }
49 void setASTContext(ASTContext &ctx) { Ctx = &ctx; }
51 bool shouldSuppressRefs() const {
55 bool shouldIndexFunctionLocalSymbols() const;
57 bool shouldIndexImplicitTemplateInsts() const {
61 static bool isTemplateImplicitInstantiation(const Decl *D);
63 bool handleDecl(const Decl *D, SymbolRoleSet Roles = SymbolRoleSet(),
64 ArrayRef<SymbolRelation> Relations = None);
66 bool handleDecl(const Decl *D, SourceLocation Loc,
67 SymbolRoleSet Roles = SymbolRoleSet(),
68 ArrayRef<SymbolRelation> Relations = None,
69 const DeclContext *DC = nullptr);
71 bool handleReference(const NamedDecl *D, SourceLocation Loc,
72 const NamedDecl *Parent,
73 const DeclContext *DC,
74 SymbolRoleSet Roles = SymbolRoleSet(),
75 ArrayRef<SymbolRelation> Relations = None,
76 const Expr *RefE = nullptr,
77 const Decl *RefD = nullptr);
79 bool importedModule(const ImportDecl *ImportD);
81 bool indexDecl(const Decl *D);
83 void indexTagDecl(const TagDecl *D);
85 void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent,
86 const DeclContext *DC = nullptr,
88 bool isIBType = false);
90 void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent,
91 const DeclContext *DC = nullptr,
93 bool isIBType = false);
95 void indexNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS,
96 const NamedDecl *Parent,
97 const DeclContext *DC = nullptr);
99 bool indexDeclContext(const DeclContext *DC);
101 void indexBody(const Stmt *S, const NamedDecl *Parent,
102 const DeclContext *DC = nullptr);
104 bool indexTopLevelDecl(const Decl *D);
105 bool indexDeclGroupRef(DeclGroupRef DG);
108 bool shouldIgnoreIfImplicit(const Decl *D);
110 bool handleDeclOccurrence(const Decl *D, SourceLocation Loc,
111 bool IsRef, const Decl *Parent,
113 ArrayRef<SymbolRelation> Relations,
116 const DeclContext *ContainerDC);
119 } // end namespace index
120 } // end namespace clang