// 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 // 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