IndexingContext.h revision b395c63b473bf1b3783bff371a993332e8c4c5e3
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" 15c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis#include "llvm/ADT/DenseSet.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; 43b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis attributes = 0; 44b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis numAttributes = 0; 45c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 46c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis DeclInfo(DInfoKind K, 47c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis bool isRedeclaration, bool isDefinition, bool isContainer) 48c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis : Kind(K) { 49c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis this->isRedeclaration = isRedeclaration; 50c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis this->isDefinition = isDefinition; 51c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis this->isContainer = isContainer; 52b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis attributes = 0; 53b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis numAttributes = 0; 54c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 55c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 56c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const DeclInfo *) { return true; } 57dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis}; 58dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 59dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidisstruct ObjCContainerDeclInfo : public DeclInfo { 606ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis CXIdxObjCContainerDeclInfo ObjCContDeclInfo; 61dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 62c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCContainerDeclInfo(bool isForwardRef, 63c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis bool isRedeclaration, 64c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis bool isImplementation) 65c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis : DeclInfo(Info_ObjCContainer, isRedeclaration, 66c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isDefinition=*/!isForwardRef, /*isContainer=*/!isForwardRef) { 67c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis init(isForwardRef, isImplementation); 68c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 69c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCContainerDeclInfo(DInfoKind K, 70c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis bool isForwardRef, 71c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis bool isRedeclaration, 72c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis bool isImplementation) 73c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis : DeclInfo(K, isRedeclaration, /*isDefinition=*/!isForwardRef, 74c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isContainer=*/!isForwardRef) { 75c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis init(isForwardRef, isImplementation); 76c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 77c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 78c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const DeclInfo *D) { 79c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis return Info_ObjCContainer <= D->Kind && D->Kind <= Info_ObjCCategory; 80c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 81c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const ObjCContainerDeclInfo *D) { return true; } 82c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 83c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidisprivate: 84c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis void init(bool isForwardRef, bool isImplementation) { 85c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis if (isForwardRef) 86c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCContDeclInfo.kind = CXIdxObjCContainer_ForwardRef; 87c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis else if (isImplementation) 88c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCContDeclInfo.kind = CXIdxObjCContainer_Implementation; 89c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis else 90c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCContDeclInfo.kind = CXIdxObjCContainer_Interface; 91c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 926ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis}; 936ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis 94c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidisstruct ObjCInterfaceDeclInfo : public ObjCContainerDeclInfo { 956ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis CXIdxObjCInterfaceDeclInfo ObjCInterDeclInfo; 96c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis CXIdxObjCProtocolRefListInfo ObjCProtoListInfo; 97c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 98c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCInterfaceDeclInfo(const ObjCInterfaceDecl *D) 99c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis : ObjCContainerDeclInfo(Info_ObjCInterface, 100c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isForwardRef=*/false, 101c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isRedeclaration=*/D->isInitiallyForwardDecl(), 102c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isImplementation=*/false) { } 103c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 104c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const DeclInfo *D) { 105c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis return D->Kind == Info_ObjCInterface; 106c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 107c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const ObjCInterfaceDeclInfo *D) { return true; } 1086ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis}; 1096ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis 110c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidisstruct ObjCProtocolDeclInfo : public ObjCContainerDeclInfo { 111c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis CXIdxObjCProtocolRefListInfo ObjCProtoRefListInfo; 112c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 113c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis ObjCProtocolDeclInfo(const ObjCProtocolDecl *D) 114c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis : ObjCContainerDeclInfo(Info_ObjCProtocol, 115c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isForwardRef=*/false, 116c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isRedeclaration=*/D->isInitiallyForwardDecl(), 117c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isImplementation=*/false) { } 118c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 119c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const DeclInfo *D) { 120c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis return D->Kind == Info_ObjCProtocol; 121c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 122c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const ObjCProtocolDeclInfo *D) { return true; } 123c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis}; 124c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 125c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidisstruct ObjCCategoryDeclInfo : public ObjCContainerDeclInfo { 126c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis CXIdxObjCCategoryDeclInfo ObjCCatDeclInfo; 127c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 128c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis explicit ObjCCategoryDeclInfo(bool isImplementation) 129c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis : ObjCContainerDeclInfo(Info_ObjCCategory, 130c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isForwardRef=*/false, 131c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isRedeclaration=*/isImplementation, 132c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis /*isImplementation=*/isImplementation) { } 133c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis 134c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const DeclInfo *D) { 135c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis return D->Kind == Info_ObjCCategory; 136c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 137c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis static bool classof(const ObjCCategoryDeclInfo *D) { return true; } 138dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis}; 139dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 140b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidisstruct AttrInfo : public CXIdxAttrInfo { 141b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis const Attr *A; 142b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis 143b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis AttrInfo(CXIdxAttrKind Kind, CXCursor C, CXIdxLoc Loc, const Attr *A) { 144b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis kind = Kind; 145b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis cursor = C; 146b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis loc = Loc; 147b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis this->A = A; 148b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis } 149b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis 150b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis static bool classof(const AttrInfo *) { return true; } 151b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis}; 152b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis 153b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidisstruct IBOutletCollectionInfo : public AttrInfo { 154b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis CXIdxEntityInfo CXClassInfo; 155b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis CXIdxIBOutletCollectionAttrInfo IBCollInfo; 156b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis 157b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis IBOutletCollectionInfo(CXCursor C, CXIdxLoc Loc, const Attr *A) : 158b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis AttrInfo(CXIdxAttr_IBOutletCollection, C, Loc, A) { 159b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis assert(C.kind == CXCursor_IBOutletCollectionAttr); 160b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis } 161b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis 162b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis static bool classof(const AttrInfo *A) { 163b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis return A->kind == CXIdxAttr_IBOutletCollection; 164b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis } 165b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis static bool classof(const IBOutletCollectionInfo *D) { return true; } 166b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis}; 167b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis 168c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidisstruct RefFileOccurence { 169c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis const FileEntry *File; 170c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis const Decl *Dcl; 171c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis 172c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis RefFileOccurence(const FileEntry *File, const Decl *Dcl) 173c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis : File(File), Dcl(Dcl) { } 174c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis}; 175c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis 1764e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisclass IndexingContext { 1774e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis ASTContext *Ctx; 1784e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXClientData ClientData; 1794e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexerCallbacks &CB; 1804e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis unsigned IndexOptions; 1814e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXTranslationUnit CXTU; 1824e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 183dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis typedef llvm::DenseMap<const FileEntry *, CXIdxClientFile> FileMapTy; 184dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis typedef llvm::DenseMap<const DeclContext *, CXIdxClientContainer> ContainerMapTy; 1854e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis FileMapTy FileMap; 1864e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis ContainerMapTy ContainerMap; 1874e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 188c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis llvm::DenseSet<RefFileOccurence> RefFileOccurences; 189c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis 1904e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis SmallVector<DeclGroupRef, 8> TUDeclsInObjCContainer; 1914e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1924e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis llvm::SmallString<256> StrScratch; 193dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis unsigned StrAdapterCount; 1944e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1954e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis class StrAdapter { 1964e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis llvm::SmallString<256> &Scratch; 197dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexingContext &IdxCtx; 1984e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1994e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis public: 200dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis StrAdapter(IndexingContext &indexCtx) 201dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis : Scratch(indexCtx.StrScratch), IdxCtx(indexCtx) { 202dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis ++IdxCtx.StrAdapterCount; 203dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis } 204dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 205dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis ~StrAdapter() { 206dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis --IdxCtx.StrAdapterCount; 207dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis if (IdxCtx.StrAdapterCount == 0) 208dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis Scratch.clear(); 209dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis } 2104e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2114e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const char *toCStr(StringRef Str); 2124e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2134e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis unsigned getCurSize() const { return Scratch.size(); } 2144e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2154e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const char *getCStr(unsigned CharIndex) { 2164e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis Scratch.push_back('\0'); 2174e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return Scratch.data() + CharIndex; 2184e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 2194e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2204e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis SmallVectorImpl<char> &getBuffer() { return Scratch; } 2214e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis }; 2224e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2236ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis struct ObjCProtocolListInfo { 2246ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis SmallVector<CXIdxObjCProtocolRefInfo, 4> ProtInfos; 2256ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis SmallVector<CXIdxEntityInfo, 4> ProtEntities; 2266ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis SmallVector<CXIdxObjCProtocolRefInfo *, 4> Prots; 2276ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis 228b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis CXIdxObjCProtocolRefListInfo getListInfo() const { 229c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis CXIdxObjCProtocolRefListInfo Info = { Prots.data(), 230c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis (unsigned)Prots.size() }; 231c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis return Info; 232c71d55469e7d5f7b376a30620617a175a9442da9Argyrios Kyrtzidis } 2336ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis 2346ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis ObjCProtocolListInfo(const ObjCProtocolList &ProtList, 2356ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis IndexingContext &IdxCtx, 2366ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis IndexingContext::StrAdapter &SA); 2376ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis }; 2386ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis 239b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis struct AttrListInfo { 240b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis SmallVector<AttrInfo, 2> Attrs; 241b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis SmallVector<IBOutletCollectionInfo, 2> IBCollAttrs; 242b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis SmallVector<CXIdxAttrInfo *, 2> CXAttrs; 243b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis 244b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis const CXIdxAttrInfo *const *getAttrs() const { 245b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis return CXAttrs.data(); 246b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis } 247b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis unsigned getNumAttrs() const { return (unsigned)CXAttrs.size(); } 248b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis 249b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis AttrListInfo(const Decl *D, 250b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis IndexingContext &IdxCtx, 251b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis IndexingContext::StrAdapter &SA); 252b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis}; 253b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis 2544e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidispublic: 2554e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexingContext(CXClientData clientData, IndexerCallbacks &indexCallbacks, 2564e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis unsigned indexOptions, CXTranslationUnit cxTU) 2574e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis : Ctx(0), ClientData(clientData), CB(indexCallbacks), 258dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexOptions(indexOptions), CXTU(cxTU), StrAdapterCount(0) { } 2594e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2604e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis ASTContext &getASTContext() const { return *Ctx; } 2614e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2624e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void setASTContext(ASTContext &ctx); 2634e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 264b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool suppressRefs() const { 265b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis return IndexOptions & CXIndexOpt_SuppressRedundantRefs; 266c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis } 267c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis 268b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool shouldAbort(); 269b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis 270dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis void enteredMainFile(const FileEntry *File); 271dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 2724e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void ppIncludedFile(SourceLocation hashLoc, 2734e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis StringRef filename, const FileEntry *File, 2744e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool isImport, bool isAngled); 2754e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2766ec43adc39006a7fce94188956d0239bd54c0363Argyrios Kyrtzidis void startedTranslationUnit(); 2774e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2784e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexDecl(const Decl *D); 2794e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2804e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexTagDecl(const TagDecl *D); 2814e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2824e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent, 2834e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const DeclContext *DC = 0); 2844e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2854e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent, 2864e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const DeclContext *DC); 2874e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2884e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexDeclContext(const DeclContext *DC); 2894e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2904e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexBody(const Stmt *S, const DeclContext *DC); 2914e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 292b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis void handleDiagnosticSet(CXDiagnosticSet CXDiagSet); 2934e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 294b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleFunction(const FunctionDecl *FD); 2954e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 296b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleVar(const VarDecl *D); 2974e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 298b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleField(const FieldDecl *D); 2994e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 300b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleEnumerator(const EnumConstantDecl *D); 3014e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 302b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleTagDecl(const TagDecl *D); 3034e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 304b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleTypedef(const TypedefDecl *D); 3054e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 306b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleObjCClass(const ObjCClassDecl *D); 307b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleObjCInterface(const ObjCInterfaceDecl *D); 308b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleObjCImplementation(const ObjCImplementationDecl *D); 3094e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 310b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleObjCForwardProtocol(const ObjCProtocolDecl *D, 311dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis SourceLocation Loc, 312dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis bool isRedeclaration); 313dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 314b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleObjCProtocol(const ObjCProtocolDecl *D); 315b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis 316b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleObjCCategory(const ObjCCategoryDecl *D); 317b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleObjCCategoryImpl(const ObjCCategoryImplDecl *D); 3184e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 319b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleObjCMethod(const ObjCMethodDecl *D); 3204e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 321b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleSynthesizedObjCProperty(const ObjCPropertyImplDecl *D); 322b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleSynthesizedObjCMethod(const ObjCMethodDecl *D, SourceLocation Loc); 3234e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 324b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleObjCProperty(const ObjCPropertyDecl *D); 3254e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 326b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleReference(const NamedDecl *D, SourceLocation Loc, CXCursor Cursor, 327b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis const NamedDecl *Parent, 328b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis const DeclContext *DC, 329b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis const Expr *E = 0, 330b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis CXIdxEntityRefKind Kind = CXIdxEntityRef_Direct); 331b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis 332b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleReference(const NamedDecl *D, SourceLocation Loc, 3334e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const NamedDecl *Parent, 3344e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const DeclContext *DC, 335aca19be8731fc31cff68702de0dc7f30ce908979Argyrios Kyrtzidis const Expr *E = 0, 336aca19be8731fc31cff68702de0dc7f30ce908979Argyrios Kyrtzidis CXIdxEntityRefKind Kind = CXIdxEntityRef_Direct); 3374e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 3384e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool isNotFromSourceFile(SourceLocation Loc) const; 3394e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 34021ee5707e6e59d982d2f2ae28e079c7ff46dc519Argyrios Kyrtzidis void indexTopLevelDecl(Decl *D); 3414e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexTUDeclsInObjCContainer(); 3424e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void indexDeclGroupRef(DeclGroupRef DG); 3434e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 3444e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void addTUDeclInObjCContainer(DeclGroupRef DG) { 3454e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis TUDeclsInObjCContainer.push_back(DG); 3464e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 3474e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 348dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis void translateLoc(SourceLocation Loc, CXIdxClientFile *indexFile, CXFile *file, 3494e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis unsigned *line, unsigned *column, unsigned *offset); 3504e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 3514e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisprivate: 352b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleDecl(const NamedDecl *D, 353dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis SourceLocation Loc, CXCursor Cursor, 354dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis DeclInfo &DInfo); 355dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 356b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool handleObjCContainer(const ObjCContainerDecl *D, 357dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis SourceLocation Loc, CXCursor Cursor, 358dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis ObjCContainerDeclInfo &ContDInfo); 3594e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 360dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis void addContainerInMap(const DeclContext *DC, CXIdxClientContainer container); 361dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 362b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis bool markEntityOccurrenceInFile(const NamedDecl *D, SourceLocation Loc); 363b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis 3644e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const NamedDecl *getEntityDecl(const NamedDecl *D) const; 3654e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 366dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis CXIdxClientContainer getIndexContainer(const NamedDecl *D) const { 3674e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return getIndexContainerForDC(D->getDeclContext()); 3684e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 3694e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 3704e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const DeclContext *getScopedContext(const DeclContext *DC) const; 371dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis CXIdxClientContainer getIndexContainerForDC(const DeclContext *DC) const; 3724e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 373dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis CXIdxClientFile getIndexFile(const FileEntry *File); 3744e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 3754e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXIdxLoc getIndexLoc(SourceLocation Loc) const; 3764e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 3774e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis void getEntityInfo(const NamedDecl *D, 3784e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXIdxEntityInfo &EntityInfo, 3794e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis StrAdapter &SA); 3804e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 381b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis CXCursor getCursor(const Decl *D) { 382b395c63b473bf1b3783bff371a993332e8c4c5e3Argyrios Kyrtzidis return cxcursor::MakeCXCursor(const_cast<Decl*>(D), CXTU); 3834e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 3844e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 3854e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXCursor getRefCursor(const NamedDecl *D, SourceLocation Loc); 3864e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis}; 3874e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 3884e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis}} // end clang::cxindex 389c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis 390c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidisnamespace llvm { 391c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis /// Define DenseMapInfo so that FileID's can be used as keys in DenseMap and 392c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis /// DenseSets. 393c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis template <> 394c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis struct DenseMapInfo<clang::cxindex::RefFileOccurence> { 395c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis static inline clang::cxindex::RefFileOccurence getEmptyKey() { 396c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis return clang::cxindex::RefFileOccurence(0, 0); 397c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis } 398c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis 399c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis static inline clang::cxindex::RefFileOccurence getTombstoneKey() { 400c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis return clang::cxindex::RefFileOccurence((const clang::FileEntry *)~0, 401c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis (const clang::Decl *)~0); 402c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis } 403c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis 404c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis static unsigned getHashValue(clang::cxindex::RefFileOccurence S) { 405c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis llvm::FoldingSetNodeID ID; 406c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis ID.AddPointer(S.File); 407c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis ID.AddPointer(S.Dcl); 408c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis return ID.ComputeHash(); 409c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis } 410c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis 411c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis static bool isEqual(clang::cxindex::RefFileOccurence LHS, 412c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis clang::cxindex::RefFileOccurence RHS) { 413c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis return LHS.File == RHS.File && LHS.Dcl == RHS.Dcl; 414c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis } 415c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis }; 416c6b4a5099588fd21b49c80f730a596a64b2766c6Argyrios Kyrtzidis} 417