Skip to content

Commit 2fca132

Browse files
committed
Add a Fixit to Rewrite NSObject.hash(into:) Overrides
1 parent 58110fe commit 2fca132

File tree

4 files changed

+7
-5
lines changed

4 files changed

+7
-5
lines changed

lib/Sema/TypeCheckDeclOverride.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,10 +1012,12 @@ static void checkOverrideAccessControl(ValueDecl *baseDecl, ValueDecl *decl,
10121012
// NSObject.hashValue and NSObject.hash(into:) are not overridable;
10131013
// one should override NSObject.hash instead.
10141014
if (isNSObjectHashValue(baseDecl)) {
1015-
diags.diagnose(decl, diag::override_nsobject_hashvalue_error)
1015+
decl->diagnose(diag::override_nsobject_hashvalue_error)
10161016
.fixItReplace(SourceRange(decl->getNameLoc()), "hash");
10171017
} else if (isNSObjectHashMethod(baseDecl)) {
1018-
diags.diagnose(decl, diag::override_nsobject_hash_error);
1018+
decl->diagnose(diag::override_nsobject_hash_error)
1019+
.fixItReplace(cast<FuncDecl>(decl)->getFuncLoc(), getTokenText(tok::kw_var))
1020+
.fixItReplace(cast<FuncDecl>(decl)->getParameters()->getSourceRange(), ": Int");
10191021
} else {
10201022
diags.diagnose(decl, diag::override_of_non_open,
10211023
decl->getDescriptiveKind());

stdlib/public/Darwin/ObjectiveC/ObjectiveC.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ extension NSObject : Equatable, Hashable {
231231
///
232232
/// NSObject implements this by feeding `self.hash` to the hasher.
233233
///
234-
/// 'NSObject.hash(into:)' is not overridable; subclasses can customize
234+
/// `NSObject.hash(into:)` is not overridable; subclasses can customize
235235
/// hashing by overriding the `hash` property.
236236
public func hash(into hasher: inout Hasher) {
237237
hasher.combine(self.hash)

test/ClangImporter/objc_override.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class MyHashableNSObject: NSObject {
116116
}
117117

118118
override func hash(into hasher: inout Hasher) {
119-
// expected-error@-1 {{'NSObject.hash(into:)' is not overridable; did you mean to override 'NSObject.hash'?}}
119+
// expected-error@-1 {{'NSObject.hash(into:)' is not overridable; did you mean to override 'NSObject.hash'?}} {{12-16=var}} {{21-48=: Int}}
120120
}
121121
}
122122

test/stdlib/NSObject-hashing.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ class Foo: NSObject {
1212
}
1313

1414
override func hash(into hasher: inout Hasher) {
15-
// expected-error@-1 {{'NSObject.hash(into:)' is not overridable; did you mean to override 'NSObject.hash'?}}
15+
// expected-error@-1 {{'NSObject.hash(into:)' is not overridable; did you mean to override 'NSObject.hash'?}} {{12-16=var}} {{21-48=: Int}}
1616
}
1717
}

0 commit comments

Comments
 (0)