Clang's AST builder uses the `getPropertyAttributesAsWritten()` method that contains the bitmasks of only the attributes present in the source, and not the default attributes that are present in `getPropertyAttributes()`. This method was relevant in the past when two separate enums existed for Objective-C property attributes, and had to be updated whenever new property attributes were introduced. As of this commit, nullability attributes are not present when written due to the method not containing the bitmask comparison for the `nullable` and `null_resettable` attributes. 9721fbf85b83c1cb67cea542c5558f99a07766cf consolidated the two property attribute enums into a single enum. With this change, the AST can directly store the written attributes without having to construct the bitmask again. This commit removes the `getPropertyAttributesAsWritten()` method and updates the AST to directly store the written attributes instead. rdar://131053727
52 lines
2.5 KiB
Objective-C
52 lines
2.5 KiB
Objective-C
// 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
|