[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:
Argyrios Kyrtzidis 2011-08-10 21:12:04 +00:00
Родитель cd9ae488ed
Коммит 8a4bfaa04b
2 изменённых файлов: 18 добавлений и 0 удалений

11
test/Index/get-cursor.m Normal file
Просмотреть файл

@ -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)) {