clang  6.0.0svn
IndexingContext.h
Go to the documentation of this file.
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"
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 
38  IndexingOptions IndexOpts;
39  IndexDataConsumer &DataConsumer;
40  ASTContext *Ctx = nullptr;
41 
42 public:
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 
60 
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 
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);
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
Stmt - This represents one statement.
Definition: Stmt.h:60
void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent, const DeclContext *DC=nullptr, bool isBase=false, bool isIBType=false)
Decl - This represents one declaration (or definition), e.g.
Definition: DeclBase.h:81
bool indexTopLevelDecl(const Decl *D)
Definition: IndexDecl.cpp:750
The l-value was an access to a declared entity or something equivalently strong, like the address of ...
A container of type source information.
Definition: Decl.h:62
void setASTContext(ASTContext &ctx)
IndexingContext(IndexingOptions IndexOpts, IndexDataConsumer &DataConsumer)
Base wrapper for a particular "section" of type source info.
Definition: TypeLoc.h:40
const LangOptions & getLangOpts() const
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Definition: ASTContext.h:128
A C++ nested-name-specifier augmented with source location information.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Definition: LangOptions.h:48
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified...
bool shouldIndexFunctionLocalSymbols() const
bool indexDecl(const Decl *D)
Definition: IndexDecl.cpp:725
NodeId Parent
Definition: ASTDiff.cpp:192
unsigned SymbolRoleSet
Definition: IndexSymbol.h:116
Expr - This represents one expression.
Definition: Expr.h:106
bool indexDeclContext(const DeclContext *DC)
Definition: IndexDecl.cpp:743
bool indexDeclGroupRef(DeclGroupRef DG)
Definition: IndexDecl.cpp:760
static bool isTemplateImplicitInstantiation(const Decl *D)
bool handleReference(const NamedDecl *D, SourceLocation Loc, const NamedDecl *Parent, const DeclContext *DC, SymbolRoleSet Roles=SymbolRoleSet(), ArrayRef< SymbolRelation > Relations=None, const Expr *RefE=nullptr, const Decl *RefD=nullptr)
Encodes a location in the source.
TagDecl - Represents the declaration of a struct/union/class/enum.
Definition: Decl.h:2854
Describes a module import declaration, which makes the contents of the named module visible in the cu...
Definition: Decl.h:3867
bool shouldIndex(const Decl *D)
Dataflow Directional Tag Classes.
bool handleDecl(const Decl *D, SymbolRoleSet Roles=SymbolRoleSet(), ArrayRef< SymbolRelation > Relations=None)
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
Definition: DeclBase.h:1224
void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent, const DeclContext *DC=nullptr, bool isBase=false, bool isIBType=false)
void indexNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS, const NamedDecl *Parent, const DeclContext *DC=nullptr)
void indexTagDecl(const TagDecl *D, ArrayRef< SymbolRelation > Relations=None)
bool importedModule(const ImportDecl *ImportD)
IndexDataConsumer & getDataConsumer()
bool shouldIndexImplicitTemplateInsts() const
void indexBody(const Stmt *S, const NamedDecl *Parent, const DeclContext *DC=nullptr)
Definition: IndexBody.cpp:434
NamedDecl - This represents a decl with a name.
Definition: Decl.h:213
const IndexingOptions & getIndexOpts() const