diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2013-04-26 23:34:36 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2013-04-26 23:34:36 +0000 |
commit | 91efca0fa2ef5e63b48692e3439f5c6e6bde350c (patch) | |
tree | b5f5248c4c69b4abd89197c4e3522f928c5bd4c0 | |
parent | fff418b1abea921685a1175a8ee0b597594bddc1 (diff) |
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
-rw-r--r-- | lib/AST/ASTContext.cpp | 4 | ||||
-rw-r--r-- | test/Index/subclass-comment.mm | 107 | ||||
-rw-r--r-- | test/Misc/ast-dump-subclass-comment.mm | 101 |
3 files changed, 110 insertions, 102 deletions
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{{[^ ]*}} <line:[[@LINE-4]]:4, col:28> -// CHECK-NEXT: ParagraphComment{{.*}} <col:4, col:28> -// CHECK-NEXT: TextComment{{.*}} <col:4, col:28> Text=" NSObject is root of all." - -//! An umbrella class for super classes. -@interface SuperClass -@end -// CHECK: ObjCInterfaceDecl{{.*}}SuperClass -// CHECK-NEXT: FullComment 0x{{[^ ]*}} <line:[[@LINE-4]]:4, col:40> -// CHECK-NEXT: ParagraphComment{{.*}} <col:4, col:40> -// CHECK-NEXT: TextComment{{.*}} <col:4, col:40> Text=" An umbrella class for super classes." - -@interface SubClass : SuperClass -@end -// CHECK: ObjCInterfaceDecl 0x{{[^ ]*}} <line:[[@LINE-2]]:1, line:[[@LINE-1]]:2> SubClass -// CHECK-NEXT: ObjCInterface 0x{{[^ ]*}} 'SuperClass' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} <col:4, col:40> -// CHECK-NEXT: TextComment{{.*}} <col:4, col:40> Text=" An umbrella class for super classes." - -@interface SubSubClass : SubClass -@end -// CHECK: ObjCInterfaceDecl 0x{{[^ ]*}} <line:[[@LINE-2]]:1, line:[[@LINE-1]]:2> SubSubClass -// CHECK-NEXT: ObjCInterface{{.*}} 'SubClass' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} <col:4, col:40> -// CHECK-NEXT: TextComment{{.*}} <col:4, col:40> Text=" An umbrella class for super classes." - -@interface SubSubClass (Private) -@end -// CHECK: ObjCCategoryDecl 0x{{[^ ]*}} <line:[[@LINE-2]]:1, line:[[@LINE-1]]:2> Private -// CHECK-NEXT: ObjCInterface{{.*}} 'SubSubClass' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} <col:4, col:40> -// CHECK-TEXT: TextComment{{.*}} <col:4, col:40> Text=" An umbrella class for super classes." - -//! Something valuable to the organization. -class Asset { - -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-3]]:1, line:[[@LINE-1]]:1> class Asset -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} <col:4, col:43> -// CHECK-NEXT: TextComment{{.*}} <col:4, col:43> Text=" Something valuable to the organization." - -//! An individual human or human individual. -class Person : public Asset { -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-2]]:1, line:[[@LINE-1]]:1> class Person -// CHECK-NEXT: public 'class Asset' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} <col:4, col:44> -// CHECK-NEXT: TextComment{{.*}} <col:4, col:44> Text=" An individual human or human individual." - -class Student : public Person { -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-2]]:1, line:[[@LINE-1]]:1> class Student -// CHECK-NEXT: public 'class Person' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} <col:4, col:44> -// CHECK-NEXT: TextComment{{.*}} <col:4, col:44> Text=" An individual human or human individual." - -//! Every thing is a part -class Parts { -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-2]]:1, line:[[@LINE-1]]:1> class Parts -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} <col:4, col:25> -// CHECK-NEXT: TextComment{{.*}} <col:4, col:25> Text=" Every thing is a part" - -class Window : virtual Parts { -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-2]]:1, line:[[@LINE-1]]:1> class Window -// CHECK-NEXT: virtual private 'class Parts' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} <col:4, col:25> -// CHECK-NEXT: TextComment{{.*}} <col:4, col:25> Text=" Every thing is a part" - -class Door : virtual Parts { -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-2]]:1, line:[[@LINE-1]]:1> class Door -// CHECK-NEXT: virtual private 'class Parts' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} <col:4, col:25> -// CHECK-NEXT: TextComment{{.*}} <col:4, col:25> Text=" Every thing is a part" - -class House : Window, Door { -}; -// CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-2]]:1, line:[[@LINE-1]]:1> class House -// CHECK-NEXT: private 'class Window' -// CHECK-NEXT: private 'class Door' -// CHECK-NEXT: FullComment -// CHECK-NEXT: ParagraphComment{{.*}} <col:4, col:25> -// CHECK-NEXT: TextComment{{.*}} <col:4, col:25> Text=" Every thing is a part" |