[5.0] Make NSObject.hashValue non-overridable #1869
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is @ikesyo's change that previously landed on master in #1850.
Original description:
This PR fixes an NSObject API inconsistency between Swift 5's SDK overlays on Darwin and swift-corelibs-foundation. It also fixes several NSObject subclasses to customize hashing through the correct API,
NSObject.hash
.NSObject.hashValue
is currently declaredopen
, which matches Darwin SDK overlays in Swift 4.2 and below. Unfortunately,hashValue
was never supposed to be overridden --NSObject
subclasses are expected to customize hashing by overridingNSObject.hash
, which is a distinct property. To help clear up the confusion resulting from this subtle gotcha, last year we decided to changeNSObject.hashValue
to be non-overridable.NSObject.hashValue
([Type checker] Warn about overrides of NSObject.hashValue. swift#18407).NSObject.hashValue
was changed from@objc open
to@nonobjc public
. ([ObjectiveC] Make NSObject.hashValue non-overridable swift#20129)