|
5 | 5 |
|
6 | 6 | protocol EmptySwiftProto {} |
7 | 7 |
|
| 8 | +// expected-note@+1 {{previously implemented here}} |
8 | 9 | @objc @implementation extension ObjCClass: EmptySwiftProto, EmptyObjCProto { |
9 | | - // expected-note@-1 {{previously implemented here}} |
10 | | - // expected-error@-2 {{extension for main class interface should provide implementation for instance method 'method(fromHeader4:)'}} |
11 | | - // expected-error@-3 {{extension for main class interface should provide implementation for property 'propertyFromHeader9'}} |
12 | | - // FIXME: give better diagnostic expected-error@-4 {{extension for main class interface should provide implementation for property 'propertyFromHeader8'}} |
13 | | - // FIXME: give better diagnostic expected-error@-5 {{extension for main class interface should provide implementation for property 'propertyFromHeader7'}} |
14 | | - // FIXME: give better diagnostic expected-error@-6 {{extension for main class interface should provide implementation for instance method 'method(fromHeader3:)'}} |
15 | | - // expected-error@-7 {{'@objc @implementation' extension cannot add conformance to 'EmptySwiftProto'; add this conformance with an ordinary extension}} |
16 | | - // expected-error@-8 {{'@objc @implementation' extension cannot add conformance to 'EmptyObjCProto'; add this conformance in the Objective-C header}} |
17 | | - // expected-error@-9 {{extension for main class interface should provide implementation for instance method 'extensionMethod(fromHeader2:)'}} |
| 10 | + // expected-error@-1 {{'@objc @implementation' extension cannot add conformance to 'EmptySwiftProto'; add this conformance with an ordinary extension}} |
| 11 | + // expected-error@-2 {{'@objc @implementation' extension cannot add conformance to 'EmptyObjCProto'; add this conformance in the Objective-C header}} |
| 12 | + // expected-error@-3 {{extension for main class interface does not provide all required implementations}} |
| 13 | + // expected-note@-4 {{missing instance method 'method(fromHeader4:)'}} {{none}} |
| 14 | + // expected-note@-5 {{missing property 'propertyFromHeader9'}} {{none}} |
| 15 | + // FIXME: give better diagnostic expected-note@-6 {{missing property 'propertyFromHeader8'}} {{none}} |
| 16 | + // FIXME: give better diagnostic expected-note@-7 {{missing property 'propertyFromHeader7'}} {{none}} |
| 17 | + // FIXME: give better diagnostic expected-note@-8 {{missing instance method 'method(fromHeader3:)'}} {{none}} |
| 18 | + // expected-note@-9 {{missing instance method 'extensionMethod(fromHeader2:)'}} {{none}} |
| 19 | + // expected-note@-10 {{missing property 'readonlyPropertyFromHeader7'}} |
| 20 | + // expected-note@-11 {{add stubs for missing '@implementation' requirements}} {{77-77=\n @objc(methodFromHeader3:)\n open func method(fromHeader3 param: Int32) {\n <#code#>\n \}\n\n @objc(methodFromHeader4:)\n open func method(fromHeader4 param: Int32) {\n <#code#>\n \}\n\n @objc(propertyFromHeader7)\n open var propertyFromHeader7: Int32 {\n get {\n <#code#>\n \}\n set {\n <#code#>\n \}\n \}\n\n @objc(propertyFromHeader8)\n open var propertyFromHeader8: Int32 {\n get {\n <#code#>\n \}\n set {\n <#code#>\n \}\n \}\n\n @objc(propertyFromHeader9)\n open var propertyFromHeader9: Int32 {\n get {\n <#code#>\n \}\n set {\n <#code#>\n \}\n \}\n\n @objc(readonlyPropertyFromHeader7)\n open var readonlyPropertyFromHeader7: Int32 {\n <#code#>\n \}\n\n @objc(extensionMethodFromHeader2:)\n open func extensionMethod(fromHeader2 param: Int32) {\n <#code#>\n \}\n}} |
18 | 21 |
|
19 | 22 | func method(fromHeader1: CInt) { |
20 | 23 | // OK, provides an implementation for the header's method. |
@@ -233,10 +236,12 @@ protocol EmptySwiftProto {} |
233 | 236 | // expected-error@-1 {{property 'rdar122280735' of type '(() -> ()) -> Void' does not match type '(@escaping () -> Void) -> Void' declared by the header}} |
234 | 237 | } |
235 | 238 |
|
| 239 | +// expected-note@+1 {{'PresentAdditions' previously declared here}} |
236 | 240 | @objc(PresentAdditions) @implementation extension ObjCClass { |
237 | | - // expected-note@-1 {{'PresentAdditions' previously declared here}} |
238 | | - // expected-error@-2 {{extension for category 'PresentAdditions' should provide implementation for instance method 'categoryMethod(fromHeader4:)'}} |
239 | | - // FIXME: give better diagnostic expected-error@-3 {{extension for category 'PresentAdditions' should provide implementation for instance method 'categoryMethod(fromHeader3:)'}} |
| 241 | + // expected-error@-1 {{extension for category 'PresentAdditions' does not provide all required implementations}} |
| 242 | + // expected-note@-2 {{missing instance method 'categoryMethod(fromHeader4:)'}} {{none}} |
| 243 | + // FIXME: give better diagnostic expected-note@-3 {{missing instance method 'categoryMethod(fromHeader3:)'}} {{none}} |
| 244 | + // expected-note@-4 {{add stubs for missing '@implementation' requirements}} {{62-62=\n @objc(categoryMethodFromHeader3:)\n open func categoryMethod(fromHeader3 param: Int32) {\n <#code#>\n \}\n\n @objc(categoryMethodFromHeader4:)\n open func categoryMethod(fromHeader4 param: Int32) {\n <#code#>\n \}\n}} |
240 | 245 |
|
241 | 246 | func method(fromHeader3: CInt) { |
242 | 247 | // FIXME: should emit expected-DISABLED-error@-1 {{instance method 'method(fromHeader3:)' should be implemented in extension for main class interface, not category 'PresentAdditions'}} |
@@ -295,7 +300,9 @@ protocol EmptySwiftProto {} |
295 | 300 | } |
296 | 301 |
|
297 | 302 | @objc(SwiftNameTests) @implementation extension ObjCClass { |
298 | | - // expected-error@-1 {{extension for category 'SwiftNameTests' should provide implementation for instance method 'methodSwiftName6B()'}} |
| 303 | + // expected-error@-1 {{extension for category 'SwiftNameTests' does not provide all required implementations}} |
| 304 | + // expected-note@-2 {{missing instance method 'methodSwiftName6B()'}} {{none}} |
| 305 | + // expected-note@-3 {{add stub for missing '@implementation' requirement}} {{60-60=\n @objc(methodObjCName6B)\n open func methodSwiftName6B() {\n <#code#>\n \}\n}} |
299 | 306 |
|
300 | 307 | func methodSwiftName1() { |
301 | 308 | // expected-error@-1 {{selector 'methodSwiftName1' for instance method 'methodSwiftName1()' not found in header; did you mean 'methodObjCName1'?}} {{3-3=@objc(methodObjCName1) }} |
@@ -406,7 +413,9 @@ protocol EmptySwiftProto {} |
406 | 413 | } |
407 | 414 |
|
408 | 415 | @objc(Conformance) @implementation extension ObjCClass { |
409 | | - // expected-error@-1 {{extension for category 'Conformance' should provide implementation for instance method 'requiredMethod2()'}} |
| 416 | + // expected-error@-1 {{extension for category 'Conformance' does not provide all required implementations}} |
| 417 | + // expected-note@-2 {{missing instance method 'requiredMethod2()'}} {{none}} |
| 418 | + // expected-note@-3 {{add stub for missing '@implementation' requirement}} {{57-57=\n @objc(requiredMethod2)\n open func requiredMethod2() {\n <#code#>\n \}\n}} |
410 | 419 | // no-error concerning 'optionalMethod2()' |
411 | 420 |
|
412 | 421 | func requiredMethod1() {} |
@@ -437,7 +446,9 @@ protocol EmptySwiftProto {} |
437 | 446 | } |
438 | 447 |
|
439 | 448 | @objc(InvalidMembers) @implementation extension ObjCClass { |
440 | | - // expected-error@-1 {{extension for category 'InvalidMembers' should provide implementation for instance method 'unimplementedMember()'}} |
| 449 | + // expected-error@-1 {{extension for category 'InvalidMembers' does not provide all required implementations}} |
| 450 | + // expected-note@-2 {{missing instance method 'unimplementedMember()'}} {{none}} |
| 451 | + // expected-note@-3 {{add stub for missing '@implementation' requirement}} {{60-60=\n @objc(unimplementedMember)\n open func unimplementedMember() {\n <#code#>\n \}\n}} |
441 | 452 |
|
442 | 453 | func nonObjCMethod(_: EmptySwiftProto) { |
443 | 454 | // expected-error@-1 {{method cannot be in an @objc @implementation extension of a class (without final or @nonobjc) because the type of the parameter cannot be represented in Objective-C}} |
|
0 commit comments