[libclang] When pointing at an objc property don't return a cursor that points at the
synthesized method for the property. rdar://9771715 llvm-svn: 137248
This commit is contained in:
parent
5207a340e5
commit
5431380dd4
|
@ -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)) {
|
||||
|
|
Loading…
Reference in New Issue