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