diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-02-28 17:50:28 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-02-28 17:50:28 +0000 |
commit | d7c15a64ba8ebdca0dd48dd1d2f233107d34494e (patch) | |
tree | 917ec0b963022443a93061e805e857ee29c21e5c /tools/libclang/IndexDecl.cpp | |
parent | 165329c1d134d000904d6e08b1d166bf34e05517 (diff) |
[AST] Associate the getter/setter methods to a property of a objc class extension.
[libclang] Index the getter/setter methods of a property of a objc class extension.
Fixes rdar://10907597
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151633 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/libclang/IndexDecl.cpp')
-rw-r--r-- | tools/libclang/IndexDecl.cpp | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/tools/libclang/IndexDecl.cpp b/tools/libclang/IndexDecl.cpp index dcc9a1dca3..2bd71295e6 100644 --- a/tools/libclang/IndexDecl.cpp +++ b/tools/libclang/IndexDecl.cpp @@ -41,6 +41,24 @@ public: } } + void handleObjCMethod(ObjCMethodDecl *D) { + IndexCtx.handleObjCMethod(D); + if (D->isImplicit()) + return; + + IndexCtx.indexTypeSourceInfo(D->getResultTypeSourceInfo(), D); + for (ObjCMethodDecl::param_iterator + I = D->param_begin(), E = D->param_end(); I != E; ++I) + handleDeclarator(*I, D); + + if (D->isThisDeclarationADefinition()) { + const Stmt *Body = D->getBody(); + if (Body) { + IndexCtx.indexBody(Body, D, D); + } + } + } + bool VisitFunctionDecl(FunctionDecl *D) { IndexCtx.handleFunction(D); handleDeclarator(D); @@ -161,22 +179,22 @@ public: } bool VisitObjCMethodDecl(ObjCMethodDecl *D) { - IndexCtx.handleObjCMethod(D); - IndexCtx.indexTypeSourceInfo(D->getResultTypeSourceInfo(), D); - for (ObjCMethodDecl::param_iterator - I = D->param_begin(), E = D->param_end(); I != E; ++I) - handleDeclarator(*I, D); + // Methods associated with a property, even user-declared ones, are + // handled when we handle the property. + if (D->isSynthesized()) + return true; - if (D->isThisDeclarationADefinition()) { - const Stmt *Body = D->getBody(); - if (Body) { - IndexCtx.indexBody(Body, D, D); - } - } + handleObjCMethod(D); return true; } bool VisitObjCPropertyDecl(ObjCPropertyDecl *D) { + if (ObjCMethodDecl *MD = D->getGetterMethodDecl()) + if (MD->getLexicalDeclContext() == D->getLexicalDeclContext()) + handleObjCMethod(MD); + if (ObjCMethodDecl *MD = D->getSetterMethodDecl()) + if (MD->getLexicalDeclContext() == D->getLexicalDeclContext()) + handleObjCMethod(MD); IndexCtx.handleObjCProperty(D); IndexCtx.indexTypeSourceInfo(D->getTypeSourceInfo(), D); return true; |