Lines Matching +full:class +full:- +full:dg

1 //===- IndexBody.cpp - Indexing statements --------------------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
22 class BodyIndexer : public RecursiveASTVisitor<BodyIndexer> {
31 return StmtStack.size() < 2 ? nullptr : StmtStack.end()[-2]; in getParentStmt()
67 auto It = StmtStack.end()-2; in getRolesForRef()
70 if (ICE->getCastKind() == CK_LValueToRValue) in getRolesForRef()
75 --It; in getRolesForRef()
80 if (BO->getOpcode() == BO_Assign) { in getRolesForRef()
81 if (BO->getLHS()->IgnoreParenCasts() == E) in getRolesForRef()
84 if (CA->getLHS()->IgnoreParenCasts() == E) { in getRolesForRef()
90 if (UO->isIncrementDecrementOp()) { in getRolesForRef()
93 } else if (UO->getOpcode() == UO_AddrOf) { in getRolesForRef()
98 if (CE->getCallee()->IgnoreParenCasts() == E) { in getRolesForRef()
101 if (auto *CXXMD = dyn_cast_or_null<CXXMethodDecl>(ME->getMemberDecl())) in getRolesForRef()
102 if (CXXMD->isVirtual() && !ME->hasQualifier()) { in getRolesForRef()
104 auto BaseTy = ME->getBase()->IgnoreImpCasts()->getType(); in getRolesForRef()
106 if (auto *CXXRD = BaseTy->getPointeeCXXRecordDecl()) in getRolesForRef()
112 if (CXXOp->getNumArgs() > 0 && CXXOp->getArg(0)->IgnoreParenCasts() == E) { in getRolesForRef()
113 OverloadedOperatorKind Op = CXXOp->getOperator(); in getRolesForRef()
143 return IndexCtx.handleReference(E->getDecl(), E->getLocation(), in VisitDeclRefExpr()
148 return IndexCtx.handleReference(S->getLabel(), S->getLabelLoc(), Parent, in VisitGotoStmt()
154 return IndexCtx.handleDecl(S->getDecl()); in VisitLabelStmt()
159 SourceLocation Loc = E->getMemberLoc(); in VisitMemberExpr()
161 Loc = E->getBeginLoc(); in VisitMemberExpr()
164 return IndexCtx.handleReference(E->getMemberDecl(), Loc, in VisitMemberExpr()
174 T->getAs<TemplateSpecializationType>(); in indexDependentReference()
177 TemplateName TN = TST->getTemplateName(); in indexDependentReference()
182 CXXRecordDecl *RD = TD->getTemplatedDecl(); in indexDependentReference()
183 if (!RD->hasDefinition()) in indexDependentReference()
185 RD = RD->getDefinition(); in indexDependentReference()
187 RD->lookupDependentName(NameInfo.getName(), Filter); in indexDependentReference()
193 Loc = E->getBeginLoc(); in indexDependentReference()
201 const DeclarationNameInfo &Info = E->getMemberNameInfo(); in VisitCXXDependentScopeMemberExpr()
203 E, E->getBaseType().getTypePtrOrNull(), Info, in VisitCXXDependentScopeMemberExpr()
204 [](const NamedDecl *D) { return D->isCXXInstanceMember(); }); in VisitCXXDependentScopeMemberExpr()
208 const DeclarationNameInfo &Info = E->getNameInfo(); in VisitDependentScopeDeclRefExpr()
209 const NestedNameSpecifier *NNS = E->getQualifier(); in VisitDependentScopeDeclRefExpr()
211 E, NNS->getAsType(), Info, in VisitDependentScopeDeclRefExpr()
212 [](const NamedDecl *D) { return !D->isCXXInstanceMember(); }); in VisitDependentScopeDeclRefExpr()
216 for (DesignatedInitExpr::Designator &D : llvm::reverse(E->designators())) { in VisitDesignatedInitExpr()
230 return IndexCtx.handleReference(E->getDecl(), E->getLocation(), in VisitObjCIvarRefExpr()
235 auto isDynamic = [](const ObjCMessageExpr *MsgE)->bool { in VisitObjCMessageExpr()
236 if (MsgE->getReceiverKind() != ObjCMessageExpr::Instance) in VisitObjCMessageExpr()
239 MsgE->getInstanceReceiver()->IgnoreParenCasts())) { in VisitObjCMessageExpr()
240 if (RecE->getMethodFamily() == OMF_alloc) in VisitObjCMessageExpr()
246 if (ObjCMethodDecl *MD = E->getMethodDecl()) { in VisitObjCMessageExpr()
252 auto IsImplicitProperty = [](const PseudoObjectExpr *POE) -> bool { in VisitObjCMessageExpr()
253 const auto *E = POE->getSyntacticForm(); in VisitObjCMessageExpr()
255 E = BinOp->getLHS(); in VisitObjCMessageExpr()
259 if (PRE->isExplicitProperty()) in VisitObjCMessageExpr()
261 if (const ObjCMethodDecl *Getter = PRE->getImplicitPropertyGetter()) { in VisitObjCMessageExpr()
262 // Class properties that are explicitly defined using @property in VisitObjCMessageExpr()
264 // class properties. in VisitObjCMessageExpr()
265 if (Getter->isClassMethod() && in VisitObjCMessageExpr()
266 Getter->getCanonicalDecl()->findPropertyDecl()) in VisitObjCMessageExpr()
273 if ((E->isImplicit() || IsPropCall) && in VisitObjCMessageExpr()
284 if (const auto *clsD = Ty->getInterface()) { in VisitObjCMessageExpr()
288 for (const auto *protD : Ty->quals()) { in VisitObjCMessageExpr()
293 QualType recT = E->getReceiverType(); in VisitObjCMessageExpr()
294 if (const auto *Ptr = recT->getAs<ObjCObjectPointerType>()) in VisitObjCMessageExpr()
295 addReceivers(Ptr->getObjectType()); in VisitObjCMessageExpr()
297 addReceivers(recT->getAs<ObjCObjectType>()); in VisitObjCMessageExpr()
300 return IndexCtx.handleReference(MD, E->getSelectorStartLoc(), in VisitObjCMessageExpr()
307 if (E->isExplicitProperty()) { in VisitObjCPropertyRefExpr()
310 return IndexCtx.handleReference(E->getExplicitProperty(), E->getLocation(), in VisitObjCPropertyRefExpr()
312 } else if (const ObjCMethodDecl *Getter = E->getImplicitPropertyGetter()) { in VisitObjCPropertyRefExpr()
313 // Class properties that are explicitly defined using @property in VisitObjCPropertyRefExpr()
314 // declarations are represented implicitly as there is no ivar for class in VisitObjCPropertyRefExpr()
316 if (Getter->isClassMethod()) { in VisitObjCPropertyRefExpr()
317 if (const auto *PD = Getter->getCanonicalDecl()->findPropertyDecl()) { in VisitObjCPropertyRefExpr()
320 return IndexCtx.handleReference(PD, E->getLocation(), Parent, in VisitObjCPropertyRefExpr()
332 return IndexCtx.handleReference(E->getPropertyDecl(), E->getMemberLoc(), in VisitMSPropertyRefExpr()
337 return IndexCtx.handleReference(E->getProtocol(), E->getProtocolIdLoc(), in VisitObjCProtocolExpr()
346 return IndexCtx.handleReference(MD, E->getBeginLoc(), Parent, ParentDC, in passObjCLiteralMethodCall()
351 if (ObjCMethodDecl *MD = E->getBoxingMethod()) { in VisitObjCBoxedExpr()
358 if (ObjCMethodDecl *MD = E->getDictWithObjectsMethod()) { in VisitObjCDictionaryLiteral()
365 if (ObjCMethodDecl *MD = E->getArrayWithObjectsMethod()) { in VisitObjCArrayLiteral()
375 return IndexCtx.handleReference(E->getConstructor(), E->getLocation(), in VisitCXXConstructExpr()
381 if (E->getOperatorLoc().isInvalid()) in TraverseCXXOperatorCallExpr()
388 IndexCtx.indexDeclGroupRef(S->getDeclGroup()); in VisitDeclStmt()
392 DeclGroupRef DG = S->getDeclGroup(); in VisitDeclStmt() local
393 for (DeclGroupRef::iterator I = DG.begin(), E = DG.end(); I != E; ++I) { in VisitDeclStmt()
406 if (C->capturesThis() || C->capturesVLAType()) in TraverseLambdaCapture()
412 if (C->capturesVariable() && IndexCtx.shouldIndexFunctionLocalSymbols()) in TraverseLambdaCapture()
413 return IndexCtx.handleReference(C->getCapturedVar(), C->getLocation(), in TraverseLambdaCapture()
425 for (Stmt *SubStmt : Form->children()) { in TraverseInitListExpr()
432 auto visitSyntacticDesignatedInitExpr = [&](DesignatedInitExpr *E) -> bool { in TraverseInitListExpr()
433 for (DesignatedInitExpr::Designator &D : llvm::reverse(E->designators())) { in TraverseInitListExpr()
445 InitListExpr *SemaForm = S->isSemanticForm() ? S : S->getSemanticForm(); in TraverseInitListExpr()
446 InitListExpr *SyntaxForm = S->isSemanticForm() ? S->getSyntacticForm() : S; in TraverseInitListExpr()
451 for (Expr *init : SyntaxForm->inits()) { in TraverseInitListExpr()
468 for (unsigned I = 0, E = S->getNumComponents(); I != E; ++I) { in VisitOffsetOfExpr()
469 const OffsetOfNode &Component = S->getComponent(I); in VisitOffsetOfExpr()
481 const auto *DC = D->getDeclContext(); in VisitParmVarDecl()
491 for (auto *D : E->decls()) in VisitOverloadExpr()
492 IndexCtx.handleReference(D, E->getNameLoc(), Parent, ParentDC, Roles, in VisitOverloadExpr()
498 IndexCtx.handleReference(R->getNamedConcept(), R->getConceptNameLoc(), in VisitConceptSpecializationExpr()
504 IndexCtx.handleReference(C->getNamedConcept(), C->getConceptNameLoc(), in TraverseTypeConstraint()
518 DC = Parent->getLexicalDeclContext(); in indexBody()