xref: /aosp_15_r20/external/clang/test/Index/overriding-method-comments.mm (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: rm -rf %t
2*67e74705SXin Li// RUN: mkdir %t
3*67e74705SXin Li// RUN: c-index-test -test-load-source all -comments-xml-schema=%S/../../bindings/xml/comment-xml-schema.rng %s > %t/out
4*67e74705SXin Li// RUN: FileCheck %s < %t/out
5*67e74705SXin Li// Test to search overridden methods for documentation when overriding method has none. rdar://12378793
6*67e74705SXin Li
7*67e74705SXin Li// Ensure that XML we generate is not invalid.
8*67e74705SXin Li// RUN: FileCheck %s -check-prefix=WRONG < %t/out
9*67e74705SXin Li// WRONG-NOT: CommentXMLInvalid
10*67e74705SXin Li
11*67e74705SXin Li@protocol P
12*67e74705SXin Li- (void)METH:(id)PPP;
13*67e74705SXin Li@end
14*67e74705SXin Li
15*67e74705SXin Li@interface Root<P>
16*67e74705SXin Li/**
17*67e74705SXin Li * \param[in] AAA ZZZ
18*67e74705SXin Li */
19*67e74705SXin Li- (void)METH:(id)AAA;
20*67e74705SXin Li@end
21*67e74705SXin Li
22*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-3]]" column="1"><Name>METH:</Name><USR>c:objc(cs)Root(im)METH:</USR><Declaration>- (void)METH:(id)AAA;</Declaration><Parameters><Parameter><Name>AAA</Name><Index>0</Index><Direction isExplicit="1">in</Direction><Discussion><Para> ZZZ</Para></Discussion></Parameter></Parameters></Function>]
23*67e74705SXin Li
24*67e74705SXin Li@interface Sub : Root
25*67e74705SXin Li@end
26*67e74705SXin Li
27*67e74705SXin Li@interface Sub (CAT)
28*67e74705SXin Li- (void)METH:(id)BBB;
29*67e74705SXin Li@end
30*67e74705SXin Li
31*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-3]]" column="1"><Name>METH:</Name><USR>c:objc(cs)Root(im)METH:</USR><Declaration>- (void)METH:(id)BBB;</Declaration><Parameters><Parameter><Name>BBB</Name><Index>0</Index><Direction isExplicit="1">in</Direction><Discussion><Para> ZZZ</Para></Discussion></Parameter></Parameters></Function>]
32*67e74705SXin Li
33*67e74705SXin Li@implementation Sub(CAT)
34*67e74705SXin Li- (void)METH:(id)III {}
35*67e74705SXin Li@end
36*67e74705SXin Li
37*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-3]]" column="1"><Name>METH:</Name><USR>c:objc(cs)Root(im)METH:</USR><Declaration>- (void)METH:(id)III;</Declaration><Parameters><Parameter><Name>III</Name><Index>0</Index><Direction isExplicit="1">in</Direction><Discussion><Para> ZZZ</Para></Discussion></Parameter></Parameters></Function>]
38*67e74705SXin Li
39*67e74705SXin Li@interface Redec : Root
40*67e74705SXin Li@end
41*67e74705SXin Li
42*67e74705SXin Li@interface Redec()
43*67e74705SXin Li/**
44*67e74705SXin Li * \param[in] AAA input value
45*67e74705SXin Li * \param[out] CCC output value is int
46*67e74705SXin Li * \param[in] BBB 2nd input value is double
47*67e74705SXin Li */
48*67e74705SXin Li- (void)EXT_METH:(id)AAA : (double)BBB : (int)CCC;
49*67e74705SXin Li@end
50*67e74705SXin Li
51*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-3]]" column="1"><Name>EXT_METH:::</Name><USR>c:objc(cs)Redec(im)EXT_METH:::</USR><Declaration>- (void)EXT_METH:(id)AAA:(double)BBB:(int)CCC;</Declaration><Parameters><Parameter><Name>AAA</Name><Index>0</Index><Direction isExplicit="1">in</Direction><Discussion><Para> input value </Para></Discussion></Parameter><Parameter><Name>BBB</Name><Index>1</Index><Direction isExplicit="1">in</Direction><Discussion><Para> 2nd input value is double</Para></Discussion></Parameter><Parameter><Name>CCC</Name><Index>2</Index><Direction isExplicit="1">out</Direction><Discussion><Para> output value is int </Para></Discussion></Parameter></Parameters></Function>]
52*67e74705SXin Li
53*67e74705SXin Li@implementation Redec
54*67e74705SXin Li- (void)EXT_METH:(id)PPP : (double)QQQ : (int)RRR {}
55*67e74705SXin Li@end
56*67e74705SXin Li
57*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-3]]" column="1"><Name>EXT_METH:::</Name><USR>c:objc(cs)Redec(im)EXT_METH:::</USR><Declaration>- (void)EXT_METH:(id)PPP:(double)QQQ:(int)RRR;</Declaration><Parameters><Parameter><Name>PPP</Name><Index>0</Index><Direction isExplicit="1">in</Direction><Discussion><Para> input value </Para></Discussion></Parameter><Parameter><Name>QQQ</Name><Index>1</Index><Direction isExplicit="1">in</Direction><Discussion><Para> 2nd input value is double</Para></Discussion></Parameter><Parameter><Name>RRR</Name><Index>2</Index><Direction isExplicit="1">out</Direction><Discussion><Para> output value is int </Para></Discussion></Parameter></Parameters></Function>]
58*67e74705SXin Li
59*67e74705SXin Listruct Base {
60*67e74705SXin Li  /// \brief Does something.
61*67e74705SXin Li  /// \param AAA argument to foo_pure.
62*67e74705SXin Li  virtual void foo_pure(int AAA) = 0;
63*67e74705SXin Li
64*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="16"><Name>foo_pure</Name><USR>c:@S@Base@F@foo_pure#I#</USR><Declaration>virtual void foo_pure(int AAA) = 0</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>AAA</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to foo_pure.</Para></Discussion></Parameter></Parameters></Function>]
65*67e74705SXin Li
66*67e74705SXin Li  /// \brief Does something.
67*67e74705SXin Li  /// \param BBB argument to defined virtual.
68*67e74705SXin Li  virtual void foo_inline(int BBB) {}
69*67e74705SXin Li
70*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="16"><Name>foo_inline</Name><USR>c:@S@Base@F@foo_inline#I#</USR><Declaration>virtual void foo_inline(int BBB)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>BBB</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to defined virtual.</Para></Discussion></Parameter></Parameters></Function>]
71*67e74705SXin Li
72*67e74705SXin Li  /// \brief Does something.
73*67e74705SXin Li  /// \param CCC argument to undefined virtual.
74*67e74705SXin Li  virtual void foo_outofline(int CCC);
75*67e74705SXin Li
76*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="16"><Name>foo_outofline</Name><USR>c:@S@Base@F@foo_outofline#I#</USR><Declaration>virtual void foo_outofline(int CCC)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>CCC</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to undefined virtual.</Para></Discussion></Parameter></Parameters></Function>]
77*67e74705SXin Li};
78*67e74705SXin Li
79*67e74705SXin Livoid Base::foo_outofline(int RRR) {}
80*67e74705SXin Li
81*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="12"><Name>foo_outofline</Name><USR>c:@S@Base@F@foo_outofline#I#</USR><Declaration>void foo_outofline(int RRR)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>RRR</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to undefined virtual.</Para></Discussion></Parameter></Parameters></Function>]
82*67e74705SXin Li
83*67e74705SXin Listruct Derived : public Base {
84*67e74705SXin Li  virtual void foo_pure(int PPP);
85*67e74705SXin Li
86*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="16"><Name>foo_pure</Name><USR>c:@S@Base@F@foo_pure#I#</USR><Declaration>virtual void foo_pure(int PPP)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>PPP</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to foo_pure.</Para></Discussion></Parameter></Parameters></Function>]
87*67e74705SXin Li
88*67e74705SXin Li  virtual void foo_inline(int QQQ) {}
89*67e74705SXin Li
90*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="16"><Name>foo_inline</Name><USR>c:@S@Base@F@foo_inline#I#</USR><Declaration>virtual void foo_inline(int QQQ)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>QQQ</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to defined virtual.</Para></Discussion></Parameter></Parameters></Function>]
91*67e74705SXin Li};
92*67e74705SXin Li
93*67e74705SXin Li/// \brief Does something.
94*67e74705SXin Li/// \param DDD a value.
95*67e74705SXin Livoid foo(int DDD);
96*67e74705SXin Li
97*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="6"><Name>foo</Name><USR>c:@F@foo#I#</USR><Declaration>void foo(int DDD)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>DDD</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> a value.</Para></Discussion></Parameter></Parameters></Function>]
98*67e74705SXin Li
99*67e74705SXin Livoid foo(int SSS) {}
100*67e74705SXin Li
101*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="6"><Name>foo</Name><USR>c:@F@foo#I#</USR><Declaration>void foo(int SSS)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>SSS</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> a value.</Para></Discussion></Parameter></Parameters></Function>]
102*67e74705SXin Li
103*67e74705SXin Li/// \brief Does something.
104*67e74705SXin Li/// \param EEE argument to function decl.
105*67e74705SXin Livoid foo1(int EEE);
106*67e74705SXin Li
107*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="6"><Name>foo1</Name><USR>c:@F@foo1#I#</USR><Declaration>void foo1(int EEE)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>EEE</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to function decl.</Para></Discussion></Parameter></Parameters></Function>]
108*67e74705SXin Li
109*67e74705SXin Livoid foo1(int TTT);
110*67e74705SXin Li
111*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="6"><Name>foo1</Name><USR>c:@F@foo1#I#</USR><Declaration>void foo1(int TTT)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>TTT</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to function decl.</Para></Discussion></Parameter></Parameters></Function>]
112*67e74705SXin Li
113*67e74705SXin Li/// \brief Documentation
114*67e74705SXin Li/// \tparam BBB The type, silly.
115*67e74705SXin Li/// \tparam AAA The type, silly as well.
116*67e74705SXin Litemplate<typename AAA, typename BBB>
117*67e74705SXin Livoid foo(AAA, BBB);
118*67e74705SXin Li
119*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function templateKind="template" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="6"><Name>foo</Name><USR>c:@FT@&gt;2#T#Tfoo#t0.0#t0.1#v#</USR><Declaration>template &lt;typename AAA, typename BBB&gt; void foo(AAA, BBB)</Declaration><Abstract><Para> Documentation </Para></Abstract><TemplateParameters><Parameter><Name>AAA</Name><Index>0</Index><Discussion><Para> The type, silly as well.</Para></Discussion></Parameter><Parameter><Name>BBB</Name><Index>1</Index><Discussion><Para> The type, silly. </Para></Discussion></Parameter></TemplateParameters></Function>]
120*67e74705SXin Li
121*67e74705SXin Litemplate<typename PPP, typename QQQ>
122*67e74705SXin Livoid foo(PPP, QQQ);
123*67e74705SXin Li
124*67e74705SXin Li// CHECK: FullCommentAsXML=[<Function templateKind="template" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="6"><Name>foo</Name><USR>c:@FT@&gt;2#T#Tfoo#t0.0#t0.1#v#</USR><Declaration>template &lt;typename PPP, typename QQQ&gt; void foo(PPP, QQQ)</Declaration><Abstract><Para> Documentation </Para></Abstract><TemplateParameters><Parameter><Name>PPP</Name><Index>0</Index><Discussion><Para> The type, silly as well.</Para></Discussion></Parameter><Parameter><Name>QQQ</Name><Index>1</Index><Discussion><Para> The type, silly. </Para></Discussion></Parameter></TemplateParameters></Function>]
125*67e74705SXin Li
126