|
|
@@ -1,317 +1,56 @@ |
|
|
// RUN: rm -rf %t |
|
|
// RUN: split-file %s %t |
|
|
// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ |
|
|
// RUN: %t/reference.output.json.in >> %t/reference.output.json |
|
|
// RUN: %clang -extract-api -x objective-c-header -target arm64-apple-macosx \ |
|
|
// RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s |
|
|
// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \ |
|
|
// RUN: -x objective-c-header -triple arm64-apple-macosx %s -o - -verify | FileCheck %s |
|
|
|
|
|
// Generator version is not consistent across test runs, normalize it. |
|
|
// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ |
|
|
// RUN: %t/output.json >> %t/output-normalized.json |
|
|
// RUN: diff %t/reference.output.json %t/output-normalized.json |
|
|
|
|
|
// CHECK-NOT: error: |
|
|
// CHECK-NOT: warning: |
|
|
|
|
|
//--- input.h |
|
|
@protocol MyProtocol |
|
|
@end |
|
|
|
|
|
@interface MyInterface |
|
|
@property(copy, readwrite) id<MyProtocol> obj1; |
|
|
@property(readwrite) id<MyProtocol> *obj2; |
|
|
// CHECK-LABEL: "!testLabel": "c:objc(cs)MyInterface(py)obj1" |
|
|
// CHECK: "declarationFragments": [ |
|
|
// CHECK-NEXT: { |
|
|
// CHECK-NEXT: "kind": "keyword", |
|
|
// CHECK-NEXT: "spelling": "@property" |
|
|
// CHECK-NEXT: }, |
|
|
// CHECK-NEXT: { |
|
|
// CHECK-NEXT: "kind": "text", |
|
|
// CHECK-NEXT: "spelling": " (" |
|
|
// CHECK-NEXT: }, |
|
|
// CHECK-NEXT: { |
|
|
// CHECK-NEXT: "kind": "keyword", |
|
|
// CHECK-NEXT: "spelling": "copy" |
|
|
// CHECK-NEXT: }, |
|
|
// CHECK-NEXT: { |
|
|
// CHECK-NEXT: "kind": "text", |
|
|
// CHECK-NEXT: "spelling": ", " |
|
|
// CHECK-NEXT: }, |
|
|
// CHECK-NEXT: { |
|
|
// CHECK-NEXT: "kind": "keyword", |
|
|
// CHECK-NEXT: "spelling": "readwrite" |
|
|
// CHECK-NEXT: }, |
|
|
// CHECK-NEXT: { |
|
|
// CHECK-NEXT: "kind": "text", |
|
|
// CHECK-NEXT: "spelling": ") " |
|
|
// CHECK-NEXT: }, |
|
|
// CHECK-NEXT: { |
|
|
// CHECK-NEXT: "kind": "typeIdentifier", |
|
|
// CHECK-NEXT: "preciseIdentifier": "c:Qoobjc(pl)MyProtocol", |
|
|
// CHECK-NEXT: "spelling": "id<MyProtocol>" |
|
|
// CHECK-NEXT: }, |
|
|
// CHECK-NEXT: { |
|
|
// CHECK-NEXT: "kind": "text", |
|
|
// CHECK-NEXT: "spelling": " " |
|
|
// CHECK-NEXT: }, |
|
|
// CHECK-NEXT: { |
|
|
// CHECK-NEXT: "kind": "identifier", |
|
|
// CHECK-NEXT: "spelling": "obj1" |
|
|
// CHECK-NEXT: }, |
|
|
// CHECK-NEXT: { |
|
|
// CHECK-NEXT: "kind": "text", |
|
|
// CHECK-NEXT: "spelling": ";" |
|
|
// CHECK-NEXT: } |
|
|
// CHECK-NEXT: ], |
|
|
@end |
|
|
//--- reference.output.json.in |
|
|
{ |
|
|
"metadata": { |
|
|
"formatVersion": { |
|
|
"major": 0, |
|
|
"minor": 5, |
|
|
"patch": 3 |
|
|
}, |
|
|
"generator": "?" |
|
|
}, |
|
|
"module": { |
|
|
"name": "", |
|
|
"platform": { |
|
|
"architecture": "arm64", |
|
|
"operatingSystem": { |
|
|
"minimumVersion": { |
|
|
"major": 11, |
|
|
"minor": 0, |
|
|
"patch": 0 |
|
|
}, |
|
|
"name": "macosx" |
|
|
}, |
|
|
"vendor": "apple" |
|
|
} |
|
|
}, |
|
|
"relationships": [ |
|
|
{ |
|
|
"kind": "memberOf", |
|
|
"source": "c:objc(cs)MyInterface(py)obj1", |
|
|
"target": "c:objc(cs)MyInterface", |
|
|
"targetFallback": "MyInterface" |
|
|
}, |
|
|
{ |
|
|
"kind": "memberOf", |
|
|
"source": "c:objc(cs)MyInterface(py)obj2", |
|
|
"target": "c:objc(cs)MyInterface", |
|
|
"targetFallback": "MyInterface" |
|
|
} |
|
|
], |
|
|
"symbols": [ |
|
|
{ |
|
|
"accessLevel": "public", |
|
|
"declarationFragments": [ |
|
|
{ |
|
|
"kind": "keyword", |
|
|
"spelling": "@interface" |
|
|
}, |
|
|
{ |
|
|
"kind": "text", |
|
|
"spelling": " " |
|
|
}, |
|
|
{ |
|
|
"kind": "identifier", |
|
|
"spelling": "MyInterface" |
|
|
} |
|
|
], |
|
|
"identifier": { |
|
|
"interfaceLanguage": "objective-c", |
|
|
"precise": "c:objc(cs)MyInterface" |
|
|
}, |
|
|
"kind": { |
|
|
"displayName": "Class", |
|
|
"identifier": "objective-c.class" |
|
|
}, |
|
|
"location": { |
|
|
"position": { |
|
|
"character": 11, |
|
|
"line": 3 |
|
|
}, |
|
|
"uri": "file://INPUT_DIR/input.h" |
|
|
}, |
|
|
"names": { |
|
|
"navigator": [ |
|
|
{ |
|
|
"kind": "identifier", |
|
|
"spelling": "MyInterface" |
|
|
} |
|
|
], |
|
|
"subHeading": [ |
|
|
{ |
|
|
"kind": "identifier", |
|
|
"spelling": "MyInterface" |
|
|
} |
|
|
], |
|
|
"title": "MyInterface" |
|
|
}, |
|
|
"pathComponents": [ |
|
|
"MyInterface" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"accessLevel": "public", |
|
|
"declarationFragments": [ |
|
|
{ |
|
|
"kind": "keyword", |
|
|
"spelling": "@property" |
|
|
}, |
|
|
{ |
|
|
"kind": "text", |
|
|
"spelling": " (" |
|
|
}, |
|
|
{ |
|
|
"kind": "keyword", |
|
|
"spelling": "copy" |
|
|
}, |
|
|
{ |
|
|
"kind": "text", |
|
|
"spelling": ", " |
|
|
}, |
|
|
{ |
|
|
"kind": "keyword", |
|
|
"spelling": "readwrite" |
|
|
}, |
|
|
{ |
|
|
"kind": "text", |
|
|
"spelling": ") " |
|
|
}, |
|
|
{ |
|
|
"kind": "typeIdentifier", |
|
|
"preciseIdentifier": "c:Qoobjc(pl)MyProtocol", |
|
|
"spelling": "id<MyProtocol>" |
|
|
}, |
|
|
{ |
|
|
"kind": "text", |
|
|
"spelling": " " |
|
|
}, |
|
|
{ |
|
|
"kind": "identifier", |
|
|
"spelling": "obj1" |
|
|
}, |
|
|
{ |
|
|
"kind": "text", |
|
|
"spelling": ";" |
|
|
} |
|
|
], |
|
|
"identifier": { |
|
|
"interfaceLanguage": "objective-c", |
|
|
"precise": "c:objc(cs)MyInterface(py)obj1" |
|
|
}, |
|
|
"kind": { |
|
|
"displayName": "Instance Property", |
|
|
"identifier": "objective-c.property" |
|
|
}, |
|
|
"location": { |
|
|
"position": { |
|
|
"character": 42, |
|
|
"line": 4 |
|
|
}, |
|
|
"uri": "file://INPUT_DIR/input.h" |
|
|
}, |
|
|
"names": { |
|
|
"navigator": [ |
|
|
{ |
|
|
"kind": "identifier", |
|
|
"spelling": "obj1" |
|
|
} |
|
|
], |
|
|
"subHeading": [ |
|
|
{ |
|
|
"kind": "identifier", |
|
|
"spelling": "obj1" |
|
|
} |
|
|
], |
|
|
"title": "obj1" |
|
|
}, |
|
|
"pathComponents": [ |
|
|
"MyInterface", |
|
|
"obj1" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"accessLevel": "public", |
|
|
"declarationFragments": [ |
|
|
{ |
|
|
"kind": "keyword", |
|
|
"spelling": "@property" |
|
|
}, |
|
|
{ |
|
|
"kind": "text", |
|
|
"spelling": " (" |
|
|
}, |
|
|
{ |
|
|
"kind": "keyword", |
|
|
"spelling": "readwrite" |
|
|
}, |
|
|
{ |
|
|
"kind": "text", |
|
|
"spelling": ") " |
|
|
}, |
|
|
{ |
|
|
"kind": "typeIdentifier", |
|
|
"preciseIdentifier": "c:Qoobjc(pl)MyProtocol", |
|
|
"spelling": "id<MyProtocol>" |
|
|
}, |
|
|
{ |
|
|
"kind": "text", |
|
|
"spelling": " * " |
|
|
}, |
|
|
{ |
|
|
"kind": "identifier", |
|
|
"spelling": "obj2" |
|
|
}, |
|
|
{ |
|
|
"kind": "text", |
|
|
"spelling": ";" |
|
|
} |
|
|
], |
|
|
"identifier": { |
|
|
"interfaceLanguage": "objective-c", |
|
|
"precise": "c:objc(cs)MyInterface(py)obj2" |
|
|
}, |
|
|
"kind": { |
|
|
"displayName": "Instance Property", |
|
|
"identifier": "objective-c.property" |
|
|
}, |
|
|
"location": { |
|
|
"position": { |
|
|
"character": 37, |
|
|
"line": 5 |
|
|
}, |
|
|
"uri": "file://INPUT_DIR/input.h" |
|
|
}, |
|
|
"names": { |
|
|
"navigator": [ |
|
|
{ |
|
|
"kind": "identifier", |
|
|
"spelling": "obj2" |
|
|
} |
|
|
], |
|
|
"subHeading": [ |
|
|
{ |
|
|
"kind": "identifier", |
|
|
"spelling": "obj2" |
|
|
} |
|
|
], |
|
|
"title": "obj2" |
|
|
}, |
|
|
"pathComponents": [ |
|
|
"MyInterface", |
|
|
"obj2" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"accessLevel": "public", |
|
|
"declarationFragments": [ |
|
|
{ |
|
|
"kind": "keyword", |
|
|
"spelling": "@protocol" |
|
|
}, |
|
|
{ |
|
|
"kind": "text", |
|
|
"spelling": " " |
|
|
}, |
|
|
{ |
|
|
"kind": "identifier", |
|
|
"spelling": "MyProtocol" |
|
|
} |
|
|
], |
|
|
"identifier": { |
|
|
"interfaceLanguage": "objective-c", |
|
|
"precise": "c:objc(pl)MyProtocol" |
|
|
}, |
|
|
"kind": { |
|
|
"displayName": "Protocol", |
|
|
"identifier": "objective-c.protocol" |
|
|
}, |
|
|
"location": { |
|
|
"position": { |
|
|
"character": 10, |
|
|
"line": 0 |
|
|
}, |
|
|
"uri": "file://INPUT_DIR/input.h" |
|
|
}, |
|
|
"names": { |
|
|
"navigator": [ |
|
|
{ |
|
|
"kind": "identifier", |
|
|
"spelling": "MyProtocol" |
|
|
} |
|
|
], |
|
|
"subHeading": [ |
|
|
{ |
|
|
"kind": "identifier", |
|
|
"spelling": "MyProtocol" |
|
|
} |
|
|
], |
|
|
"title": "MyProtocol" |
|
|
}, |
|
|
"pathComponents": [ |
|
|
"MyProtocol" |
|
|
] |
|
|
} |
|
|
] |
|
|
} |
|
|
|
|
|
// expected-no-diagnostics |