Skip to content

Commit ddd1cd9

Browse files
authored
Merge pull request swiftlang#35831 from CodaFi/extended-extracts
Some Cleanup Of Overriding Diagnostics
2 parents ad86290 + 2fca132 commit ddd1cd9

File tree

9 files changed

+24
-22
lines changed

9 files changed

+24
-22
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2455,8 +2455,8 @@ NOTE(overridden_near_match_here,none,
24552455
(DescriptiveDeclKind, DeclName))
24562456
ERROR(override_decl_extension,none,
24572457
"%select{|non-@objc}0 %2 %3 %select{"
2458-
"is declared in extension of %4 and cannot be overriden|"
2459-
"declared in %4 cannot be overriden from extension}1",
2458+
"is declared in extension of %4 and cannot be overridden|"
2459+
"declared in %4 cannot be overridden from extension}1",
24602460
(bool, bool, DescriptiveDeclKind, DeclName, DeclName))
24612461
NOTE(overridden_here,none,
24622462
"overridden declaration is here", ())
@@ -5402,8 +5402,8 @@ ERROR(override_nsobject_hashvalue_error,none,
54025402
"did you mean to override 'NSObject.hash'?", ())
54035403

54045404
ERROR(override_nsobject_hash_error,none,
5405-
"`NSObject.hash(into:)` is not overridable; "
5406-
"subclasses can customize hashing by overriding the `hash` property", ())
5405+
"'NSObject.hash(into:)' is not overridable; "
5406+
"did you mean to override 'NSObject.hash'?", ())
54075407

54085408
WARNING(hashvalue_implementation,none,
54095409
"'Hashable.hashValue' is deprecated as a protocol requirement; "

lib/Sema/TypeCheckDeclOverride.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,13 +1009,15 @@ static void checkOverrideAccessControl(ValueDecl *baseDecl, ValueDecl *decl,
10091009
!baseHasOpenAccess &&
10101010
baseDecl->getModuleContext() != decl->getModuleContext() &&
10111011
!isa<ConstructorDecl>(decl)) {
1012-
// NSObject.hashValue and NSObject.hash(into:) is not overridable;
1012+
// 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());
@@ -1811,7 +1813,7 @@ static bool checkSingleOverride(ValueDecl *override, ValueDecl *base) {
18111813
(isa<ExtensionDecl>(base->getDeclContext()) ||
18121814
isa<ExtensionDecl>(override->getDeclContext())) &&
18131815
!base->isObjC()) {
1814-
// Suppress this diagnostic for overrides of a non-open NSObject.Hashable
1816+
// Suppress this diagnostic for overrides of non-open NSObject.Hashable
18151817
// interfaces; these are diagnosed elsewhere. An error message complaining
18161818
// about extensions would be misleading in this case; the correct fix is to
18171819
// override NSObject.hash instead.

test/ClangImporter/objc-cross-module-override.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import ImageInitializers
1212

1313
final class MyImage : Image {
14-
// CHECK: non-@objc initializer 'init(imageLiteralResourceName:)' is declared in extension of 'Image' and cannot be overriden
14+
// CHECK: non-@objc initializer 'init(imageLiteralResourceName:)' is declared in extension of 'Image' and cannot be overridden
1515
// Make sure we aren't emitting a fixit into the extant module...
1616
// CHECK-NOT: add '@objc' to make this declaration overridable
1717
// CHECK: ImageInitializers.Image:{{.*}}: note: overridden declaration is here

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; subclasses can customize hashing by overriding the `hash` property}}
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/attr/attr_objc_override.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ class B : A {
2929
get { return self } // expected-error{{subscript getter with Objective-C selector 'objectForKeyedSubscript:' conflicts with subscript getter from superclass 'A'}}
3030
}
3131

32-
override func foo() { } // expected-error{{non-@objc instance method 'foo()' is declared in extension of 'A' and cannot be overriden}}
32+
override func foo() { } // expected-error{{non-@objc instance method 'foo()' is declared in extension of 'A' and cannot be overridden}}
3333

34-
override func wibble(_: SwiftStruct) { } // expected-error{{instance method 'wibble' is declared in extension of 'A' and cannot be overriden}}
34+
override func wibble(_: SwiftStruct) { } // expected-error{{instance method 'wibble' is declared in extension of 'A' and cannot be overridden}}
3535
}
3636

3737
extension B {
38-
override func bar() { } // expected-error{{non-@objc instance method 'bar()' declared in 'A' cannot be overriden from extension}}
38+
override func bar() { } // expected-error{{non-@objc instance method 'bar()' declared in 'A' cannot be overridden from extension}}
3939
}

test/decl/func/static_func.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ class C_Derived : C {
8383
override class func f2() {}
8484
class override func f3() {}
8585

86-
override class func ef2() {} // expected-error {{cannot be overriden}}
87-
class override func ef3() {} // expected-error {{cannot be overriden}}
86+
override class func ef2() {} // expected-error {{cannot be overridden}}
87+
class override func ef3() {} // expected-error {{cannot be overridden}}
8888
override static func f7() {} // expected-error {{static method overrides a 'final' class method}}
8989
}
9090

@@ -98,11 +98,11 @@ class C_Derived3 : C {
9898
}
9999

100100
extension C_Derived {
101-
override class func f4() {} // expected-error {{cannot be overriden}}
102-
class override func f5() {} // expected-error {{cannot be overriden}}
101+
override class func f4() {} // expected-error {{cannot be overridden}}
102+
class override func f5() {} // expected-error {{cannot be overridden}}
103103

104-
override class func ef4() {} // expected-error {{cannot be overriden}}
105-
class override func ef5() {} // expected-error {{cannot be overriden}}
104+
override class func ef4() {} // expected-error {{cannot be overridden}}
105+
class override func ef5() {} // expected-error {{cannot be overridden}}
106106
}
107107

108108
protocol P { // expected-note{{extended type declared here}}

test/decl/inherit/override.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ extension B {
4747
override func f4D() -> ObjCClassB { }
4848

4949
func f5() { } // expected-error{{overri}}
50-
func f6() -> A { } // expected-error{{instance method 'f6()' is declared in extension of 'A' and cannot be overriden}}
50+
func f6() -> A { } // expected-error{{instance method 'f6()' is declared in extension of 'A' and cannot be overridden}}
5151

5252
@objc override func f7() { }
5353
@objc override func f8() -> ObjCClassA { }

test/decl/init/basic_init.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class InitSubclass: InitClass {}
2525
// expected-note@-1{{'init(baz:)' previously overridden here}}
2626
// expected-note@-2{{'init(bar:)' previously overridden here}}
2727
extension InitSubclass {
28-
convenience init(arg: Bool) {} // expected-error{{non-@objc initializer 'init(arg:)' declared in 'InitClass' cannot be overriden from extension}}
28+
convenience init(arg: Bool) {} // expected-error{{non-@objc initializer 'init(arg:)' declared in 'InitClass' cannot be overridden from extension}}
2929
convenience override init(baz: Int) {}
3030
// expected-error@-1 {{'init(baz:)' has already been overridden}}
3131
// expected-error@-2 {{cannot override a non-dynamic class declaration from an extension}}

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; subclasses can customize hashing by overriding the `hash` property}}
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)