| // RUN: rm -rf %t | |
| // RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \ | |
| // RUN: -triple arm64-apple-macosx -x objective-c-header %s -o %t/output.symbols.json -verify | |
| // RUN: FileCheck %s --input-file %t/output.symbols.json | |
| @protocol Protocol | |
| @property(class) int myProtocolTypeProp; | |
| // CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(pl)Protocol(cpy)myProtocolTypeProp $ c:objc(pl)Protocol" | |
| @property int myProtocolInstanceProp; | |
| // CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(pl)Protocol(py)myProtocolInstanceProp $ c:objc(pl)Protocol" | |
| @end | |
| @interface Interface | |
| @property(class) int myInterfaceTypeProp; | |
| // CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(cs)Interface(cpy)myInterfaceTypeProp $ c:objc(cs)Interface" | |
| @property int myInterfaceInstanceProp; | |
| // CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(cs)Interface(py)myInterfaceInstanceProp $ c:objc(cs)Interface" | |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix NULLABLE | |
| @property(nullable, strong) id myNullableProp; | |
| // CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(cs)Interface(py)myNullableProp $ c:objc(cs)Interface" | |
| // NULLABLE: "!testLabel": "c:objc(cs)Interface(py)myNullableProp" | |
| // NULLABLE: "declarationFragments": [ | |
| // NULLABLE: "kind": "keyword", | |
| // NULLABLE-NEXT: "spelling": "@property" | |
| // NULLABLE: "kind": "keyword", | |
| // NULLABLE-NEXT: "spelling": "strong" | |
| // NULLABLE: "kind": "keyword", | |
| // NULLABLE-NEXT: "spelling": "nullable" | |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix NULLRESETTABLE | |
| @property(null_resettable, strong) id myNullResettableProp; | |
| // CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(cs)Interface(py)myNullResettableProp $ c:objc(cs)Interface" | |
| // NULLRESETTABLE: "!testLabel": "c:objc(cs)Interface(py)myNullResettableProp" | |
| // NULLABLE: "declarationFragments": [ | |
| // NULLABLE: "kind": "keyword", | |
| // NULLABLE-NEXT: "spelling": "@property" | |
| // NULLABLE: "kind": "keyword", | |
| // NULLABLE-NEXT: "spelling": "strong" | |
| // NULLABLE: "kind": "keyword", | |
| // NULLABLE-NEXT: "spelling": "null_resettable" | |
| @end | |
| @interface Interface (Category) <Protocol> | |
| @property(class) int myCategoryTypeProp; | |
| // CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(cs)Interface(cpy)myCategoryTypeProp $ c:objc(cs)Interface" | |
| @property int myCategoryInstanceProp; | |
| // CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(cs)Interface(py)myCategoryInstanceProp $ c:objc(cs)Interface" | |
| @end | |
| // expected-no-diagnostics |