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