forked from OSchip/llvm-project
[libclang] When indexing a @synthesize, don't consider that it defines a getter/setter if one is already defined by the user.
Fixes rdar://13925258 llvm-svn: 182895
This commit is contained in:
parent
63e6d21c72
commit
55fb21efbb
|
@ -33,6 +33,21 @@ int test1() {
|
|||
return extfn();
|
||||
}
|
||||
|
||||
@interface I4
|
||||
@property (assign, nonatomic) id prop;
|
||||
-(id)prop;
|
||||
-(void)setProp:(id)p;
|
||||
@end
|
||||
|
||||
@implementation I4
|
||||
@synthesize prop = _prop;
|
||||
-(id)prop {
|
||||
return 0;
|
||||
}
|
||||
-(void)setProp:(id)p {
|
||||
}
|
||||
@end
|
||||
|
||||
// RUN: c-index-test -index-file %s -target x86_64-apple-macosx10.7 > %t
|
||||
// RUN: FileCheck %s -input-file=%t
|
||||
// CHECK: [indexDeclaration]: kind: objc-class | name: I | {{.*}} | loc: 1:12
|
||||
|
@ -54,3 +69,7 @@ int test1() {
|
|||
// CHECK: [indexEntityReference]: kind: variable | name: extvar | {{.*}} | loc: 31:3
|
||||
// CHECK: [indexDeclaration]: kind: function | name: extfn | {{.*}} | loc: 32:14
|
||||
// CHECK: [indexEntityReference]: kind: function | name: extfn | {{.*}} | loc: 33:10
|
||||
|
||||
// CHECK: [indexDeclaration]: kind: objc-class | name: I4 | {{.*}} | loc: 36:12
|
||||
// CHECK-NOT: [indexDeclaration]: kind: objc-instance-method {{.*}} loc: 37:
|
||||
// CHECK-NOT: [indexDeclaration]: kind: objc-instance-method {{.*}} loc: 43:
|
||||
|
|
|
@ -22,6 +22,15 @@ public:
|
|||
explicit IndexingDeclVisitor(IndexingContext &indexCtx)
|
||||
: IndexCtx(indexCtx) { }
|
||||
|
||||
/// \brief Returns true if the given method has been defined explicitly by the
|
||||
/// user.
|
||||
static bool hasUserDefined(const ObjCMethodDecl *D,
|
||||
const ObjCImplDecl *Container) {
|
||||
const ObjCMethodDecl *MD = Container->getMethod(D->getSelector(),
|
||||
D->isInstanceMethod());
|
||||
return MD && !MD->isImplicit() && MD->isThisDeclarationADefinition();
|
||||
}
|
||||
|
||||
void handleDeclarator(const DeclaratorDecl *D, const NamedDecl *Parent = 0) {
|
||||
if (!Parent) Parent = D;
|
||||
|
||||
|
@ -234,12 +243,14 @@ public:
|
|||
}
|
||||
|
||||
if (ObjCMethodDecl *MD = PD->getGetterMethodDecl()) {
|
||||
if (MD->isPropertyAccessor())
|
||||
if (MD->isPropertyAccessor() &&
|
||||
!hasUserDefined(MD, cast<ObjCImplDecl>(D->getDeclContext())))
|
||||
IndexCtx.handleSynthesizedObjCMethod(MD, D->getLocation(),
|
||||
D->getLexicalDeclContext());
|
||||
}
|
||||
if (ObjCMethodDecl *MD = PD->getSetterMethodDecl()) {
|
||||
if (MD->isPropertyAccessor())
|
||||
if (MD->isPropertyAccessor() &&
|
||||
!hasUserDefined(MD, cast<ObjCImplDecl>(D->getDeclContext())))
|
||||
IndexCtx.handleSynthesizedObjCMethod(MD, D->getLocation(),
|
||||
D->getLexicalDeclContext());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue