// RUN: rm -rf %t
// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \
// RUN: -x objective-c-header -triple arm64-apple-macosx %s -o %t/output.symbols.json -verify
@protocol Protocol
@end
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix SUPER
@interface Super <Protocol>
// SUPER: "!testRelLabel": "conformsTo $ c:objc(cs)Super $ c:objc(pl)Protocol"
// SUPER-LABEL: "!testLabel": "c:objc(cs)Super"
// SUPER: "accessLevel": "public",
// SUPER: "declarationFragments": [
// SUPER-NEXT: {
// SUPER-NEXT: "kind": "keyword",
// SUPER-NEXT: "spelling": "@interface"
// SUPER-NEXT: },
// SUPER-NEXT: {
// SUPER-NEXT: "kind": "text",
// SUPER-NEXT: "spelling": " "
// SUPER-NEXT: },
// SUPER-NEXT: {
// SUPER-NEXT: "kind": "identifier",
// SUPER-NEXT: "spelling": "Super"
// SUPER-NEXT: }
// SUPER-NEXT: ],
// SUPER: "kind": {
// SUPER-NEXT: "displayName": "Class",
// SUPER-NEXT: "identifier": "objective-c.class"
// SUPER-NEXT: },
// SUPER: "title": "Super"
// SUPER: "pathComponents": [
// SUPER-NEXT: "Super"
// SUPER-NEXT: ]
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix PROP
@property(readonly, getter=getProperty) unsigned Property;
// PROP: "!testRelLabel": "memberOf $ c:objc(cs)Super(py)Property $ c:objc(cs)Super"
// PROP: "!testLabel": "c:objc(cs)Super(py)Property"
// PROP: "accessLevel": "public",
// PROP: "declarationFragments": [
// PROP-NEXT: {
// PROP-NEXT: "kind": "keyword",
// PROP-NEXT: "spelling": "@property"
// PROP-NEXT: },
// PROP-NEXT: {
// PROP-NEXT: "kind": "text",
// PROP-NEXT: "spelling": " ("
// PROP-NEXT: },
// PROP-NEXT: {
// PROP-NEXT: "kind": "keyword",
// PROP-NEXT: "spelling": "readonly"
// PROP-NEXT: },
// PROP-NEXT: {
// PROP-NEXT: "kind": "text",
// PROP-NEXT: "spelling": ", "
// PROP-NEXT: },
// PROP-NEXT: {
// PROP-NEXT: "kind": "keyword",
// PROP-NEXT: "spelling": "getter"
// PROP-NEXT: },
// PROP-NEXT: {
// PROP-NEXT: "kind": "text",
// PROP-NEXT: "spelling": "="
// PROP-NEXT: },
// PROP-NEXT: {
// PROP-NEXT: "kind": "identifier",
// PROP-NEXT: "spelling": "getProperty"
// PROP-NEXT: },
// PROP-NEXT: {
// PROP-NEXT: "kind": "text",
// PROP-NEXT: "spelling": ") "
// PROP-NEXT: },
// PROP-NEXT: {
// PROP-NEXT: "kind": "typeIdentifier",
// PROP-NEXT: "preciseIdentifier": "c:i",
// PROP-NEXT: "spelling": "unsigned int"
// PROP-NEXT: },
// PROP-NEXT: {
// PROP-NEXT: "kind": "text",
// PROP-NEXT: "spelling": " "
// PROP-NEXT: },
// PROP-NEXT: {
// PROP-NEXT: "kind": "identifier",
// PROP-NEXT: "spelling": "Property"
// PROP-NEXT: },
// PROP-NEXT: {
// PROP-NEXT: "kind": "text",
// PROP-NEXT: "spelling": ";"
// PROP-NEXT: }
// PROP-NEXT: ],
// PROP: "kind": {
// PROP-NEXT: "displayName": "Instance Property",
// PROP-NEXT: "identifier": "objective-c.property"
// PROP-NEXT: },
// PROP: "title": "Property"
// PROP: "pathComponents": [
// PROP-NEXT: "Super",
// PROP-NEXT: "Property"
// PROP-NEXT: ]
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GET
+ (id)getWithProperty:(unsigned) Property;
// GET: "!testRelLabel": "memberOf $ c:objc(cs)Super(cm)getWithProperty: $ c:objc(cs)Super"
// GET-LABEL: "!testLabel": "c:objc(cs)Super(cm)getWithProperty:"
// GET: "accessLevel": "public",
// GET: "declarationFragments": [
// GET-NEXT: {
// GET-NEXT: "kind": "text",
// GET-NEXT: "spelling": "+ ("
// GET-NEXT: },
// GET-NEXT: {
// GET-NEXT: "kind": "keyword",
// GET-NEXT: "spelling": "id"
// GET-NEXT: },
// GET-NEXT: {
// GET-NEXT: "kind": "text",
// GET-NEXT: "spelling": ") "
// GET-NEXT: },
// GET-NEXT: {
// GET-NEXT: "kind": "identifier",
// GET-NEXT: "spelling": "getWithProperty:"
// GET-NEXT: },
// GET-NEXT: {
// GET-NEXT: "kind": "text",
// GET-NEXT: "spelling": "("
// GET-NEXT: },
// GET-NEXT: {
// GET-NEXT: "kind": "typeIdentifier",
// GET-NEXT: "preciseIdentifier": "c:i",
// GET-NEXT: "spelling": "unsigned int"
// GET-NEXT: },
// GET-NEXT: {
// GET-NEXT: "kind": "text",
// GET-NEXT: "spelling": ") "
// GET-NEXT: },
// GET-NEXT: {
// GET-NEXT: "kind": "internalParam",
// GET-NEXT: "spelling": "Property"
// GET-NEXT: },
// GET-NEXT: {
// GET-NEXT: "kind": "text",
// GET-NEXT: "spelling": ";"
// GET-NEXT: }
// GET-NEXT: ],
// GET: "functionSignature": {
// GET-NEXT: "parameters": [
// GET-NEXT: {
// GET-NEXT: "declarationFragments": [
// GET-NEXT: {
// GET-NEXT: "kind": "text",
// GET-NEXT: "spelling": "("
// GET-NEXT: },
// GET-NEXT: {
// GET-NEXT: "kind": "typeIdentifier",
// GET-NEXT: "preciseIdentifier": "c:i",
// GET-NEXT: "spelling": "unsigned int"
// GET-NEXT: },
// GET-NEXT: {
// GET-NEXT: "kind": "text",
// GET-NEXT: "spelling": ") "
// GET-NEXT: },
// GET-NEXT: {
// GET-NEXT: "kind": "internalParam",
// GET-NEXT: "spelling": "Property"
// GET-NEXT: }
// GET-NEXT: ],
// GET-NEXT: "name": "Property"
// GET-NEXT: }
// GET-NEXT: ],
// GET-NEXT: "returns": [
// GET-NEXT: {
// GET-NEXT: "kind": "keyword",
// GET-NEXT: "spelling": "id"
// GET-NEXT: }
// GET-NEXT: ]
// GET-NEXT: },
// GET: "kind": {
// GET-NEXT: "displayName": "Type Method",
// GET-NEXT: "identifier": "objective-c.type.method"
// GET-NEXT: },
// GET: "title": "getWithProperty:"
// GET: "pathComponents": [
// GET-NEXT: "Super",
// GET-NEXT: "getWithProperty:"
// GET-NEXT: ]
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix SET
- (void)setProperty:(unsigned) Property andOtherThing: (unsigned) Thing;
// SET: "!testRelLabel": "memberOf $ c:objc(cs)Super(im)setProperty:andOtherThing: $ c:objc(cs)Super"
// SET-LABEL: "!testLabel": "c:objc(cs)Super(im)setProperty:andOtherThing:"
// SET: "accessLevel": "public",
// SET: "declarationFragments": [
// SET-NEXT: {
// SET-NEXT: "kind": "text",
// SET-NEXT: "spelling": "- ("
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "typeIdentifier",
// SET-NEXT: "preciseIdentifier": "c:v",
// SET-NEXT: "spelling": "void"
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "text",
// SET-NEXT: "spelling": ") "
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "identifier",
// SET-NEXT: "spelling": "setProperty:"
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "text",
// SET-NEXT: "spelling": "("
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "typeIdentifier",
// SET-NEXT: "preciseIdentifier": "c:i",
// SET-NEXT: "spelling": "unsigned int"
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "text",
// SET-NEXT: "spelling": ") "
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "internalParam",
// SET-NEXT: "spelling": "Property"
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "text",
// SET-NEXT: "spelling": " "
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "identifier",
// SET-NEXT: "spelling": "andOtherThing:"
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "text",
// SET-NEXT: "spelling": "("
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "typeIdentifier",
// SET-NEXT: "preciseIdentifier": "c:i",
// SET-NEXT: "spelling": "unsigned int"
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "text",
// SET-NEXT: "spelling": ") "
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "internalParam",
// SET-NEXT: "spelling": "Thing"
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "text",
// SET-NEXT: "spelling": ";"
// SET-NEXT: }
// SET-NEXT: ],
// SET: "functionSignature": {
// SET-NEXT: "parameters": [
// SET-NEXT: {
// SET-NEXT: "declarationFragments": [
// SET-NEXT: {
// SET-NEXT: "kind": "text",
// SET-NEXT: "spelling": "("
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "typeIdentifier",
// SET-NEXT: "preciseIdentifier": "c:i",
// SET-NEXT: "spelling": "unsigned int"
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "text",
// SET-NEXT: "spelling": ") "
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "internalParam",
// SET-NEXT: "spelling": "Property"
// SET-NEXT: }
// SET-NEXT: ],
// SET-NEXT: "name": "Property"
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "declarationFragments": [
// SET-NEXT: {
// SET-NEXT: "kind": "text",
// SET-NEXT: "spelling": "("
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "typeIdentifier",
// SET-NEXT: "preciseIdentifier": "c:i",
// SET-NEXT: "spelling": "unsigned int"
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "text",
// SET-NEXT: "spelling": ") "
// SET-NEXT: },
// SET-NEXT: {
// SET-NEXT: "kind": "internalParam",
// SET-NEXT: "spelling": "Thing"
// SET-NEXT: }
// SET-NEXT: ],
// SET-NEXT: "name": "Thing"
// SET-NEXT: }
// SET-NEXT: ],
// SET-NEXT: "returns": [
// SET-NEXT: {
// SET-NEXT: "kind": "typeIdentifier",
// SET-NEXT: "preciseIdentifier": "c:v",
// SET-NEXT: "spelling": "void"
// SET-NEXT: }
// SET-NEXT: ]
// SET-NEXT: },
// SET: "kind": {
// SET-NEXT: "displayName": "Instance Method",
// SET-NEXT: "identifier": "objective-c.method"
// SET-NEXT: },
// SET: "title": "setProperty:andOtherThing:"
@end
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix DERIVED
@interface Derived : Super {
// DERIVED: "!testRelLabel": "inheritsFrom $ c:objc(cs)Derived $ c:objc(cs)Super"
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix IVAR
char Ivar;
// IVAR: "!testRelLabel": "memberOf $ c:objc(cs)Derived@Ivar $ c:objc(cs)Derived"
// IVAR-LABEL: "!testLabel": "c:objc(cs)Derived@Ivar"
// IVAR: "accessLevel": "public",
// IVAR: "declarationFragments": [
// IVAR-NEXT: {
// IVAR-NEXT: "kind": "typeIdentifier",
// IVAR-NEXT: "preciseIdentifier": "c:C",
// IVAR-NEXT: "spelling": "char"
// IVAR-NEXT: },
// IVAR-NEXT: {
// IVAR-NEXT: "kind": "text",
// IVAR-NEXT: "spelling": " "
// IVAR-NEXT: },
// IVAR-NEXT: {
// IVAR-NEXT: "kind": "identifier",
// IVAR-NEXT: "spelling": "Ivar"
// IVAR-NEXT: },
// IVAR-NEXT: {
// IVAR-NEXT: "kind": "text",
// IVAR-NEXT: "spelling": ";"
// IVAR-NEXT: }
// IVAR-NEXT: ],
// IVAR: "kind": {
// IVAR-NEXT: "displayName": "Instance Variable",
// IVAR-NEXT: "identifier": "objective-c.ivar"
// IVAR-NEXT: },
// IVAR: "title": "Ivar"
// IVAR: "pathComponents": [
// IVAR-NEXT: "Derived",
// IVAR-NEXT: "Ivar"
// IVAR-NEXT: ]
}
@end
// expected-no-diagnostics