Lines Matching refs:D
17 #define TRY_DECL(D,CALL_EXPR) \ argument
19 if (!IndexCtx.shouldIndex(D)) return true; \
41 bool VisitDecl(const Decl *D) { in VisitDecl() argument
75 static bool hasUserDefined(const ObjCMethodDecl *D, in hasUserDefined() argument
77 const ObjCMethodDecl *MD = Container->getMethod(D->getSelector(), in hasUserDefined()
78 D->isInstanceMethod()); in hasUserDefined()
84 void handleDeclarator(const DeclaratorDecl *D, in handleDeclarator() argument
87 if (!Parent) Parent = D; in handleDeclarator()
89 IndexCtx.indexTypeSourceInfo(D->getTypeSourceInfo(), Parent, in handleDeclarator()
92 IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), Parent); in handleDeclarator()
100 if (const ParmVarDecl *Parm = dyn_cast<ParmVarDecl>(D)) { in handleDeclarator()
112 } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { in handleDeclarator()
116 IndexDefaultParmeterArgument(PI, D); in handleDeclarator()
123 if (const auto *FD = dyn_cast<FunctionDecl>(D)) { in handleDeclarator()
126 IndexDefaultParmeterArgument(PV, D); in handleDeclarator()
133 bool handleObjCMethod(const ObjCMethodDecl *D, in handleObjCMethod() argument
138 D->getOverriddenMethods(Overriden); in handleObjCMethod()
149 SourceLocation MethodLoc = D->getSelectorStartLoc(); in handleObjCMethod()
151 MethodLoc = D->getLocation(); in handleObjCMethod()
157 bool isGetter = !D->param_size(); in handleObjCMethod()
164 if (D->isImplicit()) { in handleObjCMethod()
171 IndexCtx.handleReference(D, AttrLoc, cast<NamedDecl>(D->getDeclContext()), in handleObjCMethod()
172 D->getDeclContext(), 0); in handleObjCMethod()
175 TRY_DECL(D, IndexCtx.handleDecl(D, MethodLoc, Roles, Relations)); in handleObjCMethod()
176 IndexCtx.indexTypeSourceInfo(D->getReturnTypeSourceInfo(), D); in handleObjCMethod()
177 bool hasIBActionAndFirst = D->hasAttr<IBActionAttr>(); in handleObjCMethod()
178 for (const auto *I : D->parameters()) { in handleObjCMethod()
179 handleDeclarator(I, D, /*isIBType=*/hasIBActionAndFirst); in handleObjCMethod()
183 if (D->isThisDeclarationADefinition()) { in handleObjCMethod()
184 const Stmt *Body = D->getBody(); in handleObjCMethod()
186 IndexCtx.indexBody(Body, D, D); in handleObjCMethod()
199 gatherTemplatePseudoOverrides(const NamedDecl *D, in gatherTemplatePseudoOverrides() argument
204 dyn_cast<ClassTemplateSpecializationDecl>(D->getLexicalDeclContext()); in gatherTemplatePseudoOverrides()
212 bool TypeOverride = isa<TypeDecl>(D); in gatherTemplatePseudoOverrides()
213 for (const NamedDecl *ND : Pattern->lookup(D->getDeclName())) { in gatherTemplatePseudoOverrides()
220 if (ND->getKind() != D->getKind()) in gatherTemplatePseudoOverrides()
225 const auto *DFD = cast<FunctionDecl>(D); in gatherTemplatePseudoOverrides()
237 bool VisitFunctionDecl(const FunctionDecl *D) { in VisitFunctionDecl() argument
240 if (auto *CXXMD = dyn_cast<CXXMethodDecl>(D)) { in VisitFunctionDecl()
247 gatherTemplatePseudoOverrides(D, Relations); in VisitFunctionDecl()
248 if (const auto *Base = D->getPrimaryTemplate()) in VisitFunctionDecl()
253 TRY_DECL(D, IndexCtx.handleDecl(D, Roles, Relations)); in VisitFunctionDecl()
254 handleDeclarator(D); in VisitFunctionDecl()
256 if (const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(D)) { in VisitFunctionDecl()
264 IndexCtx.indexTypeSourceInfo(Init->getTypeSourceInfo(), D); in VisitFunctionDecl()
266 IndexCtx.handleReference(Member, Init->getMemberLocation(), D, D, in VisitFunctionDecl()
268 IndexCtx.indexBody(Init->getInit(), D, D); in VisitFunctionDecl()
271 } else if (const CXXDestructorDecl *Dtor = dyn_cast<CXXDestructorDecl>(D)) { in VisitFunctionDecl()
278 } else if (const auto *Guide = dyn_cast<CXXDeductionGuideDecl>(D)) { in VisitFunctionDecl()
285 D->getTemplateSpecializationArgsAsWritten()) { in VisitFunctionDecl()
287 handleTemplateArgumentLoc(Arg, D, D->getLexicalDeclContext()); in VisitFunctionDecl()
290 if (D->isThisDeclarationADefinition()) { in VisitFunctionDecl()
291 const Stmt *Body = D->getBody(); in VisitFunctionDecl()
293 IndexCtx.indexBody(Body, D, D); in VisitFunctionDecl()
299 bool VisitVarDecl(const VarDecl *D) { in VisitVarDecl() argument
301 gatherTemplatePseudoOverrides(D, Relations); in VisitVarDecl()
302 TRY_DECL(D, IndexCtx.handleDecl(D, SymbolRoleSet(), Relations)); in VisitVarDecl()
303 handleDeclarator(D); in VisitVarDecl()
304 IndexCtx.indexBody(D->getInit(), D); in VisitVarDecl()
308 bool VisitDecompositionDecl(const DecompositionDecl *D) { in VisitDecompositionDecl() argument
309 for (const auto *Binding : D->bindings()) in VisitDecompositionDecl()
311 return Base::VisitDecompositionDecl(D); in VisitDecompositionDecl()
314 bool VisitFieldDecl(const FieldDecl *D) { in VisitFieldDecl() argument
316 gatherTemplatePseudoOverrides(D, Relations); in VisitFieldDecl()
317 TRY_DECL(D, IndexCtx.handleDecl(D, SymbolRoleSet(), Relations)); in VisitFieldDecl()
318 handleDeclarator(D); in VisitFieldDecl()
319 if (D->isBitField()) in VisitFieldDecl()
320 IndexCtx.indexBody(D->getBitWidth(), D); in VisitFieldDecl()
321 else if (D->hasInClassInitializer()) in VisitFieldDecl()
322 IndexCtx.indexBody(D->getInClassInitializer(), D); in VisitFieldDecl()
326 bool VisitObjCIvarDecl(const ObjCIvarDecl *D) { in VisitObjCIvarDecl() argument
327 if (D->getSynthesize()) { in VisitObjCIvarDecl()
331 TRY_DECL(D, IndexCtx.handleDecl(D)); in VisitObjCIvarDecl()
332 handleDeclarator(D); in VisitObjCIvarDecl()
336 bool VisitMSPropertyDecl(const MSPropertyDecl *D) { in VisitMSPropertyDecl() argument
337 TRY_DECL(D, IndexCtx.handleDecl(D)); in VisitMSPropertyDecl()
338 handleDeclarator(D); in VisitMSPropertyDecl()
342 bool VisitEnumConstantDecl(const EnumConstantDecl *D) { in VisitEnumConstantDecl() argument
343 TRY_DECL(D, IndexCtx.handleDecl(D)); in VisitEnumConstantDecl()
344 IndexCtx.indexBody(D->getInitExpr(), D); in VisitEnumConstantDecl()
348 bool VisitTypedefNameDecl(const TypedefNameDecl *D) { in VisitTypedefNameDecl() argument
349 if (!D->isTransparentTag()) { in VisitTypedefNameDecl()
351 gatherTemplatePseudoOverrides(D, Relations); in VisitTypedefNameDecl()
352 TRY_DECL(D, IndexCtx.handleDecl(D, SymbolRoleSet(), Relations)); in VisitTypedefNameDecl()
353 IndexCtx.indexTypeSourceInfo(D->getTypeSourceInfo(), D); in VisitTypedefNameDecl()
358 bool VisitTagDecl(const TagDecl *D) { in VisitTagDecl() argument
360 if (D->isFreeStanding()) { in VisitTagDecl()
361 if (D->isThisDeclarationADefinition()) { in VisitTagDecl()
363 gatherTemplatePseudoOverrides(D, Relations); in VisitTagDecl()
364 IndexCtx.indexTagDecl(D, Relations); in VisitTagDecl()
367 gatherTemplatePseudoOverrides(D, Relations); in VisitTagDecl()
368 return IndexCtx.handleDecl(D, D->getLocation(), SymbolRoleSet(), in VisitTagDecl()
369 Relations, D->getLexicalDeclContext()); in VisitTagDecl()
392 bool VisitObjCInterfaceDecl(const ObjCInterfaceDecl *D) { in VisitObjCInterfaceDecl() argument
393 if (D->isThisDeclarationADefinition()) { in VisitObjCInterfaceDecl()
394 TRY_DECL(D, IndexCtx.handleDecl(D)); in VisitObjCInterfaceDecl()
395 SourceLocation SuperLoc = D->getSuperClassLoc(); in VisitObjCInterfaceDecl()
396 if (auto *SuperD = D->getSuperClass()) { in VisitObjCInterfaceDecl()
398 if (auto *TInfo = D->getSuperClassTInfo()) { in VisitObjCInterfaceDecl()
402 TRY_TO(IndexCtx.handleReference(TD, SuperLoc, D, D, in VisitObjCInterfaceDecl()
410 TRY_TO(IndexCtx.handleReference(SuperD, SuperLoc, D, D, superRoles, in VisitObjCInterfaceDecl()
411 SymbolRelation{(unsigned)SymbolRole::RelationBaseOf, D})); in VisitObjCInterfaceDecl()
413 TRY_TO(handleReferencedProtocols(D->getReferencedProtocols(), D, in VisitObjCInterfaceDecl()
415 TRY_TO(IndexCtx.indexDeclContext(D)); in VisitObjCInterfaceDecl()
417 return IndexCtx.handleReference(D, D->getLocation(), nullptr, in VisitObjCInterfaceDecl()
418 D->getDeclContext(), SymbolRoleSet()); in VisitObjCInterfaceDecl()
423 bool VisitObjCProtocolDecl(const ObjCProtocolDecl *D) { in VisitObjCProtocolDecl() argument
424 if (D->isThisDeclarationADefinition()) { in VisitObjCProtocolDecl()
425 TRY_DECL(D, IndexCtx.handleDecl(D)); in VisitObjCProtocolDecl()
426 TRY_TO(handleReferencedProtocols(D->getReferencedProtocols(), D, in VisitObjCProtocolDecl()
428 TRY_TO(IndexCtx.indexDeclContext(D)); in VisitObjCProtocolDecl()
430 return IndexCtx.handleReference(D, D->getLocation(), nullptr, in VisitObjCProtocolDecl()
431 D->getDeclContext(), SymbolRoleSet()); in VisitObjCProtocolDecl()
436 bool VisitObjCImplementationDecl(const ObjCImplementationDecl *D) { in VisitObjCImplementationDecl() argument
437 const ObjCInterfaceDecl *Class = D->getClassInterface(); in VisitObjCImplementationDecl()
444 TRY_DECL(D, IndexCtx.handleDecl(D)); in VisitObjCImplementationDecl()
449 for (const auto *I : D->property_impls()) { in VisitObjCImplementationDecl()
453 for (const auto *I : D->decls()) { in VisitObjCImplementationDecl()
462 bool VisitObjCCategoryDecl(const ObjCCategoryDecl *D) { in VisitObjCCategoryDecl() argument
463 if (!IndexCtx.shouldIndex(D)) in VisitObjCCategoryDecl()
465 const ObjCInterfaceDecl *C = D->getClassInterface(); in VisitObjCCategoryDecl()
468 TRY_TO(IndexCtx.handleReference(C, D->getLocation(), D, D, SymbolRoleSet(), in VisitObjCCategoryDecl()
470 (unsigned)SymbolRole::RelationExtendedBy, D in VisitObjCCategoryDecl()
472 SourceLocation CategoryLoc = D->getCategoryNameLoc(); in VisitObjCCategoryDecl()
474 CategoryLoc = D->getLocation(); in VisitObjCCategoryDecl()
475 TRY_TO(IndexCtx.handleDecl(D, CategoryLoc)); in VisitObjCCategoryDecl()
476 TRY_TO(handleReferencedProtocols(D->getReferencedProtocols(), D, in VisitObjCCategoryDecl()
478 TRY_TO(IndexCtx.indexDeclContext(D)); in VisitObjCCategoryDecl()
482 bool VisitObjCCategoryImplDecl(const ObjCCategoryImplDecl *D) { in VisitObjCCategoryImplDecl() argument
483 const ObjCCategoryDecl *Cat = D->getCategoryDecl(); in VisitObjCCategoryImplDecl()
486 const ObjCInterfaceDecl *C = D->getClassInterface(); in VisitObjCCategoryImplDecl()
488 TRY_TO(IndexCtx.handleReference(C, D->getLocation(), D, D, in VisitObjCCategoryImplDecl()
490 SourceLocation CategoryLoc = D->getCategoryNameLoc(); in VisitObjCCategoryImplDecl()
492 CategoryLoc = D->getLocation(); in VisitObjCCategoryImplDecl()
493 TRY_DECL(D, IndexCtx.handleDecl(D, CategoryLoc)); in VisitObjCCategoryImplDecl()
494 IndexCtx.indexDeclContext(D); in VisitObjCCategoryImplDecl()
498 bool VisitObjCMethodDecl(const ObjCMethodDecl *D) { in VisitObjCMethodDecl() argument
501 if (D->isPropertyAccessor()) in VisitObjCMethodDecl()
504 handleObjCMethod(D); in VisitObjCMethodDecl()
508 bool VisitObjCPropertyDecl(const ObjCPropertyDecl *D) { in VisitObjCPropertyDecl() argument
509 if (ObjCMethodDecl *MD = D->getGetterMethodDecl()) in VisitObjCPropertyDecl()
510 if (MD->getLexicalDeclContext() == D->getLexicalDeclContext()) in VisitObjCPropertyDecl()
511 handleObjCMethod(MD, D); in VisitObjCPropertyDecl()
512 if (ObjCMethodDecl *MD = D->getSetterMethodDecl()) in VisitObjCPropertyDecl()
513 if (MD->getLexicalDeclContext() == D->getLexicalDeclContext()) in VisitObjCPropertyDecl()
514 handleObjCMethod(MD, D); in VisitObjCPropertyDecl()
515 TRY_DECL(D, IndexCtx.handleDecl(D)); in VisitObjCPropertyDecl()
516 if (IBOutletCollectionAttr *attr = D->getAttr<IBOutletCollectionAttr>()) in VisitObjCPropertyDecl()
517 IndexCtx.indexTypeSourceInfo(attr->getInterfaceLoc(), D, in VisitObjCPropertyDecl()
518 D->getLexicalDeclContext(), false, true); in VisitObjCPropertyDecl()
519 IndexCtx.indexTypeSourceInfo(D->getTypeSourceInfo(), D); in VisitObjCPropertyDecl()
523 bool VisitObjCPropertyImplDecl(const ObjCPropertyImplDecl *D) { in VisitObjCPropertyImplDecl() argument
524 ObjCPropertyDecl *PD = D->getPropertyDecl(); in VisitObjCPropertyImplDecl()
525 auto *Container = cast<ObjCImplDecl>(D->getDeclContext()); in VisitObjCPropertyImplDecl()
526 SourceLocation Loc = D->getLocation(); in VisitObjCPropertyImplDecl()
530 if (ObjCIvarDecl *ID = D->getPropertyIvarDecl()) in VisitObjCPropertyImplDecl()
536 TRY_DECL(D, IndexCtx.handleDecl(D, Loc, Roles, Relations)); in VisitObjCPropertyImplDecl()
538 if (D->getPropertyImplementation() == ObjCPropertyImplDecl::Dynamic) in VisitObjCPropertyImplDecl()
541 assert(D->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize); in VisitObjCPropertyImplDecl()
552 if (ObjCIvarDecl *IvarD = D->getPropertyIvarDecl()) { in VisitObjCPropertyImplDecl()
561 SourceLocation IvarLoc = D->getPropertyIvarDeclLoc(); in VisitObjCPropertyImplDecl()
562 if (D->getLocation().isInvalid()) { in VisitObjCPropertyImplDecl()
565 } else if (D->getLocation() == IvarLoc) { in VisitObjCPropertyImplDecl()
570 IndexCtx.handleReference(IvarD, D->getPropertyIvarDeclLoc(), nullptr, in VisitObjCPropertyImplDecl()
571 D->getDeclContext(), SymbolRoleSet()); in VisitObjCPropertyImplDecl()
577 bool VisitNamespaceDecl(const NamespaceDecl *D) { in VisitNamespaceDecl() argument
578 TRY_DECL(D, IndexCtx.handleDecl(D)); in VisitNamespaceDecl()
579 IndexCtx.indexDeclContext(D); in VisitNamespaceDecl()
583 bool VisitNamespaceAliasDecl(const NamespaceAliasDecl *D) { in VisitNamespaceAliasDecl() argument
584 TRY_DECL(D, IndexCtx.handleDecl(D)); in VisitNamespaceAliasDecl()
585 IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), D); in VisitNamespaceAliasDecl()
586 IndexCtx.handleReference(D->getAliasedNamespace(), D->getTargetNameLoc(), D, in VisitNamespaceAliasDecl()
587 D->getLexicalDeclContext()); in VisitNamespaceAliasDecl()
591 bool VisitUsingDecl(const UsingDecl *D) { in VisitUsingDecl() argument
592 IndexCtx.handleDecl(D); in VisitUsingDecl()
594 const DeclContext *DC = D->getDeclContext()->getRedeclContext(); in VisitUsingDecl()
596 IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), Parent, in VisitUsingDecl()
597 D->getLexicalDeclContext()); in VisitUsingDecl()
598 for (const auto *I : D->shadows()) in VisitUsingDecl()
599 IndexCtx.handleReference(I->getUnderlyingDecl(), D->getLocation(), Parent, in VisitUsingDecl()
600 D->getLexicalDeclContext(), SymbolRoleSet()); in VisitUsingDecl()
604 bool VisitUsingDirectiveDecl(const UsingDirectiveDecl *D) { in VisitUsingDirectiveDecl() argument
605 const DeclContext *DC = D->getDeclContext()->getRedeclContext(); in VisitUsingDirectiveDecl()
610 if (!D->getParentFunctionOrMethod()) in VisitUsingDirectiveDecl()
611 IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), Parent, in VisitUsingDirectiveDecl()
612 D->getLexicalDeclContext()); in VisitUsingDirectiveDecl()
614 return IndexCtx.handleReference(D->getNominatedNamespaceAsWritten(), in VisitUsingDirectiveDecl()
615 D->getLocation(), Parent, in VisitUsingDirectiveDecl()
616 D->getLexicalDeclContext(), in VisitUsingDirectiveDecl()
620 bool VisitUnresolvedUsingValueDecl(const UnresolvedUsingValueDecl *D) { in VisitUnresolvedUsingValueDecl() argument
621 TRY_DECL(D, IndexCtx.handleDecl(D)); in VisitUnresolvedUsingValueDecl()
622 const DeclContext *DC = D->getDeclContext()->getRedeclContext(); in VisitUnresolvedUsingValueDecl()
624 IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), Parent, in VisitUnresolvedUsingValueDecl()
625 D->getLexicalDeclContext()); in VisitUnresolvedUsingValueDecl()
629 bool VisitUnresolvedUsingTypenameDecl(const UnresolvedUsingTypenameDecl *D) { in VisitUnresolvedUsingTypenameDecl() argument
630 TRY_DECL(D, IndexCtx.handleDecl(D)); in VisitUnresolvedUsingTypenameDecl()
631 const DeclContext *DC = D->getDeclContext()->getRedeclContext(); in VisitUnresolvedUsingTypenameDecl()
633 IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), Parent, in VisitUnresolvedUsingTypenameDecl()
634 D->getLexicalDeclContext()); in VisitUnresolvedUsingTypenameDecl()
639 ClassTemplateSpecializationDecl *D) { in VisitClassTemplateSpecializationDecl() argument
644 Template = D->getSpecializedTemplateOrPartial(); in VisitClassTemplateSpecializationDecl()
649 if (!D->isThisDeclarationADefinition()) in VisitClassTemplateSpecializationDecl()
650 IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), D); in VisitClassTemplateSpecializationDecl()
652 D, SymbolRelation(SymbolRoleSet(SymbolRole::RelationSpecializationOf), in VisitClassTemplateSpecializationDecl()
654 if (TypeSourceInfo *TSI = D->getTypeAsWritten()) in VisitClassTemplateSpecializationDecl()
656 D->getLexicalDeclContext()); in VisitClassTemplateSpecializationDecl()
660 static bool shouldIndexTemplateParameterDefaultValue(const NamedDecl *D) { in shouldIndexTemplateParameterDefaultValue() argument
663 if (!D) in shouldIndexTemplateParameterDefaultValue()
665 if (const auto *FD = dyn_cast<FunctionDecl>(D)) in shouldIndexTemplateParameterDefaultValue()
667 else if (const auto *TD = dyn_cast<TagDecl>(D)) in shouldIndexTemplateParameterDefaultValue()
669 else if (const auto *VD = dyn_cast<VarDecl>(D)) in shouldIndexTemplateParameterDefaultValue()
674 bool VisitTemplateDecl(const TemplateDecl *D) { in VisitTemplateDecl() argument
676 const NamedDecl *Parent = D->getTemplatedDecl(); in VisitTemplateDecl()
681 if (D->getTemplateParameters() && in VisitTemplateDecl()
683 const TemplateParameterList *Params = D->getTemplateParameters(); in VisitTemplateDecl()
704 bool VisitFriendDecl(const FriendDecl *D) { in VisitFriendDecl() argument
705 if (auto ND = D->getFriendDecl()) { in VisitFriendDecl()
712 if (isa<ClassTemplateDecl>(ND) && D->getDeclContext()->isDependentContext()) in VisitFriendDecl()
716 if (auto Ty = D->getFriendType()) { in VisitFriendDecl()
717 IndexCtx.indexTypeSourceInfo(Ty, cast<NamedDecl>(D->getDeclContext())); in VisitFriendDecl()
722 bool VisitImportDecl(const ImportDecl *D) { in VisitImportDecl() argument
723 return IndexCtx.importedModule(D); in VisitImportDecl()
726 bool VisitStaticAssertDecl(const StaticAssertDecl *D) { in VisitStaticAssertDecl() argument
727 IndexCtx.indexBody(D->getAssertExpr(), in VisitStaticAssertDecl()
728 dyn_cast<NamedDecl>(D->getDeclContext()), in VisitStaticAssertDecl()
729 D->getLexicalDeclContext()); in VisitStaticAssertDecl()
736 bool IndexingContext::indexDecl(const Decl *D) { in indexDecl() argument
737 if (D->isImplicit() && shouldIgnoreIfImplicit(D)) in indexDecl()
740 if (isTemplateImplicitInstantiation(D) && !shouldIndexImplicitInstantiation()) in indexDecl()
744 bool ShouldContinue = Visitor.Visit(D); in indexDecl()
748 if (!Visitor.Handled && isa<DeclContext>(D)) in indexDecl()
749 return indexDeclContext(cast<DeclContext>(D)); in indexDecl()
761 bool IndexingContext::indexTopLevelDecl(const Decl *D) { in indexTopLevelDecl() argument
762 if (!D || D->getLocation().isInvalid()) in indexTopLevelDecl()
765 if (isa<ObjCMethodDecl>(D)) in indexTopLevelDecl()
768 if (IndexOpts.ShouldTraverseDecl && !IndexOpts.ShouldTraverseDecl(D)) in indexTopLevelDecl()
771 return indexDecl(D); in indexTopLevelDecl()