diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2013-03-22 17:55:27 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2013-03-22 17:55:27 +0000 |
commit | c02ddb23c0a27ff95859b3eacab134613b0b1d1d (patch) | |
tree | 100e8fc8882e9bac9369263ee425882446291b36 | |
parent | 82f0aff67d39c64805a048abfd9c91e72a5302b0 (diff) |
documentation parsing. Provide code completion comment
for self.GetterName where GetterName is the getter method
for a property with name different from the property name
(declared via a property getter attribute) // rdar://12791315
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177744 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Sema/CodeCompleteConsumer.h | 1 | ||||
-rw-r--r-- | lib/Sema/SemaCodeComplete.cpp | 14 | ||||
-rw-r--r-- | test/Index/complete-documentation-properties.m | 4 |
3 files changed, 19 insertions, 0 deletions
diff --git a/include/clang/Sema/CodeCompleteConsumer.h b/include/clang/Sema/CodeCompleteConsumer.h index 307dd57e10..a1ddec7520 100644 --- a/include/clang/Sema/CodeCompleteConsumer.h +++ b/include/clang/Sema/CodeCompleteConsumer.h @@ -632,6 +632,7 @@ public: /// \brief Add the parent context information to this code completion. void addParentContext(const DeclContext *DC); + const char *getBriefComment() const { return BriefComment; } void addBriefComment(StringRef Comment); StringRef getParentName() const { return ParentName; } diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp index 6bb954315a..1cb264265a 100644 --- a/lib/Sema/SemaCodeComplete.cpp +++ b/lib/Sema/SemaCodeComplete.cpp @@ -2541,6 +2541,20 @@ CodeCompletionResult::CreateCodeCompletionString(ASTContext &Ctx, if (Declaration) { Result.addParentContext(Declaration->getDeclContext()); Pattern->ParentName = Result.getParentName(); + // Provide code completion comment for self.GetterName where + // GetterName is the getter method for a property with name + // different from the property name (declared via a property + // getter attribute. + const NamedDecl *ND = Declaration; + if (const ObjCMethodDecl *M = dyn_cast<ObjCMethodDecl>(ND)) + if (M->isPropertyAccessor()) + if (const ObjCPropertyDecl *PDecl = M->findPropertyDecl()) + if (PDecl->getGetterName() == M->getSelector() && + PDecl->getIdentifier() != M->getIdentifier()) + if (const RawComment *RC = Ctx.getRawCommentForAnyRedecl(PDecl)) { + Result.addBriefComment(RC->getBriefText(Ctx)); + Pattern->BriefComment = Result.getBriefComment(); + } } return Pattern; diff --git a/test/Index/complete-documentation-properties.m b/test/Index/complete-documentation-properties.m index d423f84d22..ea41d958da 100644 --- a/test/Index/complete-documentation-properties.m +++ b/test/Index/complete-documentation-properties.m @@ -49,6 +49,7 @@ p = [self PropertyInPrimaryClass]; p = [self Record]; [self setThisRecord : (id)0 ]; + p = self.GetterInClassExtension; return 0; } @end @@ -66,3 +67,6 @@ // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:51:9 %s | FileCheck -check-prefix=CC5 %s // CHECK-CC5: {TypedText setThisRecord:}{Placeholder (id)}{{.*}}(brief comment: This is Record) + +// RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:52:12 %s | FileCheck -check-prefix=CC6 %s +// CHECK-CC6: {TypedText GetterInClassExtension}{{.*}}(brief comment: This is PropertyInClassExtension) |