| // RUN: rm -rf %t |
| // RUN: mkdir -p %t |
| // RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-module -o %t %s -disable-objc-attr-requires-foundation-module |
| // RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -parse-as-library %t/availability.swiftmodule -typecheck -emit-objc-header-path %t/availability.h -import-objc-header %S/../Inputs/empty.h -disable-objc-attr-requires-foundation-module |
| // RUN: %FileCheck %s < %t/availability.h |
| // RUN: %check-in-clang %t/availability.h |
| |
| // REQUIRES: objc_interop |
| |
| // CHECK-LABEL: @interface Availability{{$}} |
| // CHECK-NEXT: - (void)alwaysAvailable; |
| // CHECK-NEXT: - (void)alwaysUnavailable SWIFT_UNAVAILABLE; |
| // CHECK-NEXT: - (void)alwaysUnavailableTwo SWIFT_UNAVAILABLE_MSG("stuff happened"); |
| // CHECK-NEXT: - (void)alwaysUnavailableThree SWIFT_UNAVAILABLE_MSG("'alwaysUnavailableThree' has been renamed to 'bar'"); |
| // CHECK-NEXT: - (void)alwaysUnavailableFour SWIFT_UNAVAILABLE_MSG("'alwaysUnavailableFour' has been renamed to 'baz': whatever"); |
| // CHECK-NEXT: - (void)alwaysDeprecated SWIFT_DEPRECATED; |
| // CHECK-NEXT: - (void)alwaysDeprecatedTwo SWIFT_DEPRECATED_MSG("it's old"); |
| // CHECK-NEXT: - (void)alwaysDeprecatedThree SWIFT_DEPRECATED_MSG("", "qux"); |
| // CHECK-NEXT: - (void)alwaysDeprecatedFour SWIFT_DEPRECATED_MSG("use something else", "quux"); |
| // CHECK-NEXT: - (void)escapeMessage SWIFT_DEPRECATED_MSG("one\ntwo\tthree\x0Dfour\\ \"five\""); |
| // CHECK-NEXT: - (void)unicodeMessage SWIFT_DEPRECATED_MSG("über"); |
| // CHECK-NEXT: - (void)singlePlatShorthand SWIFT_AVAILABILITY(macos,introduced=10.10); |
| // CHECK-NEXT: - (void)multiPlatShorthand |
| // CHECK-DAG: SWIFT_AVAILABILITY(macos,introduced=10.11) |
| // CHECK-DAG: SWIFT_AVAILABILITY(ios,introduced=9.0) |
| // CHECK-DAG: SWIFT_AVAILABILITY(tvos,introduced=9.0) |
| // CHECK-DAG: SWIFT_AVAILABILITY(watchos,introduced=3.0) |
| // CHECK-NEXT: - (void)singlePlatIntroduced SWIFT_AVAILABILITY(ios,introduced=9.0); |
| // CHECK-NEXT: - (void)singlePlatDeprecated SWIFT_AVAILABILITY(macos,deprecated=10.10); |
| // CHECK-NEXT: - (void)singlePlatDeprecatedTwo SWIFT_AVAILABILITY(macos,deprecated=10.10,message="'singlePlatDeprecatedTwo' has been renamed to 'flubber'"); |
| // CHECK-NEXT: - (void)singlePlatDeprecatedThree SWIFT_AVAILABILITY(macos,deprecated=10.10,message="'singlePlatDeprecatedThree' has been renamed to 'fozzybear': we changed our minds"); |
| // CHECK-NEXT: - (void)singlePlatDeprecatedAlways SWIFT_AVAILABILITY(tvos,deprecated=0.0.1); |
| // CHECK-NEXT: - (void)singlePlatDeprecatedAlwaysTwo SWIFT_AVAILABILITY(macos,introduced=10.7,deprecated=10.7); |
| // CHECK-NEXT: - (void)singlePlatUnavailable SWIFT_AVAILABILITY(watchos,unavailable); |
| // CHECK-NEXT: - (void)singlePlatUnavailableTwo SWIFT_AVAILABILITY(watchos,unavailable); |
| // CHECK-NEXT: - (void)singlePlatObsoleted SWIFT_AVAILABILITY(ios,obsoleted=8.1); |
| // CHECK-NEXT: - (void)singlePlatCombined SWIFT_AVAILABILITY(macos,introduced=10.7,deprecated=10.9,obsoleted=10.10); |
| // CHECK-NEXT: - (void)multiPlatCombined |
| // CHECK-DAG: SWIFT_AVAILABILITY(macos,introduced=10.6,deprecated=10.8,obsoleted=10.9) |
| // CHECK-DAG: SWIFT_AVAILABILITY(ios,introduced=7.0,deprecated=9.0,obsoleted=10.0) |
| // CHECK-NEXT: - (void)extensionUnavailable |
| // CHECK-DAG: SWIFT_AVAILABILITY(macos_app_extension,unavailable) |
| // CHECK-DAG: SWIFT_AVAILABILITY(ios_app_extension,unavailable) |
| // CHECK-DAG: SWIFT_AVAILABILITY(tvos_app_extension,unavailable) |
| // CHECK-DAG: SWIFT_AVAILABILITY(watchos_app_extension,unavailable) |
| // CHECK-NEXT: - (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; |
| // CHECK-NEXT: - (nonnull instancetype)initWithX:(NSInteger)_ OBJC_DESIGNATED_INITIALIZER SWIFT_AVAILABILITY(macos,introduced=10.10); |
| // CHECK-NEXT: @end |
| // CHECK-LABEL: @interface AvailabilitySub |
| // CHECK-NEXT: - (nonnull instancetype)init SWIFT_UNAVAILABLE; |
| // CHECK-NEXT: - (nonnull instancetype)initWithX:(NSInteger)_ SWIFT_UNAVAILABLE; |
| // CHECK-NEXT: @end |
| @objc class Availability { |
| @objc func alwaysAvailable() {} |
| |
| @available(*, unavailable) |
| @objc func alwaysUnavailable() {} |
| @available(*, unavailable, message: "stuff happened") |
| @objc func alwaysUnavailableTwo() {} |
| @available(*, unavailable, renamed: "bar") |
| @objc func alwaysUnavailableThree() {} |
| @available(*, unavailable, message: "whatever", renamed: "baz") |
| @objc func alwaysUnavailableFour() {} |
| |
| @available(*, deprecated) |
| @objc func alwaysDeprecated() {} |
| @available(*, deprecated, message: "it's old") |
| @objc func alwaysDeprecatedTwo() {} |
| @available(*, deprecated, renamed: "qux") |
| @objc func alwaysDeprecatedThree() {} |
| @available(*, deprecated, message: "use something else", renamed: "quux") |
| @objc func alwaysDeprecatedFour() {} |
| |
| @available(*, deprecated, message: "one\ntwo\tthree\rfour\\ \"five\"") |
| @objc func escapeMessage() {} |
| @available(*, deprecated, message: "über") |
| @objc func unicodeMessage() {} |
| |
| @available(macOS 10.10, *) |
| @objc func singlePlatShorthand() {} |
| @available(macOS 10.11, iOS 9.0, tvOS 9.0, watchOS 3.0, *) |
| @objc func multiPlatShorthand() {} |
| |
| @available(iOS, introduced: 9.0) |
| @objc func singlePlatIntroduced() {} |
| @available(macOS, deprecated: 10.10) |
| @objc func singlePlatDeprecated() {} |
| @available(macOS, deprecated: 10.10, renamed: "flubber") |
| @objc func singlePlatDeprecatedTwo() {} |
| @available(macOS, deprecated: 10.10, message: "we changed our minds", renamed: "fozzybear") |
| @objc func singlePlatDeprecatedThree() {} |
| @available(tvOS, deprecated) |
| @objc func singlePlatDeprecatedAlways() {} |
| @available(macOS, introduced: 10.7, deprecated) |
| @objc func singlePlatDeprecatedAlwaysTwo() {} |
| @available(watchOS, unavailable) |
| @objc func singlePlatUnavailable() {} |
| @available(watchOS, introduced: 2.0, unavailable) |
| @objc func singlePlatUnavailableTwo() {} |
| @available(iOS, obsoleted: 8.1) |
| @objc func singlePlatObsoleted() {} |
| @available(macOS, introduced: 10.7, deprecated: 10.9, obsoleted: 10.10) |
| @objc func singlePlatCombined() {} |
| |
| @available(macOS, introduced: 10.6, deprecated: 10.8, obsoleted: 10.9) |
| @available(iOS, introduced: 7.0, deprecated: 9.0, obsoleted: 10.0) |
| @objc func multiPlatCombined() {} |
| |
| @available(macOSApplicationExtension, unavailable) |
| @available(iOSApplicationExtension, unavailable) |
| @available(tvOSApplicationExtension, unavailable) |
| @available(watchOSApplicationExtension, unavailable) |
| @objc func extensionUnavailable() {} |
| |
| @objc init() {} |
| @available(macOS 10.10, *) |
| @objc init(x _: Int) {} |
| } |
| |
| @objc class AvailabilitySub: Availability { |
| private override init() { super.init() } |
| @available(macOS 10.10, *) |
| private override init(x _: Int) { super.init() } |
| } |