зеркало из https://github.com/microsoft/clang.git
[libclang] When pointing at an objc property don't return a cursor that points at the
synthesized method for the property. rdar://9771715 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137248 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
cd9ae488ed
Коммит
8a4bfaa04b
|
@ -0,0 +1,11 @@
|
|||
// Test is line- and column-sensitive. Run lines are below.
|
||||
|
||||
@interface rdar9771715
|
||||
@property (readonly) int foo1;
|
||||
@property (readwrite) int foo2;
|
||||
@end
|
||||
|
||||
// RUN: c-index-test -cursor-at=%s:4:28 %s | FileCheck -check-prefix=CHECK-PROP1 %s
|
||||
// RUN: c-index-test -cursor-at=%s:5:28 %s | FileCheck -check-prefix=CHECK-PROP2 %s
|
||||
// CHECK-PROP1: ObjCPropertyDecl=foo1:4:26
|
||||
// CHECK-PROP2: ObjCPropertyDecl=foo2:5:27
|
|
@ -3471,6 +3471,13 @@ enum CXChildVisitResult GetCursorVisitor(CXCursor cursor,
|
|||
CXClientData client_data) {
|
||||
GetCursorData *Data = static_cast<GetCursorData *>(client_data);
|
||||
CXCursor *BestCursor = &Data->BestCursor;
|
||||
|
||||
if (clang_isDeclaration(cursor.kind)) {
|
||||
// Avoid having the synthesized methods override the property decls.
|
||||
if (ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(getCursorDecl(cursor)))
|
||||
if (MD->isSynthesized())
|
||||
return CXChildVisit_Break;
|
||||
}
|
||||
|
||||
if (clang_isExpression(cursor.kind) &&
|
||||
clang_isDeclaration(BestCursor->kind)) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче