From: Alex Lorenz Date: Thu, 18 May 2017 10:43:11 +0000 (+0000) Subject: [index] Record references to class receivers used in property references X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d195511ec29636a6c2dd936b8c0a7c218d62cb1e;p=clang [index] Record references to class receivers used in property references rdar://32250025 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@303343 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Index/IndexBody.cpp b/lib/Index/IndexBody.cpp index 08d233fb83..efa5ed85d6 100644 --- a/lib/Index/IndexBody.cpp +++ b/lib/Index/IndexBody.cpp @@ -246,6 +246,9 @@ public: } bool VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) { + if (E->isClassReceiver()) + IndexCtx.handleReference(E->getClassReceiver(), E->getReceiverLocation(), + Parent, ParentDC); if (E->isExplicitProperty()) { SmallVector Relations; SymbolRoleSet Roles = getRolesForRef(E, Relations); diff --git a/test/Index/Core/index-source.m b/test/Index/Core/index-source.m index 041753b953..7c2f753e71 100644 --- a/test/Index/Core/index-source.m +++ b/test/Index/Core/index-source.m @@ -385,3 +385,22 @@ Separate separateT; // CHECK: [[@LINE-1]]:1 | type-alias/C | Separate | {{.*}} | {{.*}} | Ref,RelCont | rel: 1 struct Separate separateE; // CHECK: [[@LINE-1]]:8 | struct/C | Separate | {{.*}} | {{.*}} | Ref,RelCont | rel: 1 + +@interface ClassReceivers + +@property(class) int p1; ++ (int)implicit; ++ (void)setImplicit:(int)x; + +@end + +void classReceivers() { + ClassReceivers.p1 = 0; +// CHECK: [[@LINE-1]]:3 | class/ObjC | ClassReceivers | c:objc(cs)ClassReceivers | _OBJC_CLASS_$_ClassReceivers | Ref,RelCont | rel: 1 + (void)ClassReceivers.p1; +// CHECK: [[@LINE-1]]:9 | class/ObjC | ClassReceivers | c:objc(cs)ClassReceivers | _OBJC_CLASS_$_ClassReceivers | Ref,RelCont | rel: 1 + ClassReceivers.implicit = 0; +// CHECK: [[@LINE-1]]:3 | class/ObjC | ClassReceivers | c:objc(cs)ClassReceivers | _OBJC_CLASS_$_ClassReceivers | Ref,RelCont | rel: 1 + (void)ClassReceivers.implicit; +// CHECK: [[@LINE-1]]:9 | class/ObjC | ClassReceivers | c:objc(cs)ClassReceivers | _OBJC_CLASS_$_ClassReceivers | Ref,RelCont | rel: 1 +}