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
This commit is contained in:
Fariborz Jahanian 2013-03-22 17:55:27 +00:00
Родитель 82f0aff67d
Коммит c02ddb23c0
3 изменённых файлов: 19 добавлений и 0 удалений

Просмотреть файл

@ -632,6 +632,7 @@ public:
/// \brief Add the parent context information to this code completion. /// \brief Add the parent context information to this code completion.
void addParentContext(const DeclContext *DC); void addParentContext(const DeclContext *DC);
const char *getBriefComment() const { return BriefComment; }
void addBriefComment(StringRef Comment); void addBriefComment(StringRef Comment);
StringRef getParentName() const { return ParentName; } StringRef getParentName() const { return ParentName; }

Просмотреть файл

@ -2541,6 +2541,20 @@ CodeCompletionResult::CreateCodeCompletionString(ASTContext &Ctx,
if (Declaration) { if (Declaration) {
Result.addParentContext(Declaration->getDeclContext()); Result.addParentContext(Declaration->getDeclContext());
Pattern->ParentName = Result.getParentName(); 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; return Pattern;

Просмотреть файл

@ -49,6 +49,7 @@
p = [self PropertyInPrimaryClass]; p = [self PropertyInPrimaryClass];
p = [self Record]; p = [self Record];
[self setThisRecord : (id)0 ]; [self setThisRecord : (id)0 ];
p = self.GetterInClassExtension;
return 0; return 0;
} }
@end @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 // 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) // 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)