IndexingContext.h revision 21ee5707e6e59d982d2f2ae28e079c7ff46dc519
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 136ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis#include "clang/AST/DeclObjC.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; 27c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis enum DInfoKind { 28c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis Info_Decl, 29c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 30c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis Info_ObjCContainer, 31c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis Info_ObjCInterface, 32c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis Info_ObjCProtocol, 33c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis Info_ObjCCategory 34c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis }; 35c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 36c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis DInfoKind Kind; 37c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 38c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis DeclInfo(bool isRedeclaration, bool isDefinition, bool isContainer) 39c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis : Kind(Info_Decl) { 40c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis this->isRedeclaration = isRedeclaration; 41c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis this->isDefinition = isDefinition; 42c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis this->isContainer = isContainer; 43c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 44c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis DeclInfo(DInfoKind K, 45c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis bool isRedeclaration, bool isDefinition, bool isContainer) 46c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis : Kind(K) { 47c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis this->isRedeclaration = isRedeclaration; 48c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis this->isDefinition = isDefinition; 49c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis this->isContainer = isContainer; 50c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 51c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 52c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const DeclInfo *) { return true; } 53dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis}; 54dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 55dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidisstruct ObjCContainerDeclInfo : public DeclInfo { 566ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis CXIdxObjCContainerDeclInfo ObjCContDeclInfo; 57dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 58c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCContainerDeclInfo(bool isForwardRef, 59c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis bool isRedeclaration, 60c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis bool isImplementation) 61c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis : DeclInfo(Info_ObjCContainer, isRedeclaration, 62c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isDefinition=*/!isForwardRef, /*isContainer=*/!isForwardRef) { 63c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis init(isForwardRef, isImplementation); 64c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 65c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCContainerDeclInfo(DInfoKind K, 66c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis bool isForwardRef, 67c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis bool isRedeclaration, 68c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis bool isImplementation) 69c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis : DeclInfo(K, isRedeclaration, /*isDefinition=*/!isForwardRef, 70c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isContainer=*/!isForwardRef) { 71c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis init(isForwardRef, isImplementation); 72c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 73c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 74c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const DeclInfo *D) { 75c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis return Info_ObjCContainer <= D->Kind && D->Kind <= Info_ObjCCategory; 76c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 77c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const ObjCContainerDeclInfo *D) { return true; } 78c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 79c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidisprivate: 80c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis void init(bool isForwardRef, bool isImplementation) { 81c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis if (isForwardRef) 82c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCContDeclInfo.kind = CXIdxObjCContainer_ForwardRef; 83c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis else if (isImplementation) 84c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCContDeclInfo.kind = CXIdxObjCContainer_Implementation; 85c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis else 86c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCContDeclInfo.kind = CXIdxObjCContainer_Interface; 87c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 886ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis}; 896ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis 90c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidisstruct ObjCInterfaceDeclInfo : public ObjCContainerDeclInfo { 916ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis CXIdxObjCInterfaceDeclInfo ObjCInterDeclInfo; 92c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis CXIdxObjCProtocolRefListInfo ObjCProtoListInfo; 93c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 94c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCInterfaceDeclInfo(const ObjCInterfaceDecl *D) 95c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis : ObjCContainerDeclInfo(Info_ObjCInterface, 96c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isForwardRef=*/false, 97c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isRedeclaration=*/D->isInitiallyForwardDecl(), 98c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isImplementation=*/false) { } 99c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 100c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const DeclInfo *D) { 101c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis return D->Kind == Info_ObjCInterface; 102c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 103c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const ObjCInterfaceDeclInfo *D) { return true; } 1046ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis}; 1056ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis 106c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidisstruct ObjCProtocolDeclInfo : public ObjCContainerDeclInfo { 107c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis CXIdxObjCProtocolRefListInfo ObjCProtoRefListInfo; 108c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 109c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCProtocolDeclInfo(const ObjCProtocolDecl *D) 110c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis : ObjCContainerDeclInfo(Info_ObjCProtocol, 111c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isForwardRef=*/false, 112c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isRedeclaration=*/D->isInitiallyForwardDecl(), 113c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isImplementation=*/false) { } 114c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 115c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const DeclInfo *D) { 116c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis return D->Kind == Info_ObjCProtocol; 117c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 118c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const ObjCProtocolDeclInfo *D) { return true; } 119c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis}; 120c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 121c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidisstruct ObjCCategoryDeclInfo : public ObjCContainerDeclInfo { 122c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis CXIdxObjCCategoryDeclInfo ObjCCatDeclInfo; 123c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 124c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis explicit ObjCCategoryDeclInfo(bool isImplementation) 125c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis : ObjCContainerDeclInfo(Info_ObjCCategory, 126c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isForwardRef=*/false, 127c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isRedeclaration=*/isImplementation, 128c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isImplementation=*/isImplementation) { } 129c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 130c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const DeclInfo *D) { 131c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis return D->Kind == Info_ObjCCategory; 132c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 133c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const ObjCCategoryDeclInfo *D) { return true; } 134dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis}; 135dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 1364e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisclass IndexingContext { 1374e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis ASTContext *Ctx; 1384e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXClientData ClientData; 1394e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexerCallbacks &CB; 1404e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis unsigned IndexOptions; 1414e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXTranslationUnit CXTU; 1424e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 143dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis typedef llvm::DenseMap<const FileEntry *, CXIdxClientFile> FileMapTy; 144dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis typedef llvm::DenseMap<const DeclContext *, CXIdxClientContainer> ContainerMapTy; 1454e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis FileMapTy FileMap; 1464e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis ContainerMapTy ContainerMap; 1474e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1484e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis SmallVector<DeclGroupRef, 8> TUDeclsInObjCContainer; 1494e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1504e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis llvm::SmallString<256> StrScratch; 151dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis unsigned StrAdapterCount; 1524e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1534e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis class StrAdapter { 1544e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis llvm::SmallString<256> &Scratch; 155dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexingContext &IdxCtx; 1564e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1574e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis public: 158dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis StrAdapter(IndexingContext &indexCtx) 159dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis : Scratch(indexCtx.StrScratch), IdxCtx(indexCtx) { 160dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis ++IdxCtx.StrAdapterCount; 161dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis } 162dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 163dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis ~StrAdapter() { 164dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis --IdxCtx.StrAdapterCount; 165dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis if (IdxCtx.StrAdapterCount == 0) 166dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis Scratch.clear(); 167dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis } 1684e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1694e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const char *toCStr(StringRef Str); 1704e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1714e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis unsigned getCurSize() const { return Scratch.size(); } 1724e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1734e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const char *getCStr(unsigned CharIndex) { 1744e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis Scratch.push_back('\0'); 1754e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return Scratch.data() + CharIndex; 1764e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 1774e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1784e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis SmallVectorImpl<char> &getBuffer() { return Scratch; } 1794e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis }; 1804e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1816ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis struct ObjCProtocolListInfo { 1826ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis SmallVector<CXIdxObjCProtocolRefInfo, 4> ProtInfos; 1836ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis SmallVector<CXIdxEntityInfo, 4> ProtEntities; 1846ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis SmallVector<CXIdxObjCProtocolRefInfo *, 4> Prots; 1856ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis 186c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis CXIdxObjCProtocolRefListInfo getListInfo() { 187c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis CXIdxObjCProtocolRefListInfo Info = { Prots.data(), 188c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis (unsigned)Prots.size() }; 189c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis return Info; 190c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 1916ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis 1926ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis ObjCProtocolListInfo(const ObjCProtocolList &ProtList, 1936ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis IndexingContext &IdxCtx, 1946ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis IndexingContext::StrAdapter &SA); 1956ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis }; 1966ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis 1974e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidispublic: 1984e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexingContext(CXClientData clientData, IndexerCallbacks &indexCallbacks, 1994e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis unsigned indexOptions, CXTranslationUnit cxTU) 2004e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis : Ctx(0), ClientData(clientData), CB(indexCallbacks), 201dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexOptions(indexOptions), CXTU(cxTU), StrAdapterCount(0) { } 2024e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2034e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis ASTContext &getASTContext() const { return *Ctx; } 2044e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2054e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void setASTContext(ASTContext &ctx); 2064e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 207dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis void enteredMainFile(const FileEntry *File); 208dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 2094e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void ppIncludedFile(SourceLocation hashLoc, 2104e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis StringRef filename, const FileEntry *File, 2114e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool isImport, bool isAngled); 2124e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2136ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis void startedTranslationUnit(); 2144e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2154e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexDecl(const Decl *D); 2164e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2174e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexTagDecl(const TagDecl *D); 2184e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2194e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent, 2204e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const DeclContext *DC = 0); 2214e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2224e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent, 2234e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const DeclContext *DC); 2244e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2254e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexDeclContext(const DeclContext *DC); 2264e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2274e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexBody(const Stmt *S, const DeclContext *DC); 2284e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2294e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void handleDiagnostic(const StoredDiagnostic &StoredDiag); 23021ee5707e6e59d982d2f2ae28e079c7ff46dc519Argyrios Kyrtzidis void handleDiagnostic(CXDiagnostic CXDiag); 2314e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2324e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void handleFunction(const FunctionDecl *FD); 2334e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2344e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void handleVar(const VarDecl *D); 2354e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2364e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void handleField(const FieldDecl *D); 2374e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2384e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void handleEnumerator(const EnumConstantDecl *D); 2394e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2404e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void handleTagDecl(const TagDecl *D); 2414e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2424e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void handleTypedef(const TypedefDecl *D); 2434e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 244dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis void handleObjCClass(const ObjCClassDecl *D); 2454e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void handleObjCInterface(const ObjCInterfaceDecl *D); 246dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis void handleObjCImplementation(const ObjCImplementationDecl *D); 2474e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 248dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis void handleObjCForwardProtocol(const ObjCProtocolDecl *D, 249dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis SourceLocation Loc, 250dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis bool isRedeclaration); 251dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 2524e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void handleObjCProtocol(const ObjCProtocolDecl *D); 2534e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2544e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void handleObjCCategory(const ObjCCategoryDecl *D); 255dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis void handleObjCCategoryImpl(const ObjCCategoryImplDecl *D); 2564e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2574e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void handleObjCMethod(const ObjCMethodDecl *D); 2584e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2594e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void handleObjCProperty(const ObjCPropertyDecl *D); 2604e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2614e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void handleReference(const NamedDecl *D, SourceLocation Loc, 2624e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const NamedDecl *Parent, 2634e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const DeclContext *DC, 264aca19be8731fc31cff68702de0dc7f30ce908979Argyrios Kyrtzidis const Expr *E = 0, 265aca19be8731fc31cff68702de0dc7f30ce908979Argyrios Kyrtzidis CXIdxEntityRefKind Kind = CXIdxEntityRef_Direct); 2664e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2674e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool isNotFromSourceFile(SourceLocation Loc) const; 2684e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 26921ee5707e6e59d982d2f2ae28e079c7ff46dc519Argyrios Kyrtzidis void indexTopLevelDecl(Decl *D); 2704e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexTUDeclsInObjCContainer(); 2714e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexDeclGroupRef(DeclGroupRef DG); 2724e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2734e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void addTUDeclInObjCContainer(DeclGroupRef DG) { 2744e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis TUDeclsInObjCContainer.push_back(DG); 2754e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 2764e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 277dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis void translateLoc(SourceLocation Loc, CXIdxClientFile *indexFile, CXFile *file, 2784e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis unsigned *line, unsigned *column, unsigned *offset); 2794e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2804e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisprivate: 281dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis void handleDecl(const NamedDecl *D, 282dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis SourceLocation Loc, CXCursor Cursor, 283dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis DeclInfo &DInfo); 284dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 285dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis void handleObjCContainer(const ObjCContainerDecl *D, 286dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis SourceLocation Loc, CXCursor Cursor, 287dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis ObjCContainerDeclInfo &ContDInfo); 2884e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 289dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis void addContainerInMap(const DeclContext *DC, CXIdxClientContainer container); 290dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 2914e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const NamedDecl *getEntityDecl(const NamedDecl *D) const; 2924e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 293dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis CXIdxClientContainer getIndexContainer(const NamedDecl *D) const { 2944e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return getIndexContainerForDC(D->getDeclContext()); 2954e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 2964e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2974e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const DeclContext *getScopedContext(const DeclContext *DC) const; 298dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis CXIdxClientContainer getIndexContainerForDC(const DeclContext *DC) const; 2994e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 300dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis CXIdxClientFile getIndexFile(const FileEntry *File); 3014e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 3024e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXIdxLoc getIndexLoc(SourceLocation Loc) const; 3034e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 3044e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void getEntityInfo(const NamedDecl *D, 3054e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXIdxEntityInfo &EntityInfo, 3064e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis StrAdapter &SA); 3074e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 3084e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXCursor getCursor(const NamedDecl *D) { 3094e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return cxcursor::MakeCXCursor(const_cast<NamedDecl*>(D), CXTU); 3104e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 3114e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 3124e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXCursor getRefCursor(const NamedDecl *D, SourceLocation Loc); 3134e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis}; 3144e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 3154e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis}} // end clang::cxindex 316