Add a Fixit to Rewrite NSObject.hash(into:) Overrides

This commit is contained in:
Robert Widmann
2021-02-08 12:17:16 -08:00
parent 58110fe2df
commit 2fca132152
4 changed files with 7 additions and 5 deletions

View File

@@ -1012,10 +1012,12 @@ static void checkOverrideAccessControl(ValueDecl *baseDecl, ValueDecl *decl,
// NSObject.hashValue and NSObject.hash(into:) are not overridable;
// one should override NSObject.hash instead.
if (isNSObjectHashValue(baseDecl)) {
diags.diagnose(decl, diag::override_nsobject_hashvalue_error)
decl->diagnose(diag::override_nsobject_hashvalue_error)
.fixItReplace(SourceRange(decl->getNameLoc()), "hash");
} else if (isNSObjectHashMethod(baseDecl)) {
diags.diagnose(decl, diag::override_nsobject_hash_error);
decl->diagnose(diag::override_nsobject_hash_error)
.fixItReplace(cast<FuncDecl>(decl)->getFuncLoc(), getTokenText(tok::kw_var))
.fixItReplace(cast<FuncDecl>(decl)->getParameters()->getSourceRange(), ": Int");
} else {
diags.diagnose(decl, diag::override_of_non_open,
decl->getDescriptiveKind());

View File

@@ -231,7 +231,7 @@ extension NSObject : Equatable, Hashable {
///
/// NSObject implements this by feeding `self.hash` to the hasher.
///
/// 'NSObject.hash(into:)' is not overridable; subclasses can customize
/// `NSObject.hash(into:)` is not overridable; subclasses can customize
/// hashing by overriding the `hash` property.
public func hash(into hasher: inout Hasher) {
hasher.combine(self.hash)

View File

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

View File

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