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)
|
if (VD->getFormalAccess() <= AccessLevel::FilePrivate)
|
||||||
return false;
|
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;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1106,7 +1121,7 @@ Optional<ObjCReason> shouldMarkAsObjC(const ValueDecl *VD, bool allowImplicit) {
|
|||||||
cast<ExtensionDecl>(VD->getDeclContext())->getAttrs()
|
cast<ExtensionDecl>(VD->getDeclContext())->getAttrs()
|
||||||
.hasAttribute<NonObjCAttr>()))
|
.hasAttribute<NonObjCAttr>()))
|
||||||
return None;
|
return None;
|
||||||
if (isMemberOfObjCClassExtension(VD))
|
if (isMemberOfObjCClassExtension(VD) && canInferImplicitObjC())
|
||||||
return ObjCReason(ObjCReason::MemberOfObjCExtension);
|
return ObjCReason(ObjCReason::MemberOfObjCExtension);
|
||||||
if (isMemberOfObjCMembersClass(VD) && canInferImplicitObjC())
|
if (isMemberOfObjCMembersClass(VD) && canInferImplicitObjC())
|
||||||
return ObjCReason(ObjCReason::MemberOfObjCMembersClass);
|
return ObjCReason(ObjCReason::MemberOfObjCMembersClass);
|
||||||
|
|||||||
@@ -2312,3 +2312,18 @@ protocol ObjCProtocolWithWeakProperty {
|
|||||||
protocol ObjCProtocolWithUnownedProperty {
|
protocol ObjCProtocolWithUnownedProperty {
|
||||||
unowned var unownedProp: AnyObject { get set } // okay
|
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