Skip to content

Commit 1345310

Browse files
author
Harlan Haskins
committed
[ASTPrinter] Print property observers/private(set) with @_hasStorage
1 parent 9048954 commit 1345310

File tree

3 files changed

+22
-16
lines changed

3 files changed

+22
-16
lines changed

lib/AST/ASTPrinter.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -591,11 +591,13 @@ class PrintAST : public ASTVisitor<PrintAST> {
591591
return;
592592

593593
printAccess(D->getFormalAccess());
594+
bool shouldSkipSetterAccess =
595+
llvm::is_contained(Options.ExcludeAttrList, DAK_SetterAccess);
594596

595597
if (auto storageDecl = dyn_cast<AbstractStorageDecl>(D)) {
596598
if (auto setter = storageDecl->getSetter()) {
597599
AccessLevel setterAccess = setter->getFormalAccess();
598-
if (setterAccess != D->getFormalAccess())
600+
if (setterAccess != D->getFormalAccess() && !shouldSkipSetterAccess)
599601
printAccess(setterAccess, "(set)");
600602
}
601603
}
@@ -1784,12 +1786,8 @@ void PrintAST::printAccessors(const AbstractStorageDecl *ASD) {
17841786
llvm_unreachable("simply-stored variable should have been filtered out");
17851787
case WriteImplKind::StoredWithObservers:
17861788
case WriteImplKind::InheritedWithObservers: {
1787-
bool skippedWillSet = PrintAccessor(ASD->getWillSetFunc());
1788-
bool skippedDidSet = PrintAccessor(ASD->getDidSetFunc());
1789-
if (skippedDidSet && skippedWillSet) {
1790-
PrintAccessor(ASD->getGetter());
1791-
PrintAccessor(ASD->getSetter());
1792-
}
1789+
PrintAccessor(ASD->getGetter());
1790+
PrintAccessor(ASD->getSetter());
17931791
break;
17941792
}
17951793
case WriteImplKind::Set:

test/ParseableInterface/access-filter.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,9 @@ extension UFIProto {
109109

110110
// CHECK: extension PublicStruct {{[{]$}}
111111
extension PublicStruct {
112-
// CHECK: public private(set) static var secretlySettable: Int{{$}}
112+
// CHECK: @_hasInitialValue public static var secretlySettable: Int {
113+
// CHECK-NEXT: get
114+
// CHECK-NEXT: }
113115
public private(set) static var secretlySettable: Int = 0
114116
} // CHECK: {{^[}]$}}
115117

test/attr/attr_objc.swift

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -839,19 +839,19 @@ class infer_instanceVar1 {
839839
}
840840

841841
var observingAccessorsVar1: Int {
842-
// CHECK: @objc var observingAccessorsVar1: Int {
842+
// CHECK: @_hasStorage @objc var observingAccessorsVar1: Int {
843843
willSet {}
844-
// CHECK-NEXT: {{^}} willSet {}
844+
// CHECK-NEXT: {{^}} @objc get
845845
didSet {}
846-
// CHECK-NEXT: {{^}} didSet {}
846+
// CHECK-NEXT: {{^}} @objc set
847847
}
848848

849849
@objc var observingAccessorsVar1_: Int {
850-
// CHECK: {{^}} @objc var observingAccessorsVar1_: Int {
850+
// CHECK: {{^}} @objc @_hasStorage var observingAccessorsVar1_: Int {
851851
willSet {}
852-
// CHECK-NEXT: {{^}} willSet {}
852+
// CHECK-NEXT: {{^}} @objc get
853853
didSet {}
854-
// CHECK-NEXT: {{^}} didSet {}
854+
// CHECK-NEXT: {{^}} @objc set
855855
}
856856

857857

@@ -1709,14 +1709,20 @@ class HasNSManaged {
17091709

17101710
@NSManaged
17111711
var goodManaged: Class_ObjC1
1712-
// CHECK-LABEL: {{^}} @objc @NSManaged dynamic var goodManaged: Class_ObjC1
1712+
// CHECK-LABEL: {{^}} @objc @NSManaged @_hasStorage dynamic var goodManaged: Class_ObjC1 {
1713+
// CHECK-NEXT: {{^}} @objc get
1714+
// CHECK-NEXT: {{^}} @objc set
1715+
// CHECK-NEXT: {{^}} }
17131716

17141717
@NSManaged
17151718
var badManaged: PlainStruct
17161719
// expected-error@-1 {{property cannot be marked @NSManaged because its type cannot be represented in Objective-C}}
17171720
// expected-note@-2 {{Swift structs cannot be represented in Objective-C}}
17181721
// expected-error@-3{{'dynamic' property 'badManaged' must also be '@objc'}}
1719-
// CHECK-LABEL: {{^}} @NSManaged var badManaged: PlainStruct
1722+
// CHECK-LABEL: {{^}} @NSManaged @_hasStorage var badManaged: PlainStruct {
1723+
// CHECK-NEXT: {{^}} get
1724+
// CHECK-NEXT: {{^}} set
1725+
// CHECK-NEXT: {{^}} }
17201726
}
17211727

17221728
//===---

0 commit comments

Comments
 (0)