xref: /llvm-project/clang/test/ExtractAPI/objc_interface.m (revision e05c1b46d0d3739cc48ad912dbe6e9affce05927)
19b36e126SZixu Wang// RUN: rm -rf %t
2*e05c1b46SDaniel Grumberg// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \
3*e05c1b46SDaniel Grumberg// RUN:   -x objective-c-header -triple arm64-apple-macosx %s -o %t/output.symbols.json -verify
49b36e126SZixu Wang
5*e05c1b46SDaniel Grumberg@protocol Protocol
6*e05c1b46SDaniel Grumberg@end
79b36e126SZixu Wang
8*e05c1b46SDaniel Grumberg// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix SUPER
99b36e126SZixu Wang@interface Super <Protocol>
10*e05c1b46SDaniel Grumberg// SUPER: "!testRelLabel": "conformsTo $ c:objc(cs)Super $ c:objc(pl)Protocol"
11*e05c1b46SDaniel Grumberg// SUPER-LABEL: "!testLabel": "c:objc(cs)Super"
12*e05c1b46SDaniel Grumberg// SUPER: "accessLevel": "public",
13*e05c1b46SDaniel Grumberg// SUPER:      "declarationFragments": [
14*e05c1b46SDaniel Grumberg// SUPER-NEXT:   {
15*e05c1b46SDaniel Grumberg// SUPER-NEXT:     "kind": "keyword",
16*e05c1b46SDaniel Grumberg// SUPER-NEXT:     "spelling": "@interface"
17*e05c1b46SDaniel Grumberg// SUPER-NEXT:   },
18*e05c1b46SDaniel Grumberg// SUPER-NEXT:   {
19*e05c1b46SDaniel Grumberg// SUPER-NEXT:     "kind": "text",
20*e05c1b46SDaniel Grumberg// SUPER-NEXT:     "spelling": " "
21*e05c1b46SDaniel Grumberg// SUPER-NEXT:   },
22*e05c1b46SDaniel Grumberg// SUPER-NEXT:   {
23*e05c1b46SDaniel Grumberg// SUPER-NEXT:     "kind": "identifier",
24*e05c1b46SDaniel Grumberg// SUPER-NEXT:     "spelling": "Super"
25*e05c1b46SDaniel Grumberg// SUPER-NEXT:   }
26*e05c1b46SDaniel Grumberg// SUPER-NEXT: ],
27*e05c1b46SDaniel Grumberg// SUPER:      "kind": {
28*e05c1b46SDaniel Grumberg// SUPER-NEXT:   "displayName": "Class",
29*e05c1b46SDaniel Grumberg// SUPER-NEXT:   "identifier": "objective-c.class"
30*e05c1b46SDaniel Grumberg// SUPER-NEXT: },
31*e05c1b46SDaniel Grumberg// SUPER:   "title": "Super"
32*e05c1b46SDaniel Grumberg// SUPER:      "pathComponents": [
33*e05c1b46SDaniel Grumberg// SUPER-NEXT:   "Super"
34*e05c1b46SDaniel Grumberg// SUPER-NEXT: ]
35*e05c1b46SDaniel Grumberg
36*e05c1b46SDaniel Grumberg// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix PROP
379b36e126SZixu Wang@property(readonly, getter=getProperty) unsigned Property;
38*e05c1b46SDaniel Grumberg// PROP: "!testRelLabel": "memberOf $ c:objc(cs)Super(py)Property $ c:objc(cs)Super"
39*e05c1b46SDaniel Grumberg// PROP: "!testLabel": "c:objc(cs)Super(py)Property"
40*e05c1b46SDaniel Grumberg// PROP: "accessLevel": "public",
41*e05c1b46SDaniel Grumberg// PROP:      "declarationFragments": [
42*e05c1b46SDaniel Grumberg// PROP-NEXT:   {
43*e05c1b46SDaniel Grumberg// PROP-NEXT:     "kind": "keyword",
44*e05c1b46SDaniel Grumberg// PROP-NEXT:     "spelling": "@property"
45*e05c1b46SDaniel Grumberg// PROP-NEXT:   },
46*e05c1b46SDaniel Grumberg// PROP-NEXT:   {
47*e05c1b46SDaniel Grumberg// PROP-NEXT:     "kind": "text",
48*e05c1b46SDaniel Grumberg// PROP-NEXT:     "spelling": " ("
49*e05c1b46SDaniel Grumberg// PROP-NEXT:   },
50*e05c1b46SDaniel Grumberg// PROP-NEXT:   {
51*e05c1b46SDaniel Grumberg// PROP-NEXT:     "kind": "keyword",
52*e05c1b46SDaniel Grumberg// PROP-NEXT:     "spelling": "readonly"
53*e05c1b46SDaniel Grumberg// PROP-NEXT:   },
54*e05c1b46SDaniel Grumberg// PROP-NEXT:   {
55*e05c1b46SDaniel Grumberg// PROP-NEXT:     "kind": "text",
56*e05c1b46SDaniel Grumberg// PROP-NEXT:     "spelling": ", "
57*e05c1b46SDaniel Grumberg// PROP-NEXT:   },
58*e05c1b46SDaniel Grumberg// PROP-NEXT:   {
59*e05c1b46SDaniel Grumberg// PROP-NEXT:     "kind": "keyword",
60*e05c1b46SDaniel Grumberg// PROP-NEXT:     "spelling": "getter"
61*e05c1b46SDaniel Grumberg// PROP-NEXT:   },
62*e05c1b46SDaniel Grumberg// PROP-NEXT:   {
63*e05c1b46SDaniel Grumberg// PROP-NEXT:     "kind": "text",
64*e05c1b46SDaniel Grumberg// PROP-NEXT:     "spelling": "="
65*e05c1b46SDaniel Grumberg// PROP-NEXT:   },
66*e05c1b46SDaniel Grumberg// PROP-NEXT:   {
67*e05c1b46SDaniel Grumberg// PROP-NEXT:     "kind": "identifier",
68*e05c1b46SDaniel Grumberg// PROP-NEXT:     "spelling": "getProperty"
69*e05c1b46SDaniel Grumberg// PROP-NEXT:   },
70*e05c1b46SDaniel Grumberg// PROP-NEXT:   {
71*e05c1b46SDaniel Grumberg// PROP-NEXT:     "kind": "text",
72*e05c1b46SDaniel Grumberg// PROP-NEXT:     "spelling": ") "
73*e05c1b46SDaniel Grumberg// PROP-NEXT:   },
74*e05c1b46SDaniel Grumberg// PROP-NEXT:   {
75*e05c1b46SDaniel Grumberg// PROP-NEXT:     "kind": "typeIdentifier",
76*e05c1b46SDaniel Grumberg// PROP-NEXT:     "preciseIdentifier": "c:i",
77*e05c1b46SDaniel Grumberg// PROP-NEXT:     "spelling": "unsigned int"
78*e05c1b46SDaniel Grumberg// PROP-NEXT:   },
79*e05c1b46SDaniel Grumberg// PROP-NEXT:   {
80*e05c1b46SDaniel Grumberg// PROP-NEXT:     "kind": "text",
81*e05c1b46SDaniel Grumberg// PROP-NEXT:     "spelling": " "
82*e05c1b46SDaniel Grumberg// PROP-NEXT:   },
83*e05c1b46SDaniel Grumberg// PROP-NEXT:   {
84*e05c1b46SDaniel Grumberg// PROP-NEXT:     "kind": "identifier",
85*e05c1b46SDaniel Grumberg// PROP-NEXT:     "spelling": "Property"
86*e05c1b46SDaniel Grumberg// PROP-NEXT:   },
87*e05c1b46SDaniel Grumberg// PROP-NEXT:   {
88*e05c1b46SDaniel Grumberg// PROP-NEXT:     "kind": "text",
89*e05c1b46SDaniel Grumberg// PROP-NEXT:     "spelling": ";"
90*e05c1b46SDaniel Grumberg// PROP-NEXT:   }
91*e05c1b46SDaniel Grumberg// PROP-NEXT: ],
92*e05c1b46SDaniel Grumberg// PROP:      "kind": {
93*e05c1b46SDaniel Grumberg// PROP-NEXT:   "displayName": "Instance Property",
94*e05c1b46SDaniel Grumberg// PROP-NEXT:   "identifier": "objective-c.property"
95*e05c1b46SDaniel Grumberg// PROP-NEXT: },
96*e05c1b46SDaniel Grumberg// PROP:   "title": "Property"
97*e05c1b46SDaniel Grumberg// PROP:      "pathComponents": [
98*e05c1b46SDaniel Grumberg// PROP-NEXT:   "Super",
99*e05c1b46SDaniel Grumberg// PROP-NEXT:   "Property"
100*e05c1b46SDaniel Grumberg// PROP-NEXT: ]
101*e05c1b46SDaniel Grumberg
102*e05c1b46SDaniel Grumberg// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GET
1039b36e126SZixu Wang+ (id)getWithProperty:(unsigned) Property;
104*e05c1b46SDaniel Grumberg// GET: "!testRelLabel": "memberOf $ c:objc(cs)Super(cm)getWithProperty: $ c:objc(cs)Super"
105*e05c1b46SDaniel Grumberg// GET-LABEL: "!testLabel": "c:objc(cs)Super(cm)getWithProperty:"
106*e05c1b46SDaniel Grumberg// GET: "accessLevel": "public",
107*e05c1b46SDaniel Grumberg// GET:      "declarationFragments": [
108*e05c1b46SDaniel Grumberg// GET-NEXT:   {
109*e05c1b46SDaniel Grumberg// GET-NEXT:     "kind": "text",
110*e05c1b46SDaniel Grumberg// GET-NEXT:     "spelling": "+ ("
111*e05c1b46SDaniel Grumberg// GET-NEXT:   },
112*e05c1b46SDaniel Grumberg// GET-NEXT:   {
113*e05c1b46SDaniel Grumberg// GET-NEXT:     "kind": "keyword",
114*e05c1b46SDaniel Grumberg// GET-NEXT:     "spelling": "id"
115*e05c1b46SDaniel Grumberg// GET-NEXT:   },
116*e05c1b46SDaniel Grumberg// GET-NEXT:   {
117*e05c1b46SDaniel Grumberg// GET-NEXT:     "kind": "text",
118*e05c1b46SDaniel Grumberg// GET-NEXT:     "spelling": ") "
119*e05c1b46SDaniel Grumberg// GET-NEXT:   },
120*e05c1b46SDaniel Grumberg// GET-NEXT:   {
121*e05c1b46SDaniel Grumberg// GET-NEXT:     "kind": "identifier",
122*e05c1b46SDaniel Grumberg// GET-NEXT:     "spelling": "getWithProperty:"
123*e05c1b46SDaniel Grumberg// GET-NEXT:   },
124*e05c1b46SDaniel Grumberg// GET-NEXT:   {
125*e05c1b46SDaniel Grumberg// GET-NEXT:     "kind": "text",
126*e05c1b46SDaniel Grumberg// GET-NEXT:     "spelling": "("
127*e05c1b46SDaniel Grumberg// GET-NEXT:   },
128*e05c1b46SDaniel Grumberg// GET-NEXT:   {
129*e05c1b46SDaniel Grumberg// GET-NEXT:     "kind": "typeIdentifier",
130*e05c1b46SDaniel Grumberg// GET-NEXT:     "preciseIdentifier": "c:i",
131*e05c1b46SDaniel Grumberg// GET-NEXT:     "spelling": "unsigned int"
132*e05c1b46SDaniel Grumberg// GET-NEXT:   },
133*e05c1b46SDaniel Grumberg// GET-NEXT:   {
134*e05c1b46SDaniel Grumberg// GET-NEXT:     "kind": "text",
135*e05c1b46SDaniel Grumberg// GET-NEXT:     "spelling": ") "
136*e05c1b46SDaniel Grumberg// GET-NEXT:   },
137*e05c1b46SDaniel Grumberg// GET-NEXT:   {
138*e05c1b46SDaniel Grumberg// GET-NEXT:     "kind": "internalParam",
139*e05c1b46SDaniel Grumberg// GET-NEXT:     "spelling": "Property"
140*e05c1b46SDaniel Grumberg// GET-NEXT:   },
141*e05c1b46SDaniel Grumberg// GET-NEXT:   {
142*e05c1b46SDaniel Grumberg// GET-NEXT:     "kind": "text",
143*e05c1b46SDaniel Grumberg// GET-NEXT:     "spelling": ";"
144*e05c1b46SDaniel Grumberg// GET-NEXT:   }
145*e05c1b46SDaniel Grumberg// GET-NEXT: ],
146*e05c1b46SDaniel Grumberg// GET:      "functionSignature": {
147*e05c1b46SDaniel Grumberg// GET-NEXT:   "parameters": [
148*e05c1b46SDaniel Grumberg// GET-NEXT:     {
149*e05c1b46SDaniel Grumberg// GET-NEXT:       "declarationFragments": [
150*e05c1b46SDaniel Grumberg// GET-NEXT:         {
151*e05c1b46SDaniel Grumberg// GET-NEXT:           "kind": "text",
152*e05c1b46SDaniel Grumberg// GET-NEXT:           "spelling": "("
153*e05c1b46SDaniel Grumberg// GET-NEXT:         },
154*e05c1b46SDaniel Grumberg// GET-NEXT:         {
155*e05c1b46SDaniel Grumberg// GET-NEXT:           "kind": "typeIdentifier",
156*e05c1b46SDaniel Grumberg// GET-NEXT:           "preciseIdentifier": "c:i",
157*e05c1b46SDaniel Grumberg// GET-NEXT:           "spelling": "unsigned int"
158*e05c1b46SDaniel Grumberg// GET-NEXT:         },
159*e05c1b46SDaniel Grumberg// GET-NEXT:         {
160*e05c1b46SDaniel Grumberg// GET-NEXT:           "kind": "text",
161*e05c1b46SDaniel Grumberg// GET-NEXT:           "spelling": ") "
162*e05c1b46SDaniel Grumberg// GET-NEXT:         },
163*e05c1b46SDaniel Grumberg// GET-NEXT:         {
164*e05c1b46SDaniel Grumberg// GET-NEXT:           "kind": "internalParam",
165*e05c1b46SDaniel Grumberg// GET-NEXT:           "spelling": "Property"
166*e05c1b46SDaniel Grumberg// GET-NEXT:         }
167*e05c1b46SDaniel Grumberg// GET-NEXT:       ],
168*e05c1b46SDaniel Grumberg// GET-NEXT:       "name": "Property"
169*e05c1b46SDaniel Grumberg// GET-NEXT:     }
170*e05c1b46SDaniel Grumberg// GET-NEXT:   ],
171*e05c1b46SDaniel Grumberg// GET-NEXT:   "returns": [
172*e05c1b46SDaniel Grumberg// GET-NEXT:     {
173*e05c1b46SDaniel Grumberg// GET-NEXT:       "kind": "keyword",
174*e05c1b46SDaniel Grumberg// GET-NEXT:       "spelling": "id"
175*e05c1b46SDaniel Grumberg// GET-NEXT:     }
176*e05c1b46SDaniel Grumberg// GET-NEXT:   ]
177*e05c1b46SDaniel Grumberg// GET-NEXT: },
178*e05c1b46SDaniel Grumberg// GET:      "kind": {
179*e05c1b46SDaniel Grumberg// GET-NEXT:   "displayName": "Type Method",
180*e05c1b46SDaniel Grumberg// GET-NEXT:   "identifier": "objective-c.type.method"
181*e05c1b46SDaniel Grumberg// GET-NEXT: },
182*e05c1b46SDaniel Grumberg// GET:   "title": "getWithProperty:"
183*e05c1b46SDaniel Grumberg// GET:      "pathComponents": [
184*e05c1b46SDaniel Grumberg// GET-NEXT:   "Super",
185*e05c1b46SDaniel Grumberg// GET-NEXT:   "getWithProperty:"
186*e05c1b46SDaniel Grumberg// GET-NEXT: ]
187*e05c1b46SDaniel Grumberg
188*e05c1b46SDaniel Grumberg// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix SET
18980ae3665SDaniel Grumberg- (void)setProperty:(unsigned) Property andOtherThing: (unsigned) Thing;
190*e05c1b46SDaniel Grumberg// SET: "!testRelLabel": "memberOf $ c:objc(cs)Super(im)setProperty:andOtherThing: $ c:objc(cs)Super"
191*e05c1b46SDaniel Grumberg// SET-LABEL: "!testLabel": "c:objc(cs)Super(im)setProperty:andOtherThing:"
192*e05c1b46SDaniel Grumberg// SET: "accessLevel": "public",
193*e05c1b46SDaniel Grumberg// SET:      "declarationFragments": [
194*e05c1b46SDaniel Grumberg// SET-NEXT:   {
195*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "text",
196*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": "- ("
197*e05c1b46SDaniel Grumberg// SET-NEXT:   },
198*e05c1b46SDaniel Grumberg// SET-NEXT:   {
199*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "typeIdentifier",
200*e05c1b46SDaniel Grumberg// SET-NEXT:     "preciseIdentifier": "c:v",
201*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": "void"
202*e05c1b46SDaniel Grumberg// SET-NEXT:   },
203*e05c1b46SDaniel Grumberg// SET-NEXT:   {
204*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "text",
205*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": ") "
206*e05c1b46SDaniel Grumberg// SET-NEXT:   },
207*e05c1b46SDaniel Grumberg// SET-NEXT:   {
208*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "identifier",
209*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": "setProperty:"
210*e05c1b46SDaniel Grumberg// SET-NEXT:   },
211*e05c1b46SDaniel Grumberg// SET-NEXT:   {
212*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "text",
213*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": "("
214*e05c1b46SDaniel Grumberg// SET-NEXT:   },
215*e05c1b46SDaniel Grumberg// SET-NEXT:   {
216*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "typeIdentifier",
217*e05c1b46SDaniel Grumberg// SET-NEXT:     "preciseIdentifier": "c:i",
218*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": "unsigned int"
219*e05c1b46SDaniel Grumberg// SET-NEXT:   },
220*e05c1b46SDaniel Grumberg// SET-NEXT:   {
221*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "text",
222*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": ") "
223*e05c1b46SDaniel Grumberg// SET-NEXT:   },
224*e05c1b46SDaniel Grumberg// SET-NEXT:   {
225*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "internalParam",
226*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": "Property"
227*e05c1b46SDaniel Grumberg// SET-NEXT:   },
228*e05c1b46SDaniel Grumberg// SET-NEXT:   {
229*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "text",
230*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": " "
231*e05c1b46SDaniel Grumberg// SET-NEXT:   },
232*e05c1b46SDaniel Grumberg// SET-NEXT:   {
233*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "identifier",
234*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": "andOtherThing:"
235*e05c1b46SDaniel Grumberg// SET-NEXT:   },
236*e05c1b46SDaniel Grumberg// SET-NEXT:   {
237*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "text",
238*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": "("
239*e05c1b46SDaniel Grumberg// SET-NEXT:   },
240*e05c1b46SDaniel Grumberg// SET-NEXT:   {
241*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "typeIdentifier",
242*e05c1b46SDaniel Grumberg// SET-NEXT:     "preciseIdentifier": "c:i",
243*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": "unsigned int"
244*e05c1b46SDaniel Grumberg// SET-NEXT:   },
245*e05c1b46SDaniel Grumberg// SET-NEXT:   {
246*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "text",
247*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": ") "
248*e05c1b46SDaniel Grumberg// SET-NEXT:   },
249*e05c1b46SDaniel Grumberg// SET-NEXT:   {
250*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "internalParam",
251*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": "Thing"
252*e05c1b46SDaniel Grumberg// SET-NEXT:   },
253*e05c1b46SDaniel Grumberg// SET-NEXT:   {
254*e05c1b46SDaniel Grumberg// SET-NEXT:     "kind": "text",
255*e05c1b46SDaniel Grumberg// SET-NEXT:     "spelling": ";"
256*e05c1b46SDaniel Grumberg// SET-NEXT:   }
257*e05c1b46SDaniel Grumberg// SET-NEXT: ],
258*e05c1b46SDaniel Grumberg// SET:      "functionSignature": {
259*e05c1b46SDaniel Grumberg// SET-NEXT:   "parameters": [
260*e05c1b46SDaniel Grumberg// SET-NEXT:     {
261*e05c1b46SDaniel Grumberg// SET-NEXT:       "declarationFragments": [
262*e05c1b46SDaniel Grumberg// SET-NEXT:         {
263*e05c1b46SDaniel Grumberg// SET-NEXT:           "kind": "text",
264*e05c1b46SDaniel Grumberg// SET-NEXT:           "spelling": "("
265*e05c1b46SDaniel Grumberg// SET-NEXT:         },
266*e05c1b46SDaniel Grumberg// SET-NEXT:         {
267*e05c1b46SDaniel Grumberg// SET-NEXT:           "kind": "typeIdentifier",
268*e05c1b46SDaniel Grumberg// SET-NEXT:           "preciseIdentifier": "c:i",
269*e05c1b46SDaniel Grumberg// SET-NEXT:           "spelling": "unsigned int"
270*e05c1b46SDaniel Grumberg// SET-NEXT:         },
271*e05c1b46SDaniel Grumberg// SET-NEXT:         {
272*e05c1b46SDaniel Grumberg// SET-NEXT:           "kind": "text",
273*e05c1b46SDaniel Grumberg// SET-NEXT:           "spelling": ") "
274*e05c1b46SDaniel Grumberg// SET-NEXT:         },
275*e05c1b46SDaniel Grumberg// SET-NEXT:         {
276*e05c1b46SDaniel Grumberg// SET-NEXT:           "kind": "internalParam",
277*e05c1b46SDaniel Grumberg// SET-NEXT:           "spelling": "Property"
278*e05c1b46SDaniel Grumberg// SET-NEXT:         }
279*e05c1b46SDaniel Grumberg// SET-NEXT:       ],
280*e05c1b46SDaniel Grumberg// SET-NEXT:       "name": "Property"
281*e05c1b46SDaniel Grumberg// SET-NEXT:     },
282*e05c1b46SDaniel Grumberg// SET-NEXT:     {
283*e05c1b46SDaniel Grumberg// SET-NEXT:       "declarationFragments": [
284*e05c1b46SDaniel Grumberg// SET-NEXT:         {
285*e05c1b46SDaniel Grumberg// SET-NEXT:           "kind": "text",
286*e05c1b46SDaniel Grumberg// SET-NEXT:           "spelling": "("
287*e05c1b46SDaniel Grumberg// SET-NEXT:         },
288*e05c1b46SDaniel Grumberg// SET-NEXT:         {
289*e05c1b46SDaniel Grumberg// SET-NEXT:           "kind": "typeIdentifier",
290*e05c1b46SDaniel Grumberg// SET-NEXT:           "preciseIdentifier": "c:i",
291*e05c1b46SDaniel Grumberg// SET-NEXT:           "spelling": "unsigned int"
292*e05c1b46SDaniel Grumberg// SET-NEXT:         },
293*e05c1b46SDaniel Grumberg// SET-NEXT:         {
294*e05c1b46SDaniel Grumberg// SET-NEXT:           "kind": "text",
295*e05c1b46SDaniel Grumberg// SET-NEXT:           "spelling": ") "
296*e05c1b46SDaniel Grumberg// SET-NEXT:         },
297*e05c1b46SDaniel Grumberg// SET-NEXT:         {
298*e05c1b46SDaniel Grumberg// SET-NEXT:           "kind": "internalParam",
299*e05c1b46SDaniel Grumberg// SET-NEXT:           "spelling": "Thing"
300*e05c1b46SDaniel Grumberg// SET-NEXT:         }
301*e05c1b46SDaniel Grumberg// SET-NEXT:       ],
302*e05c1b46SDaniel Grumberg// SET-NEXT:       "name": "Thing"
303*e05c1b46SDaniel Grumberg// SET-NEXT:     }
304*e05c1b46SDaniel Grumberg// SET-NEXT:   ],
305*e05c1b46SDaniel Grumberg// SET-NEXT:   "returns": [
306*e05c1b46SDaniel Grumberg// SET-NEXT:     {
307*e05c1b46SDaniel Grumberg// SET-NEXT:       "kind": "typeIdentifier",
308*e05c1b46SDaniel Grumberg// SET-NEXT:       "preciseIdentifier": "c:v",
309*e05c1b46SDaniel Grumberg// SET-NEXT:       "spelling": "void"
310*e05c1b46SDaniel Grumberg// SET-NEXT:     }
311*e05c1b46SDaniel Grumberg// SET-NEXT:   ]
312*e05c1b46SDaniel Grumberg// SET-NEXT: },
313*e05c1b46SDaniel Grumberg// SET:      "kind": {
314*e05c1b46SDaniel Grumberg// SET-NEXT:   "displayName": "Instance Method",
315*e05c1b46SDaniel Grumberg// SET-NEXT:   "identifier": "objective-c.method"
316*e05c1b46SDaniel Grumberg// SET-NEXT: },
317*e05c1b46SDaniel Grumberg// SET:   "title": "setProperty:andOtherThing:"
3189b36e126SZixu Wang@end
3199b36e126SZixu Wang
320*e05c1b46SDaniel Grumberg// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix DERIVED
3219b36e126SZixu Wang@interface Derived : Super {
322*e05c1b46SDaniel Grumberg// DERIVED: "!testRelLabel": "inheritsFrom $ c:objc(cs)Derived $ c:objc(cs)Super"
323*e05c1b46SDaniel Grumberg
324*e05c1b46SDaniel Grumberg// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix IVAR
3259b36e126SZixu Wang  char Ivar;
326*e05c1b46SDaniel Grumberg// IVAR: "!testRelLabel": "memberOf $ c:objc(cs)Derived@Ivar $ c:objc(cs)Derived"
327*e05c1b46SDaniel Grumberg// IVAR-LABEL: "!testLabel": "c:objc(cs)Derived@Ivar"
328*e05c1b46SDaniel Grumberg// IVAR: "accessLevel": "public",
329*e05c1b46SDaniel Grumberg// IVAR:      "declarationFragments": [
330*e05c1b46SDaniel Grumberg// IVAR-NEXT:   {
331*e05c1b46SDaniel Grumberg// IVAR-NEXT:     "kind": "typeIdentifier",
332*e05c1b46SDaniel Grumberg// IVAR-NEXT:     "preciseIdentifier": "c:C",
333*e05c1b46SDaniel Grumberg// IVAR-NEXT:     "spelling": "char"
334*e05c1b46SDaniel Grumberg// IVAR-NEXT:   },
335*e05c1b46SDaniel Grumberg// IVAR-NEXT:   {
336*e05c1b46SDaniel Grumberg// IVAR-NEXT:     "kind": "text",
337*e05c1b46SDaniel Grumberg// IVAR-NEXT:     "spelling": " "
338*e05c1b46SDaniel Grumberg// IVAR-NEXT:   },
339*e05c1b46SDaniel Grumberg// IVAR-NEXT:   {
340*e05c1b46SDaniel Grumberg// IVAR-NEXT:     "kind": "identifier",
341*e05c1b46SDaniel Grumberg// IVAR-NEXT:     "spelling": "Ivar"
342*e05c1b46SDaniel Grumberg// IVAR-NEXT:   },
343*e05c1b46SDaniel Grumberg// IVAR-NEXT:   {
344*e05c1b46SDaniel Grumberg// IVAR-NEXT:     "kind": "text",
345*e05c1b46SDaniel Grumberg// IVAR-NEXT:     "spelling": ";"
346*e05c1b46SDaniel Grumberg// IVAR-NEXT:   }
347*e05c1b46SDaniel Grumberg// IVAR-NEXT: ],
348*e05c1b46SDaniel Grumberg// IVAR:      "kind": {
349*e05c1b46SDaniel Grumberg// IVAR-NEXT:   "displayName": "Instance Variable",
350*e05c1b46SDaniel Grumberg// IVAR-NEXT:   "identifier": "objective-c.ivar"
351*e05c1b46SDaniel Grumberg// IVAR-NEXT: },
352*e05c1b46SDaniel Grumberg// IVAR: "title": "Ivar"
353*e05c1b46SDaniel Grumberg// IVAR:      "pathComponents": [
354*e05c1b46SDaniel Grumberg// IVAR-NEXT:   "Derived",
355*e05c1b46SDaniel Grumberg// IVAR-NEXT:   "Ivar"
356*e05c1b46SDaniel Grumberg// IVAR-NEXT: ]
3579b36e126SZixu Wang}
3589b36e126SZixu Wang@end
3599b36e126SZixu Wang
360*e05c1b46SDaniel Grumberg// expected-no-diagnostics
361