Attach enum's documentation to its typedef if

latter does not have one of its own. // rdar://13067629


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173516 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Fariborz Jahanian 2013-01-25 22:48:32 +00:00
Родитель d5617eeafc
Коммит 41170b55ba
2 изменённых файлов: 40 добавлений и 0 удалений

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

@ -434,6 +434,16 @@ comments::FullComment *ASTContext::getCommentForDecl(
} }
} }
} }
else if (const TypedefDecl *TD = dyn_cast<TypedefDecl>(D)) {
QualType QT = TD->getUnderlyingType();
if (const EnumType *ET = QT->getAs<EnumType>()) {
if (const EnumDecl *ED = ET->getDecl())
if (comments::FullComment *FC = getCommentForDecl(ED, PP)) {
comments::FullComment *CFC = cloneFullComment(FC, D);
return CFC;
}
}
}
return NULL; return NULL;
} }

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

@ -0,0 +1,30 @@
// 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://13067629
// Ensure that XML we generate is not invalid.
// RUN: FileCheck %s -check-prefix=WRONG < %t/out
// WRONG-NOT: CommentXMLInvalid
/** Documentation for NSUInteger */
typedef unsigned int NSUInteger;
/** Documentation for MyEnum */
typedef enum : NSUInteger {
MyEnumFoo, /**< value Foo */
MyEnumBar, /**< value Bar */
MyEnumBaz, /**< value Baz */
} MyEnum;
// CHECK: TypedefDecl=MyEnum:[[@LINE-1]]:3 (Definition) FullCommentAsHTML=[<p class="para-brief"> Documentation for MyEnum </p>] FullCommentAsXML=[<Typedef file="{{[^"]+}}annotate-comments-typedef.m" line="[[@LINE-1]]" column="3"><Name>&lt;anonymous&gt;</Name><USR>c:@EA@MyEnum</USR><Declaration>typedef enum MyEnum MyEnum</Declaration><Abstract><Para> Documentation for MyEnum </Para></Abstract></Typedef>] CommentXMLValid
/** Documentation for E */
enum E {
MyEnumFoo, /**< value Foo */
MyEnumBar, /**< value Bar */
MyEnumBaz, /**< value Baz */
};
typedef enum E E_T;
// CHECK: TypedefDecl=E_T:[[@LINE-1]]:16 (Definition) FullCommentAsHTML=[<p class="para-brief"> Documentation for E </p>] FullCommentAsXML=[<Typedef file="{{[^"]+}}annotate-comments-typedef.m" line="[[@LINE-1]]" column="16"><Name>E</Name><USR>c:@E@E</USR><Declaration>typedef enum E E_T</Declaration><Abstract><Para> Documentation for E </Para></Abstract></Typedef>] CommentXMLValid