clang  8.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 
14 #include "clang/Basic/LLVM.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 
40  IndexingOptions IndexOpts;
41  IndexDataConsumer &DataConsumer;
42  ASTContext *Ctx = nullptr;
43 
44 public:
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 
62 
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 
87  const MacroInfo &MI);
88 
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 
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);
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
Stmt - This represents one statement.
Definition: Stmt.h:66
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:87
Defines the clang::MacroInfo and clang::MacroDirective classes.
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:86
void handleMacroDefined(const IdentifierInfo &Name, SourceLocation Loc, const MacroInfo &MI)
void setASTContext(ASTContext &ctx)
IndexingContext(IndexingOptions IndexOpts, IndexDataConsumer &DataConsumer)
Base wrapper for a particular "section" of type source info.
Definition: TypeLoc.h:57
One of these records is kept for each identifier that is lexed.
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:154
A C++ nested-name-specifier augmented with source location information.
void handleMacroReference(const IdentifierInfo &Name, SourceLocation Loc, const MacroInfo &MD)
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Definition: LangOptions.h:50
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:124
This represents one expression.
Definition: Expr.h:105
bool indexDeclContext(const DeclContext *DC)
Definition: IndexDecl.cpp:743
bool indexDeclGroupRef(DeclGroupRef DG)
Definition: IndexDecl.cpp:760
static bool isTemplateImplicitInstantiation(const Decl *D)
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
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.
Represents the declaration of a struct/union/class/enum.
Definition: Decl.h:3041
bool shouldIndexImplicitInstantiation() const
Describes a module import declaration, which makes the contents of the named module visible in the cu...
Definition: Decl.h:4118
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:1262
Encapsulates the data about a macro definition (e.g.
Definition: MacroInfo.h:40
void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent, const DeclContext *DC=nullptr, bool isBase=false, bool isIBType=false)
void handleMacroUndefined(const IdentifierInfo &Name, SourceLocation Loc, const MacroInfo &MI)
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()
void indexBody(const Stmt *S, const NamedDecl *Parent, const DeclContext *DC=nullptr)
Definition: IndexBody.cpp:461
This represents a decl that may have a name.
Definition: Decl.h:248
const IndexingOptions & getIndexOpts() const