|
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