forked from OSchip/llvm-project
comment parsing: when property accessors don't have comment
of their own (or are syntheszed), use prperty's comment. for them. // rdar://12791315 llvm-svn: 172278
This commit is contained in:
parent
03872a3a2e
commit
37494a176c
|
@ -413,7 +413,16 @@ comments::FullComment *ASTContext::getCommentForDecl(
|
|||
if (!RC) {
|
||||
if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {
|
||||
SmallVector<const NamedDecl*, 8> Overridden;
|
||||
if (const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(D))
|
||||
const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(D);
|
||||
if (OMD && OMD->isPropertyAccessor()) {
|
||||
if (const ObjCPropertyDecl *PDecl = OMD->findPropertyDecl()) {
|
||||
if (comments::FullComment *FC = getCommentForDecl(PDecl, PP)) {
|
||||
comments::FullComment *CFC = cloneFullComment(FC, D);
|
||||
return CFC;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (OMD)
|
||||
addRedeclaredMethods(OMD, Overridden);
|
||||
getOverriddenMethods(dyn_cast<NamedDecl>(D), Overridden);
|
||||
for (unsigned i = 0, e = Overridden.size(); i < e; i++) {
|
||||
|
|
|
@ -947,6 +947,11 @@ ObjCMethodDecl::findPropertyDecl(bool CheckOverrides) const {
|
|||
|
||||
if (isPropertyAccessor()) {
|
||||
const ObjCContainerDecl *Container = cast<ObjCContainerDecl>(getParent());
|
||||
// If container is class extension, find its primary class.
|
||||
if (const ObjCCategoryDecl *CatDecl = dyn_cast<ObjCCategoryDecl>(Container))
|
||||
if (CatDecl->IsClassExtension())
|
||||
Container = CatDecl->getClassInterface();
|
||||
|
||||
bool IsGetter = (NumArgs == 0);
|
||||
|
||||
for (ObjCContainerDecl::prop_iterator I = Container->prop_begin(),
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
// RUN: rm -rf %t
|
||||
// RUN: mkdir %t
|
||||
// RUN: c-index-test -test-load-source all -comments-xml-schema=%S/../../bindings/xml/comment-xml-schema.rng %s > %t/out
|
||||
// RUN: FileCheck %s < %t/out
|
||||
// rdar://12378879
|
||||
|
||||
// Ensure that XML we generate is not invalid.
|
||||
// RUN: FileCheck %s -check-prefix=WRONG < %t/out
|
||||
// WRONG-NOT: CommentXMLInvalid
|
||||
|
||||
@interface AppDelegate
|
||||
/**
|
||||
\brief This is ReadonlyProperty
|
||||
*/
|
||||
@property (readonly, getter = ReadonlyGetter) int MyProperty;
|
||||
// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}annotate-comments-property-accessor.m" line="[[@LINE-1]]" column="51"><Name>MyProperty</Name><USR>c:objc(cs)AppDelegate(py)MyProperty</USR><Declaration>- (int)ReadonlyGetter;</Declaration><Abstract><Para> This is ReadonlyProperty</Para></Abstract></Function>]
|
||||
|
||||
/**
|
||||
\brief This is GeneralProperty
|
||||
*/
|
||||
@property int GeneralProperty;
|
||||
// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}annotate-comments-property-accessor.m" line="[[@LINE-1]]" column="15"><Name>GeneralProperty</Name><USR>c:objc(cs)AppDelegate(py)GeneralProperty</USR><Declaration>- (int)GeneralProperty;</Declaration><Abstract><Para> This is GeneralProperty</Para></Abstract></Function>]
|
||||
// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}annotate-comments-property-accessor.m" line="[[@LINE-2]]" column="15"><Name>GeneralProperty</Name><USR>c:objc(cs)AppDelegate(py)GeneralProperty</USR><Declaration>- (void)setGeneralProperty:(int)GeneralProperty;</Declaration><Abstract><Para> This is GeneralProperty</Para></Abstract></Function>]
|
||||
|
||||
/**
|
||||
\brief This is PropertyInPrimaryClass
|
||||
*/
|
||||
@property (copy, nonatomic) id PropertyInPrimaryClass;
|
||||
- (void) setThisRecord : (id)arg;
|
||||
- (id) Record;
|
||||
@end
|
||||
// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}annotate-comments-property-accessor.m" line="[[@LINE-4]]" column="32"><Name>PropertyInPrimaryClass</Name><USR>c:objc(cs)AppDelegate(py)PropertyInPrimaryClass</USR><Declaration>- (id)PropertyInPrimaryClass;</Declaration><Abstract><Para> This is PropertyInPrimaryClass</Para></Abstract></Function>]
|
||||
// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}annotate-comments-property-accessor.m" line="[[@LINE-5]]" column="32"><Name>PropertyInPrimaryClass</Name><USR>c:objc(cs)AppDelegate(py)PropertyInPrimaryClass</USR><Declaration>- (void)setPropertyInPrimaryClass:(id)PropertyInPrimaryClass;</Declaration><Abstract><Para> This is PropertyInPrimaryClass</Para></Abstract></Function>]
|
||||
|
||||
@interface AppDelegate()
|
||||
- (id) GetterInClassExtension;
|
||||
/**
|
||||
\brief This is Record
|
||||
*/
|
||||
@property (copy, setter = setThisRecord:) id Record;
|
||||
@end
|
||||
// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}annotate-comments-property-accessor.m" line="[[@LINE-6]]" column="1"><Name>PropertyInClassExtension</Name><USR>c:objc(cs)AppDelegate(py)PropertyInClassExtension</USR><Declaration>- (id)GetterInClassExtension;</Declaration><Abstract><Para> This is PropertyInClassExtension</Para></Abstract></Function>]
|
||||
|
||||
@interface AppDelegate()
|
||||
/**
|
||||
\brief This is PropertyInClassExtension
|
||||
*/
|
||||
@property (copy, getter = GetterInClassExtension) id PropertyInClassExtension;
|
||||
|
||||
- (id) PropertyInPrimaryClass;
|
||||
@end
|
||||
// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}annotate-comments-property-accessor.m" line="[[@LINE-4]]" column="54"><Name>PropertyInClassExtension</Name><USR>c:objc(cs)AppDelegate(py)PropertyInClassExtension</USR><Declaration>- (id)GetterInClassExtension;</Declaration><Abstract><Para> This is PropertyInClassExtension</Para></Abstract></Function>]
|
||||
// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}annotate-comments-property-accessor.m" line="[[@LINE-5]]" column="54"><Name>PropertyInClassExtension</Name><USR>c:objc(cs)AppDelegate(py)PropertyInClassExtension</USR><Declaration>- (void)setPropertyInClassExtension:(id)PropertyInClassExtension;</Declaration><Abstract><Para> This is PropertyInClassExtension</Para></Abstract></Function>]
|
||||
|
||||
@implementation AppDelegate
|
||||
- (id) PropertyInPrimaryClass { return 0; }
|
||||
@end
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue