IndexingContext.h revision dd93c596cd95e1b96031ff47efe0a5095ff3d7f1
14e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis//===- IndexingContext.h - Higher level API functions ------------------------===//
24e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis//
34e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis//                     The LLVM Compiler Infrastructure
44e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis//
54e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis// This file is distributed under the University of Illinois Open Source
64e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis// License. See LICENSE.TXT for details.
74e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis//
84e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis//===----------------------------------------------------------------------===//
94e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
104e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis#include "Index_Internal.h"
114e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis#include "CXCursor.h"
124e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
134e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis#include "clang/AST/Decl.h"
144e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis#include "clang/AST/DeclGroup.h"
154e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis#include "llvm/ADT/DenseMap.h"
164e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
174e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisnamespace clang {
184e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  class FileEntry;
194e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  class ObjCPropertyDecl;
20dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  class ObjCClassDecl;
214e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
224e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisnamespace cxindex {
234e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  class IndexingContext;
244e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
25dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidisstruct DeclInfo : public CXIdxDeclInfo {
26dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  CXIdxEntityInfo CXEntInfo;
27dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis};
28dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis
29dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidisstruct TagDeclInfo : public DeclInfo {
30dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  CXIdxTagDeclInfo CXTagDeclInfo;
31dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis};
32dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis
33dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidisstruct ObjCContainerDeclInfo : public DeclInfo {
34dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  CXIdxObjCContainerDeclInfo CXObjCContDeclInfo;
35dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis};
36dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis
37dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidisstruct ObjCCategoryDeclInfo : public ObjCContainerDeclInfo {
38dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  CXIdxObjCCategoryDeclInfo CXObjCCatDeclInfo;
39dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis};
40dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis
414e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisclass IndexingContext {
424e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  ASTContext *Ctx;
434e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXClientData ClientData;
444e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  IndexerCallbacks &CB;
454e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  unsigned IndexOptions;
464e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXTranslationUnit CXTU;
474e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
48dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  typedef llvm::DenseMap<const FileEntry *, CXIdxClientFile> FileMapTy;
49dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  typedef llvm::DenseMap<const NamedDecl *, CXIdxClientEntity> EntityMapTy;
50dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  typedef llvm::DenseMap<const void *, CXIdxClientMacro> MacroMapTy;
51dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  typedef llvm::DenseMap<const DeclContext *, CXIdxClientContainer> ContainerMapTy;
524e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  FileMapTy FileMap;
534e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  EntityMapTy EntityMap;
544e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  MacroMapTy MacroMap;
554e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  ContainerMapTy ContainerMap;
564e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
574e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  SmallVector<DeclGroupRef, 8> TUDeclsInObjCContainer;
584e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
594e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  llvm::SmallString<256> StrScratch;
60dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  unsigned StrAdapterCount;
614e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
624e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  class StrAdapter {
634e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    llvm::SmallString<256> &Scratch;
64dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis    IndexingContext &IdxCtx;
654e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
664e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  public:
67dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis    StrAdapter(IndexingContext &indexCtx)
68dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis      : Scratch(indexCtx.StrScratch), IdxCtx(indexCtx) {
69dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis      ++IdxCtx.StrAdapterCount;
70dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis    }
71dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis
72dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis    ~StrAdapter() {
73dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis      --IdxCtx.StrAdapterCount;
74dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis      if (IdxCtx.StrAdapterCount == 0)
75dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis        Scratch.clear();
76dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis    }
774e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
784e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    const char *toCStr(StringRef Str);
794e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
804e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    unsigned getCurSize() const { return Scratch.size(); }
814e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
824e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    const char *getCStr(unsigned CharIndex) {
834e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis      Scratch.push_back('\0');
844e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis      return Scratch.data() + CharIndex;
854e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    }
864e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
874e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    SmallVectorImpl<char> &getBuffer() { return Scratch; }
884e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  };
894e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
904e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidispublic:
914e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  IndexingContext(CXClientData clientData, IndexerCallbacks &indexCallbacks,
924e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                  unsigned indexOptions, CXTranslationUnit cxTU)
934e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    : Ctx(0), ClientData(clientData), CB(indexCallbacks),
94dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis      IndexOptions(indexOptions), CXTU(cxTU), StrAdapterCount(0) { }
954e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
964e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  ASTContext &getASTContext() const { return *Ctx; }
974e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
984e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void setASTContext(ASTContext &ctx);
994e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
100dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  void enteredMainFile(const FileEntry *File);
101dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis
1024e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void ppIncludedFile(SourceLocation hashLoc,
1034e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                      StringRef filename, const FileEntry *File,
1044e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                      bool isImport, bool isAngled);
1054e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1064e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void ppMacroDefined(SourceLocation Loc, StringRef Name,
1074e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                      SourceLocation DefBegin, unsigned Length,
1084e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                      const void *OpaqueMacro);
1094e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1104e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void ppMacroUndefined(SourceLocation Loc, StringRef Name,
1114e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                        const void *OpaqueMacro);
1124e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1134e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void ppMacroExpanded(SourceLocation Loc, StringRef Name,
1144e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                       const void *OpaqueMacro);
1154e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1164e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void invokeStartedTranslationUnit();
1174e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1184e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void invokeFinishedTranslationUnit();
1194e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1204e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexDecl(const Decl *D);
1214e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1224e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexTagDecl(const TagDecl *D);
1234e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1244e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent,
1254e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                           const DeclContext *DC = 0);
1264e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1274e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent,
1284e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                           const DeclContext *DC);
1294e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1304e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexDeclContext(const DeclContext *DC);
1314e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1324e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexBody(const Stmt *S, const DeclContext *DC);
1334e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1344e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleDiagnostic(const StoredDiagnostic &StoredDiag);
1354e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1364e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleFunction(const FunctionDecl *FD);
1374e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1384e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleVar(const VarDecl *D);
1394e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1404e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleField(const FieldDecl *D);
1414e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1424e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleEnumerator(const EnumConstantDecl *D);
1434e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1444e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleTagDecl(const TagDecl *D);
1454e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1464e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleTypedef(const TypedefDecl *D);
1474e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
148dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  void handleObjCClass(const ObjCClassDecl *D);
1494e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleObjCInterface(const ObjCInterfaceDecl *D);
150dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  void handleObjCImplementation(const ObjCImplementationDecl *D);
1514e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1524e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void defineObjCInterface(const ObjCInterfaceDecl *D);
1534e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
154dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  void handleObjCForwardProtocol(const ObjCProtocolDecl *D,
155dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis                                 SourceLocation Loc,
156dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis                                 bool isRedeclaration);
157dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis
1584e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleObjCProtocol(const ObjCProtocolDecl *D);
1594e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1604e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleObjCCategory(const ObjCCategoryDecl *D);
161dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  void handleObjCCategoryImpl(const ObjCCategoryImplDecl *D);
1624e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1634e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleObjCMethod(const ObjCMethodDecl *D);
1644e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1654e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleObjCProperty(const ObjCPropertyDecl *D);
1664e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1674e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleReference(const NamedDecl *D, SourceLocation Loc,
1684e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                       const NamedDecl *Parent,
1694e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                       const DeclContext *DC,
170aca19be8731fc31cff68702de0dc7f30ce908979Argyrios Kyrtzidis                       const Expr *E = 0,
171aca19be8731fc31cff68702de0dc7f30ce908979Argyrios Kyrtzidis                       CXIdxEntityRefKind Kind = CXIdxEntityRef_Direct);
1724e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
173dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  void startContainer(const NamedDecl *D, bool isStmtBody = false,
174dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis                      const DeclContext *DC = 0);
1754e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
176dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  void endContainer(const DeclContext *DC);
1774e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1784e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  bool isNotFromSourceFile(SourceLocation Loc) const;
1794e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1804e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexTUDeclsInObjCContainer();
1814e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexDeclGroupRef(DeclGroupRef DG);
1824e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1834e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void addTUDeclInObjCContainer(DeclGroupRef DG) {
1844e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    TUDeclsInObjCContainer.push_back(DG);
1854e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  }
1864e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
187dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  void translateLoc(SourceLocation Loc, CXIdxClientFile *indexFile, CXFile *file,
1884e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                    unsigned *line, unsigned *column, unsigned *offset);
1894e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1904e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisprivate:
191dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  void handleDecl(const NamedDecl *D,
192dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis                  SourceLocation Loc, CXCursor Cursor,
193dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis                  bool isRedeclaration, bool isDefinition,
194dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis                  DeclInfo &DInfo);
195dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis
196dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  void handleObjCContainer(const ObjCContainerDecl *D,
197dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis                           SourceLocation Loc, CXCursor Cursor,
198dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis                           bool isForwardRef,
199dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis                           bool isRedeclaration,
200dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis                           bool isImplementation,
201dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis                           ObjCContainerDeclInfo &ContDInfo);
2024e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
203dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  void addEntityInMap(const NamedDecl *D, CXIdxClientEntity entity);
2044e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
205dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  void addContainerInMap(const DeclContext *DC, CXIdxClientContainer container);
206dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis
207dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  CXIdxClientEntity getClientEntity(const NamedDecl *D);
2084e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
2094e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  const NamedDecl *getEntityDecl(const NamedDecl *D) const;
2104e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
211dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  CXIdxClientContainer getIndexContainer(const NamedDecl *D) const {
2124e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    return getIndexContainerForDC(D->getDeclContext());
2134e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  }
2144e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
2154e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  const DeclContext *getScopedContext(const DeclContext *DC) const;
216dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  CXIdxClientContainer getIndexContainerForDC(const DeclContext *DC) const;
2174e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
218dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis  CXIdxClientFile getIndexFile(const FileEntry *File);
2194e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
2204e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXIdxLoc getIndexLoc(SourceLocation Loc) const;
2214e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
2224e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void getEntityInfo(const NamedDecl *D,
2234e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                     CXIdxEntityInfo &EntityInfo,
2244e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                     StrAdapter &SA);
2254e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
2264e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXCursor getCursor(const NamedDecl *D) {
2274e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    return cxcursor::MakeCXCursor(const_cast<NamedDecl*>(D), CXTU);
2284e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  }
2294e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
2304e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXCursor getRefCursor(const NamedDecl *D, SourceLocation Loc);
2314e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis};
2324e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
2334e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis}} // end clang::cxindex
234