xref: /aosp_15_r20/external/clang/test/Index/complete-objc-message.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// Note: the run lines follow their respective tests, since line/column
2*67e74705SXin Li// matter in this test.
3*67e74705SXin Li#define nil (void*)0
4*67e74705SXin Li@protocol FooTestProtocol
5*67e74705SXin Li+ protocolClassMethod;
6*67e74705SXin Li- protocolInstanceMethod : (int)value;
7*67e74705SXin Li@end
8*67e74705SXin Li@interface Foo <FooTestProtocol> {
9*67e74705SXin Li  void *isa;
10*67e74705SXin Li}
11*67e74705SXin Li+ (int)classMethod1:a withKeyword:(int)b;
12*67e74705SXin Li+ (void)classMethod2;
13*67e74705SXin Li+ new;
14*67e74705SXin Li- instanceMethod1;
15*67e74705SXin Li@end
16*67e74705SXin Li
17*67e74705SXin Li@interface Foo (FooTestCategory)
18*67e74705SXin Li+ categoryClassMethod;
19*67e74705SXin Li- categoryInstanceMethod;
20*67e74705SXin Li@end
21*67e74705SXin Li
22*67e74705SXin Livoid func() {
23*67e74705SXin Li  Foo *obj = [Foo new];
24*67e74705SXin Li  [obj xx];
25*67e74705SXin Li}
26*67e74705SXin Li
27*67e74705SXin Li@interface MyClass { }
28*67e74705SXin Li+ (int)MyClassMethod:(id)obj;
29*67e74705SXin Li- (int)MyInstMethod:(id)x second:(id)y;
30*67e74705SXin Li@end
31*67e74705SXin Li
32*67e74705SXin Li@interface MySubClass : MyClass { }
33*67e74705SXin Li+ (int)MySubClassMethod;
34*67e74705SXin Li- (int)MySubInstMethod;
35*67e74705SXin Li@end
36*67e74705SXin Li
37*67e74705SXin Li@implementation MyClass
38*67e74705SXin Li+ (int)MyClassMethod:(id)obj {
39*67e74705SXin Li  return 0;
40*67e74705SXin Li}
41*67e74705SXin Li
42*67e74705SXin Li+ (int)MyPrivateMethod {
43*67e74705SXin Li  return 1;
44*67e74705SXin Li}
45*67e74705SXin Li
46*67e74705SXin Li- (int)MyInstMethod:(id)x second:(id)y {
47*67e74705SXin Li  return 2;
48*67e74705SXin Li}
49*67e74705SXin Li
50*67e74705SXin Li- (int)MyPrivateInstMethod {
51*67e74705SXin Li  return 3;
52*67e74705SXin Li}
53*67e74705SXin Li@end
54*67e74705SXin LiMyClass *getMyClass();
55*67e74705SXin Li@implementation MySubClass
56*67e74705SXin Li+ (int)MySubClassMethod {
57*67e74705SXin Li  return 2;
58*67e74705SXin Li}
59*67e74705SXin Li
60*67e74705SXin Li+ (int)MySubPrivateMethod {
61*67e74705SXin Li  return [super MyPrivateMethod];
62*67e74705SXin Li}
63*67e74705SXin Li
64*67e74705SXin Li- (int)MySubInstMethod:(id)obj {
65*67e74705SXin Li  return [super MyInstMethod: obj second:obj];
66*67e74705SXin Li}
67*67e74705SXin Li
68*67e74705SXin Li- (int)MyInstMethod:(id)x second:(id)y {
69*67e74705SXin Li  return 3;
70*67e74705SXin Li}
71*67e74705SXin Li@end
72*67e74705SXin Li
73*67e74705SXin Livoid test_super_var(MySubClass *super) {
74*67e74705SXin Li  [super MyInstMethod: super second:super];
75*67e74705SXin Li}
76*67e74705SXin Li
77*67e74705SXin Li@protocol FooTestProtocol2
78*67e74705SXin Li- (int)secondProtocolInstanceMethod;
79*67e74705SXin Li@end
80*67e74705SXin Li
81*67e74705SXin Livoid test_qual_id(id<FooTestProtocol,FooTestProtocol2> ptr) {
82*67e74705SXin Li  [ptr protocolInstanceMethod:1];
83*67e74705SXin Li}
84*67e74705SXin Li
85*67e74705SXin Li@interface Overload
86*67e74705SXin Li- (int)Method:(int)i;
87*67e74705SXin Li- (int)Method;
88*67e74705SXin Li- (int)Method:(float)f Arg1:(int)i1 Arg2:(int)i2;
89*67e74705SXin Li- (int)Method:(float)f Arg1:(int)i1 OtherArg:(id)obj;
90*67e74705SXin Li- (int)Method:(float)f SomeArg:(int)i1 OtherArg:(id)obj;
91*67e74705SXin Li- (int)OtherMethod:(float)f Arg1:(int)i1 Arg2:(int)i2;
92*67e74705SXin Li@end
93*67e74705SXin Li
94*67e74705SXin Livoid test_overload(Overload *ovl) {
95*67e74705SXin Li  [ovl Method:1 Arg1:1 OtherArg:ovl];
96*67e74705SXin Li}
97*67e74705SXin Li
98*67e74705SXin Li@interface Ellipsis
99*67e74705SXin Li- (int)Method:(int)i, ...;
100*67e74705SXin Li- (int)SentinelMethod:(int)i, ... __attribute__((sentinel(0,1)));
101*67e74705SXin Li@end
102*67e74705SXin Livoid f(Ellipsis *e) {
103*67e74705SXin Li  [e Method:1, 2, 3];
104*67e74705SXin Li}
105*67e74705SXin Li
106*67e74705SXin Li@interface Overload2
107*67e74705SXin Li+ (int)Method:(int)i;
108*67e74705SXin Li+ (int)Method;
109*67e74705SXin Li+ (int)Method:(float)f Arg1:(int)i1 Arg2:(int)i2;
110*67e74705SXin Li+ (int)Method:(float)f Arg1:(int)i1 OtherArg:(id)obj;
111*67e74705SXin Li+ (int)Method:(float)f SomeArg:(int)i1 OtherArg:(id)obj;
112*67e74705SXin Li+ (int)OtherMethod:(float)f Arg1:(int)i1 Arg2:(int)i2;
113*67e74705SXin Li@end
114*67e74705SXin Li
115*67e74705SXin Livoid test_overload2(void) {
116*67e74705SXin Li  [Overload2 Method:1 Arg1:1 OtherArg:ovl];
117*67e74705SXin Li}
118*67e74705SXin Li
119*67e74705SXin Livoid msg_id(id x) {
120*67e74705SXin Li  [x Method:1 Arg1:1 OtherArg:ovl];
121*67e74705SXin Li  [[x blarg] Method:1 Arg1:1 OtherArg:ovl];
122*67e74705SXin Li  [id Method:1 Arg1:1 OtherArg:ovl];
123*67e74705SXin Li}
124*67e74705SXin Li
125*67e74705SXin Li@interface A
126*67e74705SXin Li- (void)method1;
127*67e74705SXin Li@end
128*67e74705SXin Li
129*67e74705SXin Li@interface B : A
130*67e74705SXin Li- (void)method2;
131*67e74705SXin Li@end
132*67e74705SXin Li
133*67e74705SXin Livoid test_ranking(B *b) {
134*67e74705SXin Li  [b method1];
135*67e74705SXin Li  b method1];
136*67e74705SXin Li}
137*67e74705SXin Li
138*67e74705SXin Livoid test_overload3(Overload *ovl) {
139*67e74705SXin Li  ovl Method:1 Arg1:1 OtherArg:ovl];
140*67e74705SXin Li   Overload2 Method:1 Arg1:1 OtherArg:ovl];
141*67e74705SXin Li  (Overload2 Method:1 Arg1:1 OtherArg:ovl]);
142*67e74705SXin Li}
143*67e74705SXin Li
144*67e74705SXin Li@interface C : B
145*67e74705SXin Li- (void)method2;
146*67e74705SXin Li- (void)method3;
147*67e74705SXin Li@end
148*67e74705SXin Li
149*67e74705SXin Livoid test_redundancy(C *c) {
150*67e74705SXin Li  [c method2];
151*67e74705SXin Li};
152*67e74705SXin Li
153*67e74705SXin Li@protocol P
154*67e74705SXin Li- (Class)class;
155*67e74705SXin Li@end
156*67e74705SXin Li
157*67e74705SXin Li@interface A () <P>
158*67e74705SXin Li@end
159*67e74705SXin Li
160*67e74705SXin Li@interface A ()
161*67e74705SXin Li+ (void)class_method3;
162*67e74705SXin Li@end
163*67e74705SXin Li
164*67e74705SXin Li@interface A (Cat)
165*67e74705SXin Li+ (void)class_method4;
166*67e74705SXin Li@end
167*67e74705SXin Li
168*67e74705SXin Li@implementation A
169*67e74705SXin Li- (void)method5:(A*)a {
170*67e74705SXin Li  [[self class] class_method4];
171*67e74705SXin Li}
172*67e74705SXin Li@end
173*67e74705SXin Li
174*67e74705SXin Livoid test_missing_open_more() {
175*67e74705SXin Li  A *a = A class_method3];
176*67e74705SXin Li}
177*67e74705SXin Li
178*67e74705SXin Livoid test_block_invoke(A *(^block1)(int),
179*67e74705SXin Li                       int (^block2)(int),
180*67e74705SXin Li                       id (^block3)(int)) {
181*67e74705SXin Li  [block1(5) init];
182*67e74705SXin Li}
183*67e74705SXin Li
184*67e74705SXin Li@interface DO
185*67e74705SXin Li- (void)method:(in bycopy A*)ain result:(out byref A**)aout;
186*67e74705SXin Li@end
187*67e74705SXin Li
188*67e74705SXin Livoid test_DO(DO *d, A* a) {
189*67e74705SXin Li  [d method:a aout:&a];
190*67e74705SXin Li}
191*67e74705SXin Li
192*67e74705SXin Li@interface Nullability
193*67e74705SXin Li- (nonnull A *)method:(nullable A *)param;
194*67e74705SXin Li@end
195*67e74705SXin Li
196*67e74705SXin Livoid test_Nullability(Nullability *n, A* a) {
197*67e74705SXin Li  [n method: a];
198*67e74705SXin Li}
199*67e74705SXin Li
200*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:23:19 %s | FileCheck -check-prefix=CHECK-CC1 %s
201*67e74705SXin Li// CHECK-CC1: {TypedText categoryClassMethod} (35)
202*67e74705SXin Li// CHECK-CC1: {TypedText classMethod1:}{Placeholder (id)}{HorizontalSpace  }{TypedText withKeyword:}{Placeholder (int)} (35)
203*67e74705SXin Li// CHECK-CC1: {TypedText classMethod2} (35)
204*67e74705SXin Li// CHECK-CC1: {TypedText instanceMethod1} (35)
205*67e74705SXin Li// CHECK-CC1: {TypedText new} (35)
206*67e74705SXin Li// CHECK-CC1: {TypedText protocolClassMethod} (37)
207*67e74705SXin Li// CHECK-CC1: Completion contexts:
208*67e74705SXin Li// CHECK-CC1-NEXT: Objective-C class method
209*67e74705SXin Li// CHECK-CC1-NEXT: Container Kind: ObjCInterfaceDecl
210*67e74705SXin Li// CHECK-CC1-NEXT: Container is complete
211*67e74705SXin Li// CHECK-CC1-NEXT: Container USR: c:objc(cs)Foo
212*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:24:8 %s | FileCheck -check-prefix=CHECK-CC2 %s
213*67e74705SXin Li// CHECK-CC2: {TypedText categoryInstanceMethod}
214*67e74705SXin Li// CHECK-CC2: {TypedText instanceMethod1}
215*67e74705SXin Li// CHECK-CC2: {TypedText protocolInstanceMethod:}{Placeholder (int)}
216*67e74705SXin Li// CHECK-CC2: Completion contexts:
217*67e74705SXin Li// CHECK-CC2-NEXT: Objective-C instance method
218*67e74705SXin Li// CHECK-CC2-NEXT: Container Kind: ObjCInterfaceDecl
219*67e74705SXin Li// CHECK-CC2-NEXT: Container is complete
220*67e74705SXin Li// CHECK-CC2-NEXT: Container USR: c:objc(cs)Foo
221*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:61:16 %s | FileCheck -check-prefix=CHECK-CC3 %s
222*67e74705SXin Li// CHECK-CC3: ObjCClassMethodDecl:{ResultType int}{TypedText MyClassMethod:}{Placeholder (id)}
223*67e74705SXin Li// CHECK-CC3: ObjCClassMethodDecl:{ResultType int}{TypedText MyPrivateMethod}
224*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:65:16 %s | FileCheck -check-prefix=CHECK-CC4 %s
225*67e74705SXin Li// CHECK-CC4: ObjCInstanceMethodDecl:{ResultType int}{TypedText MyInstMethod:}{Placeholder (id)}{HorizontalSpace  }{TypedText second:}{Placeholder (id)}
226*67e74705SXin Li// CHECK-CC4: ObjCInstanceMethodDecl:{ResultType int}{TypedText MyPrivateInstMethod}
227*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:74:9 %s | FileCheck -check-prefix=CHECK-CC5 %s
228*67e74705SXin Li// CHECK-CC5: ObjCInstanceMethodDecl:{ResultType int}{TypedText MyInstMethod:}{Placeholder (id)}{HorizontalSpace  }{TypedText second:}{Placeholder (id)}
229*67e74705SXin Li// CHECK-CC5: ObjCInstanceMethodDecl:{ResultType int}{TypedText MySubInstMethod}
230*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:82:8 %s | FileCheck -check-prefix=CHECK-CC6 %s
231*67e74705SXin Li// CHECK-CC6: ObjCInstanceMethodDecl:{ResultType id}{TypedText protocolInstanceMethod:}{Placeholder (int)}
232*67e74705SXin Li// CHECK-CC6: ObjCInstanceMethodDecl:{ResultType int}{TypedText secondProtocolInstanceMethod}
233*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:95:8 %s | FileCheck -check-prefix=CHECK-CC7 %s
234*67e74705SXin Li// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText Method}
235*67e74705SXin Li// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText Method:}{Placeholder (int)}
236*67e74705SXin Li// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText Method:}{Placeholder (float)}{HorizontalSpace  }{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace  }{TypedText Arg2:}{Placeholder (int)}
237*67e74705SXin Li// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText Method:}{Placeholder (float)}{HorizontalSpace  }{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace  }{TypedText OtherArg:}{Placeholder (id)}
238*67e74705SXin Li// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText Method:}{Placeholder (float)}{HorizontalSpace  }{TypedText SomeArg:}{Placeholder (int)}{HorizontalSpace  }{TypedText OtherArg:}{Placeholder (id)}
239*67e74705SXin Li// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText OtherMethod:}{Placeholder (float)}{HorizontalSpace  }{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace  }{TypedText Arg2:}{Placeholder (int)}
240*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:95:17 %s | FileCheck -check-prefix=CHECK-CC8 %s
241*67e74705SXin Li// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType int}{Informative Method:}{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace  }{TypedText Arg2:}{Placeholder (int)}
242*67e74705SXin Li// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType int}{Informative Method:}{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace  }{TypedText OtherArg:}{Placeholder (id)}
243*67e74705SXin Li// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType int}{Informative Method:}{TypedText SomeArg:}{Placeholder (int)}{HorizontalSpace  }{TypedText OtherArg:}{Placeholder (id)}
244*67e74705SXin Li// CHECK-CC8-NOT: ObjCInstanceMethodDecl:{ResultType int}{Informative Method:}{TypedText }
245*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:95:24 %s | FileCheck -check-prefix=CHECK-CC9 %s
246*67e74705SXin Li// CHECK-CC9: ObjCInstanceMethodDecl:{ResultType int}{Informative Method:}{Informative Arg1:}{TypedText Arg2:}{Placeholder (int)}
247*67e74705SXin Li// CHECK-CC9: ObjCInstanceMethodDecl:{ResultType int}{Informative Method:}{Informative Arg1:}{TypedText OtherArg:}{Placeholder (id)}
248*67e74705SXin Li// CHECK-CC9: Objective-C selector: Method:Arg1:
249*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:61:11 %s | FileCheck -check-prefix=CHECK-CCA %s
250*67e74705SXin Li// CHECK-CCA: TypedefDecl:{TypedText Class} (50)
251*67e74705SXin Li// CHECK-CCA-NEXT: ObjCInterfaceDecl:{TypedText Foo} (50)
252*67e74705SXin Li// CHECK-CCA-NOT: FunctionDecl:{ResultType void}{TypedText func}{LeftParen (}{RightParen )} (50)
253*67e74705SXin Li// CHECK-CCA:FunctionDecl:{ResultType MyClass *}{TypedText getMyClass}{LeftParen (}{RightParen )} (50)
254*67e74705SXin Li// CHECK-CCA: TypedefDecl:{TypedText id} (50)
255*67e74705SXin Li// CHECK-CCA: ObjCInterfaceDecl:{TypedText MyClass} (50)
256*67e74705SXin Li// CHECK-CCA: ObjCInterfaceDecl:{TypedText MySubClass} (50)
257*67e74705SXin Li// CHECK-CCA: {ResultType Class}{TypedText self} (34)
258*67e74705SXin Li// CHECK-CCA: {TypedText super} (40)
259*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:103:6 %s | FileCheck -check-prefix=CHECK-CCB %s
260*67e74705SXin Li// CHECK-CCB: ObjCInstanceMethodDecl:{ResultType int}{TypedText Method:}{Placeholder (int), ...}
261*67e74705SXin Li// CHECK-CCB: ObjCInstanceMethodDecl:{ResultType int}{TypedText SentinelMethod:}{Placeholder (int), ...}{Text , nil}
262*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:116:14 %s | FileCheck -check-prefix=CHECK-CCC %s
263*67e74705SXin Li// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText Method}
264*67e74705SXin Li// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText Method:}{Placeholder (int)}
265*67e74705SXin Li// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText Method:}{Placeholder (float)}{HorizontalSpace  }{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace  }{TypedText Arg2:}{Placeholder (int)}
266*67e74705SXin Li// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText Method:}{Placeholder (float)}{HorizontalSpace  }{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace  }{TypedText OtherArg:}{Placeholder (id)}
267*67e74705SXin Li// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText Method:}{Placeholder (float)}{HorizontalSpace  }{TypedText SomeArg:}{Placeholder (int)}{HorizontalSpace  }{TypedText OtherArg:}{Placeholder (id)}
268*67e74705SXin Li// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText OtherMethod:}{Placeholder (float)}{HorizontalSpace  }{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace  }{TypedText Arg2:}{Placeholder (int)}
269*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:116:23 %s | FileCheck -check-prefix=CHECK-CCD %s
270*67e74705SXin Li// CHECK-CCD: ObjCClassMethodDecl:{ResultType int}{Informative Method:}{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace  }{TypedText Arg2:}{Placeholder (int)}
271*67e74705SXin Li// CHECK-CCD: ObjCClassMethodDecl:{ResultType int}{Informative Method:}{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace  }{TypedText OtherArg:}{Placeholder (id)}
272*67e74705SXin Li// CHECK-CCD: ObjCClassMethodDecl:{ResultType int}{Informative Method:}{TypedText SomeArg:}{Placeholder (int)}{HorizontalSpace  }{TypedText OtherArg:}{Placeholder (id)}
273*67e74705SXin Li// CHECK-CCD-NOT: ObjCClassMethodDecl:{ResultType int}{Informative Method:}{TypedText }
274*67e74705SXin Li// CHECK-CCD: Objective-C selector: Method:
275*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:116:30 %s | FileCheck -check-prefix=CHECK-CCE %s
276*67e74705SXin Li// CHECK-CCE: ObjCClassMethodDecl:{ResultType int}{Informative Method:}{Informative Arg1:}{TypedText Arg2:}{Placeholder (int)}
277*67e74705SXin Li// CHECK-CCE: ObjCClassMethodDecl:{ResultType int}{Informative Method:}{Informative Arg1:}{TypedText OtherArg:}{Placeholder (id)}
278*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:61:11 %s | FileCheck -check-prefix=CHECK-CCF %s
279*67e74705SXin Li// CHECK-CCF: TypedefDecl:{TypedText Class}
280*67e74705SXin Li// CHECK-CCF: ObjCInterfaceDecl:{TypedText Foo}
281*67e74705SXin Li// CHECK-CCF-NOT: FunctionDecl:{ResultType void}{TypedText func}{LeftParen (}{RightParen )}
282*67e74705SXin Li// CHECK-CCF: TypedefDecl:{TypedText id}
283*67e74705SXin Li// CHECK-CCF: ObjCInterfaceDecl:{TypedText MyClass}
284*67e74705SXin Li// CHECK-CCF: ObjCInterfaceDecl:{TypedText MySubClass}
285*67e74705SXin Li// CHECK-CCF: {ResultType Class}{TypedText self}
286*67e74705SXin Li// CHECK-CCF: {TypedText super}
287*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:120:6 %s | FileCheck -check-prefix=CHECK-CCG %s
288*67e74705SXin Li// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType id}{TypedText categoryInstanceMethod}
289*67e74705SXin Li// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType id}{TypedText instanceMethod1}
290*67e74705SXin Li// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType int}{TypedText Method}
291*67e74705SXin Li// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType int}{TypedText MyInstMethod:}{Placeholder (id)}{HorizontalSpace  }{TypedText second:}{Placeholder (id)}
292*67e74705SXin Li// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType int}{TypedText MyPrivateInstMethod}
293*67e74705SXin Li// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType int}{TypedText MySubInstMethod}
294*67e74705SXin Li// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType id}{TypedText protocolInstanceMethod:}{Placeholder (int)}
295*67e74705SXin Li// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType int}{TypedText secondProtocolInstanceMethod}
296*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:121:14 %s | FileCheck -check-prefix=CHECK-CCG %s
297*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:122:7 %s | FileCheck -check-prefix=CHECK-CCH %s
298*67e74705SXin Li// CHECK-CCH: ObjCClassMethodDecl:{ResultType id}{TypedText categoryClassMethod}
299*67e74705SXin Li// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText classMethod1:}{Placeholder (id)}{HorizontalSpace  }{TypedText withKeyword:}{Placeholder (int)}
300*67e74705SXin Li// CHECK-CCH: ObjCClassMethodDecl:{ResultType void}{TypedText classMethod2}
301*67e74705SXin Li// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText Method}
302*67e74705SXin Li// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText Method:}{Placeholder (int)}
303*67e74705SXin Li// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText MyClassMethod:}{Placeholder (id)}
304*67e74705SXin Li// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText MyPrivateMethod}
305*67e74705SXin Li// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText MySubClassMethod}
306*67e74705SXin Li// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText MySubPrivateMethod}
307*67e74705SXin Li// CHECK-CCH: ObjCClassMethodDecl:{ResultType id}{TypedText new}
308*67e74705SXin Li// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText OtherMethod:}{Placeholder (float)}{HorizontalSpace  }{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace  }{TypedText Arg2:}{Placeholder (int)}
309*67e74705SXin Li// CHECK-CCH: ObjCClassMethodDecl:{ResultType id}{TypedText protocolClassMethod}
310*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:134:6 %s | FileCheck -check-prefix=CHECK-CCI %s
311*67e74705SXin Li// CHECK-CCI: ObjCInstanceMethodDecl:{ResultType void}{TypedText method1} (37)
312*67e74705SXin Li// CHECK-CCI: ObjCInstanceMethodDecl:{ResultType void}{TypedText method2} (35)
313*67e74705SXin Li
314*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:150:5 %s | FileCheck -check-prefix=CHECK-REDUNDANT %s
315*67e74705SXin Li// CHECK-REDUNDANT: ObjCInstanceMethodDecl:{ResultType void}{TypedText method2} (35)
316*67e74705SXin Li// CHECK-REDUNDANT-NOT: ObjCInstanceMethodDecl:{ResultType void}{TypedText method2}
317*67e74705SXin Li// CHECK-REDUNDANT: ObjCInstanceMethodDecl:{ResultType void}{TypedText method3} (35)
318*67e74705SXin Li
319*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:170:16 %s | FileCheck -check-prefix=CHECK-CLASS-RESULT %s
320*67e74705SXin Li// CHECK-CLASS-RESULT: ObjCClassMethodDecl:{ResultType void}{TypedText class_method3} (35)
321*67e74705SXin Li// CHECK-CLASS-RESULT: ObjCClassMethodDecl:{ResultType void}{TypedText class_method4} (35)
322*67e74705SXin Li
323*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:181:4 %s | FileCheck -check-prefix=CHECK-BLOCK-RECEIVER %s
324*67e74705SXin Li// CHECK-BLOCK-RECEIVER: ObjCInterfaceDecl:{TypedText A} (50)
325*67e74705SXin Li// CHECK-BLOCK-RECEIVER: ObjCInterfaceDecl:{TypedText B} (50)
326*67e74705SXin Li// CHECK-BLOCK-RECEIVER: ParmDecl:{ResultType A *(^)(int)}{TypedText block1} (34)
327*67e74705SXin Li// CHECK-BLOCK-RECEIVER-NEXT: ParmDecl:{ResultType id (^)(int)}{TypedText block3} (34)
328*67e74705SXin Li
329*67e74705SXin Li// Test code completion with a missing opening bracket:
330*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:135:5 %s | FileCheck -check-prefix=CHECK-CCI %s
331*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:139:7 %s | FileCheck -check-prefix=CHECK-CC7 %s
332*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:139:16 %s | FileCheck -check-prefix=CHECK-CC8 %s
333*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:139:23 %s | FileCheck -check-prefix=CHECK-CC9 %s
334*67e74705SXin Li
335*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:140:14 %s | FileCheck -check-prefix=CHECK-CCC %s
336*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:140:23 %s | FileCheck -check-prefix=CHECK-CCD %s
337*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:140:30 %s | FileCheck -check-prefix=CHECK-CCE %s
338*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:141:14 %s | FileCheck -check-prefix=CHECK-CCC %s
339*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:141:23 %s | FileCheck -check-prefix=CHECK-CCD %s
340*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:141:30 %s | FileCheck -check-prefix=CHECK-CCE %s
341*67e74705SXin Li
342*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:175:12 %s | FileCheck -check-prefix=CHECK-CLASS-RESULT %s
343*67e74705SXin Li
344*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:189:6 %s | FileCheck -check-prefix=CHECK-DISTRIB-OBJECTS %s
345*67e74705SXin Li// CHECK-DISTRIB-OBJECTS: ObjCInstanceMethodDecl:{ResultType void}{TypedText method:}{Placeholder (in bycopy A *)}{HorizontalSpace  }{TypedText result:}{Placeholder (out byref A **)} (35)
346*67e74705SXin Li
347*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:197:6 %s | FileCheck -check-prefix=CHECK-NULLABLE %s
348*67e74705SXin Li// CHECK-NULLABLE: ObjCInstanceMethodDecl:{ResultType A * _Nonnull}{TypedText method:}{Placeholder (nullable A *)}
349