From 91efca0fa2ef5e63b48692e3439f5c6e6bde350c Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Fri, 26 Apr 2013 23:34:36 +0000 Subject: [PATCH] documenttion parsing. Provide a c-index test and limit comment extraction to public c++ bases. // rdar://13647476 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@180646 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/ASTContext.cpp | 4 +- test/Index/subclass-comment.mm | 107 +++++++++++++++++++++++++ test/Misc/ast-dump-subclass-comment.mm | 101 ----------------------- 3 files changed, 110 insertions(+), 102 deletions(-) create mode 100644 test/Index/subclass-comment.mm delete mode 100644 test/Misc/ast-dump-subclass-comment.mm diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 29f1d7bd1a..de6a30a981 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -469,7 +469,7 @@ comments::FullComment *ASTContext::getCommentForDecl( // Check non-virtual bases. for (CXXRecordDecl::base_class_const_iterator I = RD->bases_begin(), E = RD->bases_end(); I != E; ++I) { - if (I->isVirtual()) + if (I->isVirtual() || (I->getAccessSpecifier() != AS_public)) continue; QualType Ty = I->getType(); if (Ty.isNull()) @@ -485,6 +485,8 @@ comments::FullComment *ASTContext::getCommentForDecl( // Check virtual bases. for (CXXRecordDecl::base_class_const_iterator I = RD->vbases_begin(), E = RD->vbases_end(); I != E; ++I) { + if (I->getAccessSpecifier() != AS_public) + continue; QualType Ty = I->getType(); if (Ty.isNull()) continue; diff --git a/test/Index/subclass-comment.mm b/test/Index/subclass-comment.mm new file mode 100644 index 0000000000..9682a9f71d --- /dev/null +++ b/test/Index/subclass-comment.mm @@ -0,0 +1,107 @@ +// 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://13647476 + +//! NSObject is root of all. +@interface NSObject +@end +// CHECK: CommentAST=[ +// CHECK-NEXT: (CXComment_FullComment +// CHECK-NEXT: (CXComment_Paragraph +// CHECK-NEXT: (CXComment_Text Text=[ NSObject is root of all.])))] + +//! An umbrella class for super classes. +@interface SuperClass +@end +// CHECK: CommentAST=[ +// CHECK-NEXT: (CXComment_FullComment +// CHECK-NEXT: (CXComment_Paragraph +// CHECK-NEXT: (CXComment_Text Text=[ An umbrella class for super classes.])))] + +@interface SubClass : SuperClass +@end +// CHECK: CommentAST=[ +// CHECK-NEXT: (CXComment_FullComment +// CHECK-NEXT: (CXComment_Paragraph +// CHECK-NEXT: (CXComment_Text Text=[ An umbrella class for super classes.])))] + +@interface SubSubClass : SubClass +@end +// CHECK: CommentAST=[ +// CHECK-NEXT: (CXComment_FullComment +// CHECK-NEXT: (CXComment_Paragraph +// CHECK-NEXT: (CXComment_Text Text=[ An umbrella class for super classes.])))] + +@interface SubSubClass (Private) +@end +// CHECK: CommentAST=[ +// CHECK-NEXT: (CXComment_FullComment +// CHECK-NEXT: (CXComment_Paragraph +// CHECK-NEXT: (CXComment_Text Text=[ An umbrella class for super classes.])))] + +//! Something valuable to the organization. +class Asset { +}; +// CHECK: CommentAST=[ +// CHECK-NEXT: (CXComment_FullComment +// CHECK-NEXT: (CXComment_Paragraph +// CHECK-NEXT: (CXComment_Text Text=[ Something valuable to the organization.])))] + +//! An individual human or human individual. +class Person : public Asset { +}; +// CHECK: CommentAST=[ +// CHECK-NEXT: (CXComment_FullComment +// CHECK-NEXT: (CXComment_Paragraph +// CHECK-NEXT: (CXComment_Text Text=[ An individual human or human individual.])))] + +class Student : public Person { +}; +// CHECK: CommentAST=[ +// CHECK-NEXT: (CXComment_FullComment +// CHECK-NEXT: (CXComment_Paragraph +// CHECK-NEXT: (CXComment_Text Text=[ An individual human or human individual.])))] + +//! Every thing is a part +class Parts { +}; +// CHECK: CommentAST=[ +// CHECK-NEXT: (CXComment_FullComment +// CHECK-NEXT: (CXComment_Paragraph +// CHECK-NEXT: (CXComment_Text Text=[ Every thing is a part])))] + +class Window : public virtual Parts { +}; +// CHECK: CommentAST=[ +// CHECK-NEXT: (CXComment_FullComment +// CHECK-NEXT: (CXComment_Paragraph +// CHECK-NEXT: (CXComment_Text Text=[ Every thing is a part])))] + +class Door : public virtual Parts { +}; +// CHECK: CommentAST=[ +// CHECK-NEXT: (CXComment_FullComment +// CHECK-NEXT: (CXComment_Paragraph +// CHECK-NEXT: (CXComment_Text Text=[ Every thing is a part])))] + +class House : public Window, Door { +}; +// CHECK: CommentAST=[ +// CHECK-NEXT: (CXComment_FullComment +// CHECK-NEXT: (CXComment_Paragraph +// CHECK-NEXT: (CXComment_Text Text=[ Every thing is a part])))] + +//! Any Material +class Material : virtual Parts { +}; + +class Building : Window, public Material { +}; +// CHECK: CommentAST=[ +// CHECK-NEXT: (CXComment_FullComment +// CHECK-NEXT: (CXComment_Paragraph +// CHECK-NEXT: (CXComment_Text Text=[ Any Material])))] + + diff --git a/test/Misc/ast-dump-subclass-comment.mm b/test/Misc/ast-dump-subclass-comment.mm deleted file mode 100644 index 4e05a2a612..0000000000 --- a/test/Misc/ast-dump-subclass-comment.mm +++ /dev/null @@ -1,101 +0,0 @@ -// RUN: %clang_cc1 -x objective-c++ -Wdocumentation -ast-dump %s | FileCheck %s -// rdar://13647476 - -//! NSObject is root of all. -@interface NSObject -@end -// CHECK: ObjCInterfaceDecl{{.*}}NSObject -// CHECK-NEXT: FullComment 0x{{[^ ]*}} -// CHECK-NEXT: ParagraphComment{{.*}} -// CHECK-NEXT: TextComment{{.*}} Text=" NSObject is root of all." - -//! An umbrella class for super classes. -@interface SuperClass -@end -// CHECK: ObjCInterfaceDecl{{.*}}SuperClass -// CHECK-NEXT: FullComment 0x{{[^ ]*}} -// CHECK-NEXT: ParagraphComment{{.*}} -// CHECK-NEXT: TextComment{{.*}} Text=" An umbrella class for super classes." - -@interface SubClass : SuperClass -@end -// CHECK: ObjCInterfaceDecl 0x{{[^ ]*}} SubClass -// CHECK-NEXT: ObjCInterface 0x{{[^ ]*}} 'SuperClass' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} -// CHECK-NEXT: TextComment{{.*}} Text=" An umbrella class for super classes." - -@interface SubSubClass : SubClass -@end -// CHECK: ObjCInterfaceDecl 0x{{[^ ]*}} SubSubClass -// CHECK-NEXT: ObjCInterface{{.*}} 'SubClass' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} -// CHECK-NEXT: TextComment{{.*}} Text=" An umbrella class for super classes." - -@interface SubSubClass (Private) -@end -// CHECK: ObjCCategoryDecl 0x{{[^ ]*}} Private -// CHECK-NEXT: ObjCInterface{{.*}} 'SubSubClass' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} -// CHECK-TEXT: TextComment{{.*}} Text=" An umbrella class for super classes." - -//! Something valuable to the organization. -class Asset { - -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} class Asset -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} -// CHECK-NEXT: TextComment{{.*}} Text=" Something valuable to the organization." - -//! An individual human or human individual. -class Person : public Asset { -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} class Person -// CHECK-NEXT: public 'class Asset' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} -// CHECK-NEXT: TextComment{{.*}} Text=" An individual human or human individual." - -class Student : public Person { -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} class Student -// CHECK-NEXT: public 'class Person' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} -// CHECK-NEXT: TextComment{{.*}} Text=" An individual human or human individual." - -//! Every thing is a part -class Parts { -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} class Parts -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} -// CHECK-NEXT: TextComment{{.*}} Text=" Every thing is a part" - -class Window : virtual Parts { -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} class Window -// CHECK-NEXT: virtual private 'class Parts' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} -// CHECK-NEXT: TextComment{{.*}} Text=" Every thing is a part" - -class Door : virtual Parts { -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} class Door -// CHECK-NEXT: virtual private 'class Parts' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} -// CHECK-NEXT: TextComment{{.*}} Text=" Every thing is a part" - -class House : Window, Door { -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} class House -// CHECK-NEXT: private 'class Window' -// CHECK-NEXT: private 'class Door' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} -// CHECK-NEXT: TextComment{{.*}} Text=" Every thing is a part" -- 2.40.0