• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
IndexingContext(IndexingOptions IndexOpts,IndexDataConsumer & DataConsumer)43   IndexingContext(IndexingOptions IndexOpts, IndexDataConsumer &DataConsumer)
44     : IndexOpts(IndexOpts), DataConsumer(DataConsumer) {}
45 
getIndexOpts()46   const IndexingOptions &getIndexOpts() const { return IndexOpts; }
getDataConsumer()47   IndexDataConsumer &getDataConsumer() { return DataConsumer; }
48 
setASTContext(ASTContext & ctx)49   void setASTContext(ASTContext &ctx) { Ctx = &ctx; }
50 
shouldSuppressRefs()51   bool shouldSuppressRefs() const {
52     return false;
53   }
54 
55   bool shouldIndexFunctionLocalSymbols() const;
56 
shouldIndexImplicitTemplateInsts()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 = None);
66 
67   bool handleDecl(const Decl *D, SourceLocation Loc,
68                   SymbolRoleSet Roles = SymbolRoleSet(),
69                   ArrayRef<SymbolRelation> Relations = None,
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 = None,
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 
106 private:
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
122