IndexingContext.h revision aca19be8731fc31cff68702de0dc7f30ce908979
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;
204e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
214e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisnamespace cxindex {
224e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  class IndexingContext;
234e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
244e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisclass IndexingContext {
254e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  ASTContext *Ctx;
264e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXClientData ClientData;
274e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  IndexerCallbacks &CB;
284e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  unsigned IndexOptions;
294e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXTranslationUnit CXTU;
304e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
314e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  typedef llvm::DenseMap<const FileEntry *, CXIdxFile> FileMapTy;
324e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  typedef llvm::DenseMap<const NamedDecl *, CXIdxEntity> EntityMapTy;
334e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  typedef llvm::DenseMap<const void *, CXIdxMacro> MacroMapTy;
344e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  typedef llvm::DenseMap<const DeclContext *, CXIdxContainer> ContainerMapTy;
354e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  FileMapTy FileMap;
364e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  EntityMapTy EntityMap;
374e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  MacroMapTy MacroMap;
384e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  ContainerMapTy ContainerMap;
394e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
404e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  SmallVector<DeclGroupRef, 8> TUDeclsInObjCContainer;
414e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
424e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  llvm::SmallString<256> StrScratch;
434e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
444e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  class StrAdapter {
454e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    llvm::SmallString<256> &Scratch;
464e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
474e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  public:
484e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    StrAdapter(IndexingContext *indexCtx)
494e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis      : Scratch(indexCtx->StrScratch) {}
504e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    ~StrAdapter() { Scratch.clear(); }
514e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
524e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    const char *toCStr(StringRef Str);
534e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
544e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    unsigned getCurSize() const { return Scratch.size(); }
554e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
564e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    const char *getCStr(unsigned CharIndex) {
574e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis      Scratch.push_back('\0');
584e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis      return Scratch.data() + CharIndex;
594e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    }
604e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
614e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    SmallVectorImpl<char> &getBuffer() { return Scratch; }
624e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  };
634e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
644e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidispublic:
654e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  IndexingContext(CXClientData clientData, IndexerCallbacks &indexCallbacks,
664e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                  unsigned indexOptions, CXTranslationUnit cxTU)
674e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    : Ctx(0), ClientData(clientData), CB(indexCallbacks),
684e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis      IndexOptions(indexOptions), CXTU(cxTU) { }
694e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
704e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  ASTContext &getASTContext() const { return *Ctx; }
714e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
724e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void setASTContext(ASTContext &ctx);
734e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
744e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void ppIncludedFile(SourceLocation hashLoc,
754e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                      StringRef filename, const FileEntry *File,
764e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                      bool isImport, bool isAngled);
774e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
784e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void ppMacroDefined(SourceLocation Loc, StringRef Name,
794e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                      SourceLocation DefBegin, unsigned Length,
804e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                      const void *OpaqueMacro);
814e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
824e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void ppMacroUndefined(SourceLocation Loc, StringRef Name,
834e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                        const void *OpaqueMacro);
844e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
854e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void ppMacroExpanded(SourceLocation Loc, StringRef Name,
864e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                       const void *OpaqueMacro);
874e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
884e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void invokeStartedTranslationUnit();
894e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
904e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void invokeFinishedTranslationUnit();
914e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
924e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexDecl(const Decl *D);
934e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
944e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexTagDecl(const TagDecl *D);
954e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
964e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent,
974e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                           const DeclContext *DC = 0);
984e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
994e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent,
1004e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                           const DeclContext *DC);
1014e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1024e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexDeclContext(const DeclContext *DC);
1034e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1044e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexBody(const Stmt *S, const DeclContext *DC);
1054e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1064e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleDiagnostic(const StoredDiagnostic &StoredDiag);
1074e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1084e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleFunction(const FunctionDecl *FD);
1094e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1104e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleVar(const VarDecl *D);
1114e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1124e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleField(const FieldDecl *D);
1134e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1144e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleEnumerator(const EnumConstantDecl *D);
1154e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1164e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleTagDecl(const TagDecl *D);
1174e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1184e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleTypedef(const TypedefDecl *D);
1194e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1204e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleObjCInterface(const ObjCInterfaceDecl *D);
1214e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1224e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void defineObjCInterface(const ObjCInterfaceDecl *D);
1234e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1244e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleObjCProtocol(const ObjCProtocolDecl *D);
1254e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1264e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleObjCCategory(const ObjCCategoryDecl *D);
1274e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1284e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleObjCMethod(const ObjCMethodDecl *D);
1294e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1304e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleObjCProperty(const ObjCPropertyDecl *D);
1314e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1324e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void handleReference(const NamedDecl *D, SourceLocation Loc,
1334e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                       const NamedDecl *Parent,
1344e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                       const DeclContext *DC,
135aca19be8731fc31cff68702de0dc7f30ce908979Argyrios Kyrtzidis                       const Expr *E = 0,
136aca19be8731fc31cff68702de0dc7f30ce908979Argyrios Kyrtzidis                       CXIdxEntityRefKind Kind = CXIdxEntityRef_Direct);
1374e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1384e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void invokeStartedTagTypeDefinition(const TagDecl *D);
1394e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1404e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void invokeStartedStatementBody(const NamedDecl *D, const DeclContext *DC);
1414e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1424e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void invokeStartedObjCContainer(const ObjCContainerDecl *D);
1434e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1444e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void invokeEndedContainer(const DeclContext *DC);
1454e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1464e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  bool isNotFromSourceFile(SourceLocation Loc) const;
1474e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1484e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexTUDeclsInObjCContainer();
1494e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void indexDeclGroupRef(DeclGroupRef DG);
1504e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1514e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void addTUDeclInObjCContainer(DeclGroupRef DG) {
1524e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    TUDeclsInObjCContainer.push_back(DG);
1534e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  }
1544e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1554e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void translateLoc(SourceLocation Loc, CXIdxFile *indexFile, CXFile *file,
1564e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                    unsigned *line, unsigned *column, unsigned *offset);
1574e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1584e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisprivate:
1594e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void addEntityInMap(const NamedDecl *D, CXIdxEntity entity);
1604e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1614e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void addContainerInMap(const DeclContext *DC, CXIdxContainer container);
1624e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1634e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXIdxEntity getIndexEntity(const NamedDecl *D);
1644e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1654e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  const NamedDecl *getEntityDecl(const NamedDecl *D) const;
1664e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1674e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXIdxContainer getIndexContainer(const NamedDecl *D) const {
1684e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    return getIndexContainerForDC(D->getDeclContext());
1694e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  }
1704e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1714e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  const DeclContext *getScopedContext(const DeclContext *DC) const;
1724e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXIdxContainer getIndexContainerForDC(const DeclContext *DC) const;
1734e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1744e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXIdxFile getIndexFile(const FileEntry *File);
1754e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1764e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXIdxLoc getIndexLoc(SourceLocation Loc) const;
1774e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1784e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void getIndexedEntityInfo(const NamedDecl *D,
1794e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                            CXIdxIndexedEntityInfo &IdxEntityInfo,
1804e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                            CXIdxEntityInfo &EntityInfo,
1814e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                            CXIdxIndexedDeclInfo &IdxDeclInfo,
1824e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                            StrAdapter &SA);
1834e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1844e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void getIndexedDeclInfo(const NamedDecl *D,
1854e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                          CXIdxIndexedDeclInfo &IdxDeclInfo);
1864e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1874e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void getIndexedRedeclInfo(const NamedDecl *D,
1884e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                            CXIdxIndexedRedeclInfo &RedeclInfo,
1894e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                            CXIdxIndexedDeclInfo &IdxDeclInfo);
1904e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1914e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void getContainerInfo(const NamedDecl *D,
1924e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                        CXIdxContainerInfo &ContainerInfo);
1934e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1944e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  void getEntityInfo(const NamedDecl *D,
1954e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                     CXIdxEntityInfo &EntityInfo,
1964e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis                     StrAdapter &SA);
1974e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
1984e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXCursor getCursor(const NamedDecl *D) {
1994e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis    return cxcursor::MakeCXCursor(const_cast<NamedDecl*>(D), CXTU);
2004e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  }
2014e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
2024e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis  CXCursor getRefCursor(const NamedDecl *D, SourceLocation Loc);
2034e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis};
2044e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis
2054e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis}} // end clang::cxindex
206