IndexDecl.cpp revision dd93c596cd95e1b96031ff47efe0a5095ff3d7f1
14e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis//===- CIndexHigh.cpp - 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 "IndexingContext.h" 114e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 124e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis#include "clang/AST/DeclVisitor.h" 134e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 144e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisusing namespace clang; 154e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisusing namespace cxindex; 164e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 174e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisnamespace { 184e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 194e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisclass IndexingDeclVisitor : public DeclVisitor<IndexingDeclVisitor, bool> { 204e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexingContext &IndexCtx; 214e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 224e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidispublic: 234e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis explicit IndexingDeclVisitor(IndexingContext &indexCtx) 244e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis : IndexCtx(indexCtx) { } 254e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 264e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitFunctionDecl(FunctionDecl *D) { 274e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.handleFunction(D); 284e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexTypeSourceInfo(D->getTypeSourceInfo(), D); 294e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis if (D->isThisDeclarationADefinition()) { 304e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const Stmt *Body = D->getBody(); 314e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis if (Body) { 32dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.startContainer(D, /*isBody=*/true); 334e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexBody(Body, D); 34dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.endContainer(D); 354e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 364e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 374e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 384e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 394e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 404e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitVarDecl(VarDecl *D) { 414e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.handleVar(D); 424e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexTypeSourceInfo(D->getTypeSourceInfo(), D); 434e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 444e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 454e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 464e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitFieldDecl(FieldDecl *D) { 474e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.handleField(D); 484e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexTypeSourceInfo(D->getTypeSourceInfo(), D); 494e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 504e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 514e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 524e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitEnumConstantDecl(EnumConstantDecl *D) { 534e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.handleEnumerator(D); 544e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 554e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 564e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 574e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitTypedefDecl(TypedefDecl *D) { 584e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.handleTypedef(D); 594e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexTypeSourceInfo(D->getTypeSourceInfo(), D); 604e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 614e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 624e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 634e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitTagDecl(TagDecl *D) { 644e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis // Non-free standing tags are handled in indexTypeSourceInfo. 654e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis if (D->isFreeStanding()) 664e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexTagDecl(D); 674e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 684e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 694e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 704e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitObjCClassDecl(ObjCClassDecl *D) { 71dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.handleObjCClass(D); 724e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 734e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 744e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 754e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitObjCForwardProtocolDecl(ObjCForwardProtocolDecl *D) { 764e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis ObjCForwardProtocolDecl::protocol_loc_iterator LI = D->protocol_loc_begin(); 774e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis for (ObjCForwardProtocolDecl::protocol_iterator 784e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis I = D->protocol_begin(), E = D->protocol_end(); I != E; ++I, ++LI) { 794e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis SourceLocation Loc = *LI; 804e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis ObjCProtocolDecl *PD = *I; 814e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 82dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis bool isRedeclaration = PD->getLocation() != Loc; 83dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.handleObjCForwardProtocol(PD, Loc, isRedeclaration); 844e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 854e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 864e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 874e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 884e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitObjCInterfaceDecl(ObjCInterfaceDecl *D) { 89dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis // Forward decls are handled at VisitObjCClassDecl. 904e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis if (D->isForwardDecl()) 914e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 924e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 93dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.handleObjCInterface(D); 944e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 954e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexTUDeclsInObjCContainer(); 96dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.startContainer(D); 974e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.defineObjCInterface(D); 984e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexDeclContext(D); 99dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.endContainer(D); 1004e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 1014e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 1024e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1034e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitObjCProtocolDecl(ObjCProtocolDecl *D) { 104dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis // Forward decls are handled at VisitObjCForwardProtocolDecl. 1054e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis if (D->isForwardDecl()) 1064e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 1074e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 108dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.handleObjCProtocol(D); 1094e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1104e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexTUDeclsInObjCContainer(); 111dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.startContainer(D); 1124e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexDeclContext(D); 113dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.endContainer(D); 1144e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 1154e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 1164e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1174e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitObjCImplementationDecl(ObjCImplementationDecl *D) { 118dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.handleObjCImplementation(D); 1194e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1204e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexTUDeclsInObjCContainer(); 121dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.startContainer(D); 1224e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexDeclContext(D); 123dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.endContainer(D); 1244e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 1254e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 1264e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1274e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitObjCCategoryDecl(ObjCCategoryDecl *D) { 128dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.handleObjCCategory(D); 1294e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1304e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexTUDeclsInObjCContainer(); 131dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.startContainer(D); 1324e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexDeclContext(D); 133dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.endContainer(D); 1344e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 1354e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 1364e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1374e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D) { 138dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis if (D->getCategoryDecl()->getLocation().isInvalid()) 139dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis return true; 140dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 141dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.handleObjCCategoryImpl(D); 142dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis 1434e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexTUDeclsInObjCContainer(); 144dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.startContainer(D); 1454e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexDeclContext(D); 146dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.endContainer(D); 1474e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 1484e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 1494e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1504e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitObjCMethodDecl(ObjCMethodDecl *D) { 1514e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.handleObjCMethod(D); 1524e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexTypeSourceInfo(D->getResultTypeSourceInfo(), D); 1534e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis for (ObjCMethodDecl::param_iterator 1544e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis I = D->param_begin(), E = D->param_end(); I != E; ++I) 1554e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexTypeSourceInfo((*I)->getTypeSourceInfo(), D); 1564e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1574e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis if (D->isThisDeclarationADefinition()) { 1584e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis const Stmt *Body = D->getBody(); 1594e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis if (Body) { 160dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.startContainer(D, /*isBody=*/true); 1614e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexBody(Body, D); 162dd93c596cd95e1b96031ff47efe0a5095ff3d7f1Argyrios Kyrtzidis IndexCtx.endContainer(D); 1634e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 1644e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 1654e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 1664e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 1674e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1684e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool VisitObjCPropertyDecl(ObjCPropertyDecl *D) { 1694e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.handleObjCProperty(D); 1704e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis IndexCtx.indexTypeSourceInfo(D->getTypeSourceInfo(), D); 1714e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return true; 1724e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 1734e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis}; 1744e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1754e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis} // anonymous namespace 1764e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1774e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisvoid IndexingContext::indexDecl(const Decl *D) { 1784e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis bool Handled = IndexingDeclVisitor(*this).Visit(const_cast<Decl*>(D)); 1794e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis if (!Handled && isa<DeclContext>(D)) 1804e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis indexDeclContext(cast<DeclContext>(D)); 1814e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis} 1824e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1834e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisvoid IndexingContext::indexDeclContext(const DeclContext *DC) { 1844e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis for (DeclContext::decl_iterator 1854e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis I = DC->decls_begin(), E = DC->decls_end(); I != E; ++I) { 1864e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis indexDecl(*I); 1874e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 1884e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis} 1894e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1904e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisvoid IndexingContext::indexDeclGroupRef(DeclGroupRef DG) { 1914e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis for (DeclGroupRef::iterator I = DG.begin(), E = DG.end(); I != E; ++I) { 1924e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis Decl *D = *I; 1934e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis if (isNotFromSourceFile(D->getLocation())) 1944e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return; 1954e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1964e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis if (isa<ObjCMethodDecl>(D)) 1974e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis continue; // Wait for the objc container. 1984e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 1994e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis indexDecl(D); 2004e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 2014e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis} 2024e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 2034e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisvoid IndexingContext::indexTUDeclsInObjCContainer() { 2044e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis for (unsigned i = 0, e = TUDeclsInObjCContainer.size(); i != e; ++i) 2054e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis indexDeclGroupRef(TUDeclsInObjCContainer[i]); 2064e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis TUDeclsInObjCContainer.clear(); 2074e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis} 208