mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[Type checker] Don't implicitly propagate @objc to read/modify accessors.
Fixes rdar://problem/46699152.
This commit is contained in:
@@ -1066,6 +1066,21 @@ Optional<ObjCReason> shouldMarkAsObjC(const ValueDecl *VD, bool allowImplicit) {
|
||||
if (VD->getFormalAccess() <= AccessLevel::FilePrivate)
|
||||
return false;
|
||||
|
||||
if (auto accessor = dyn_cast<AccessorDecl>(VD)) {
|
||||
switch (accessor->getAccessorKind()) {
|
||||
case AccessorKind::DidSet:
|
||||
case AccessorKind::Modify:
|
||||
case AccessorKind::Read:
|
||||
case AccessorKind::WillSet:
|
||||
return false;
|
||||
|
||||
case AccessorKind::MutableAddress:
|
||||
case AccessorKind::Address:
|
||||
case AccessorKind::Get:
|
||||
case AccessorKind::Set:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
@@ -1106,7 +1121,7 @@ Optional<ObjCReason> shouldMarkAsObjC(const ValueDecl *VD, bool allowImplicit) {
|
||||
cast<ExtensionDecl>(VD->getDeclContext())->getAttrs()
|
||||
.hasAttribute<NonObjCAttr>()))
|
||||
return None;
|
||||
if (isMemberOfObjCClassExtension(VD))
|
||||
if (isMemberOfObjCClassExtension(VD) && canInferImplicitObjC())
|
||||
return ObjCReason(ObjCReason::MemberOfObjCExtension);
|
||||
if (isMemberOfObjCMembersClass(VD) && canInferImplicitObjC())
|
||||
return ObjCReason(ObjCReason::MemberOfObjCMembersClass);
|
||||
|
||||
@@ -2312,3 +2312,18 @@ protocol ObjCProtocolWithWeakProperty {
|
||||
protocol ObjCProtocolWithUnownedProperty {
|
||||
unowned var unownedProp: AnyObject { get set } // okay
|
||||
}
|
||||
|
||||
// rdar://problem/46699152: errors about read/modify accessors being implicitly
|
||||
// marked @objc.
|
||||
@objc class MyObjCClass: NSObject {}
|
||||
|
||||
@objc
|
||||
extension MyObjCClass {
|
||||
@objc
|
||||
static var objCVarInObjCExtension: Bool {
|
||||
get {
|
||||
return true
|
||||
}
|
||||
set {}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user