1
+ // RUN: %empty-directory(%t)
2
+ // RUN: %target-typecheck-verify-swift -sdk %clang-importer-sdk -I %t
3
+ // REQUIRES: objc_interop
4
+
5
+ import Foundation
6
+
7
+ open class InvalidOpenExtension {
8
+ open func openMethod( ) { } // No warning: Pure Swift methods can be open inside the class declaration.
9
+ open var openVar : Int { 3 } // No warning: Pure Swift properties can be open inside the class declaration.
10
+ }
11
+ extension InvalidOpenExtension {
12
+ open func nonObjcOpenMethod( ) { } // expected-warning {{non-'@objc' methods in extensions cannot be overridden; use 'public' instead}} {{3-7=public}}
13
+ open var nonObjcOpenVar : Int { 3 } // expected-warning {{non-'@objc' properties in extensions cannot be overridden; use 'public' instead}} {{3-7=public}}
14
+ @objc open func objcOpenMethod( ) { } // No warning: @objc methods can be open inside extensions.
15
+ @objc open var objcOpenVar : Int { 3 } // No warning: @objc methods can be open inside extensions.
16
+ }
17
+
18
+ // For extensions with access level less than open, '`open` modifier conflicts with...' warning will always precede the 'non-@objc member...' warning.
19
+ // For extensions with open access level, invalid open extension error will precede the 'non-@objc member...' warning.
20
+ public extension InvalidOpenExtension {
21
+ open func nonObjcOpenMethod2( ) { } // expected-warning {{'open' modifier conflicts with extension's default access of 'public'}}
22
+ open var nonObjcOpenVar2 : Int { 3 } // expected-warning {{'open' modifier conflicts with extension's default access of 'public'}}
23
+ @objc open func objcOpenMethod2( ) { } // expected-warning {{'open' modifier conflicts with extension's default access of 'public'}}
24
+ @objc open var objcOpenVar2 : Int { 3 } // expected-warning {{'open' modifier conflicts with extension's default access of 'public'}}
25
+ }
26
+
27
+ @objcMembers
28
+ open class ValidOpenExtension { }
29
+ extension ValidOpenExtension {
30
+ open func objcOpenMethod( ) { } // No warning: This declaration is implicitly @objc
31
+ open var objcOpenVar : Int { 3 } // No warning: This declaration is implicitly @objc
32
+ }
33
+
34
+ public extension ValidOpenExtension {
35
+ open func objcOpenMethod2( ) { } // expected-warning {{'open' modifier conflicts with extension's default access of 'public'}}
36
+ open var objcOpenVar2 : Int { 3 } // expected-warning {{'open' modifier conflicts with extension's default access of 'public'}}
37
+ }
0 commit comments