Skip to content

Commit 3960c96

Browse files
authored
[pigeon] [swift] Fix PigeonError sendability conformance in Swift 6 (#8302)
Ensure `PigeonError` conforms to `Sendable` for Swift 6.0 compatibility by updating the `details` property type from `Any?` to `Sendable?`. Fixes flutter/flutter#160313
1 parent e0fa394 commit 3960c96

File tree

12 files changed

+45
-18
lines changed

12 files changed

+45
-18
lines changed

packages/pigeon/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 23.0.0
2+
3+
* **Breaking Change** [swift] Fixes a compile error about PigeonError's sendability conformance in Swift 6.
4+
* PigeonError's init now requires the "details" argument to be Sendable.
5+
16
## 22.7.4
27

38
* [dart] Fixes bug with multi-instance event channel support.

packages/pigeon/example/app/ios/Runner/Messages.g.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ import Foundation
1818
final class PigeonError: Error {
1919
let code: String
2020
let message: String?
21-
let details: Any?
21+
let details: Sendable?
2222

23-
init(code: String, message: String?, details: Any?) {
23+
init(code: String, message: String?, details: Sendable?) {
2424
self.code = code
2525
self.message = message
2626
self.details = details

packages/pigeon/lib/generator_tools.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import 'ast.dart';
1414
/// The current version of pigeon.
1515
///
1616
/// This must match the version in pubspec.yaml.
17-
const String pigeonVersion = '22.7.4';
17+
const String pigeonVersion = '23.0.0';
1818

1919
/// Read all the content from [stdin] to a String.
2020
String readStdin() {

packages/pigeon/lib/swift_generator.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2463,10 +2463,11 @@ private func nilOrValue<T>(_ value: Any?) -> T? {
24632463
() {
24642464
indent.writeln('let code: String');
24652465
indent.writeln('let message: String?');
2466-
indent.writeln('let details: Any?');
2466+
indent.writeln('let details: Sendable?');
24672467
indent.newln();
24682468
indent.writeScoped(
2469-
'init(code: String, message: String?, details: Any?) {', '}', () {
2469+
'init(code: String, message: String?, details: Sendable?) {', '}',
2470+
() {
24702471
indent.writeln('self.code = code');
24712472
indent.writeln('self.message = message');
24722473
indent.writeln('self.details = details');

packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import Foundation
1919
final class PigeonError: Error {
2020
let code: String
2121
let message: String?
22-
let details: Any?
22+
let details: Sendable?
2323

24-
init(code: String, message: String?, details: Any?) {
24+
init(code: String, message: String?, details: Sendable?) {
2525
self.code = code
2626
self.message = message
2727
self.details = details

packages/pigeon/platform_tests/test_plugin/ios/Classes/EventChannelTests.gen.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import Foundation
1919
final class EventChannelTestsError: Error {
2020
let code: String
2121
let message: String?
22-
let details: Any?
22+
let details: Sendable?
2323

24-
init(code: String, message: String?, details: Any?) {
24+
init(code: String, message: String?, details: Sendable?) {
2525
self.code = code
2626
self.message = message
2727
self.details = details

packages/pigeon/platform_tests/test_plugin/ios/Classes/ProxyApiTests.gen.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import Foundation
1919
final class ProxyApiTestsError: Error {
2020
let code: String
2121
let message: String?
22-
let details: Any?
22+
let details: Sendable?
2323

24-
init(code: String, message: String?, details: Any?) {
24+
init(code: String, message: String?, details: Sendable?) {
2525
self.code = code
2626
self.message = message
2727
self.details = details

packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import Foundation
1919
final class PigeonError: Error {
2020
let code: String
2121
let message: String?
22-
let details: Any?
22+
let details: Sendable?
2323

24-
init(code: String, message: String?, details: Any?) {
24+
init(code: String, message: String?, details: Sendable?) {
2525
self.code = code
2626
self.message = message
2727
self.details = details

packages/pigeon/platform_tests/test_plugin/macos/Classes/EventChannelTests.gen.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import Foundation
1919
final class EventChannelTestsError: Error {
2020
let code: String
2121
let message: String?
22-
let details: Any?
22+
let details: Sendable?
2323

24-
init(code: String, message: String?, details: Any?) {
24+
init(code: String, message: String?, details: Sendable?) {
2525
self.code = code
2626
self.message = message
2727
self.details = details

packages/pigeon/platform_tests/test_plugin/macos/Classes/ProxyApiTests.gen.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import Foundation
1919
final class ProxyApiTestsError: Error {
2020
let code: String
2121
let message: String?
22-
let details: Any?
22+
let details: Sendable?
2323

24-
init(code: String, message: String?, details: Any?) {
24+
init(code: String, message: String?, details: Sendable?) {
2525
self.code = code
2626
self.message = message
2727
self.details = details

packages/pigeon/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: pigeon
22
description: Code generator tool to make communication between Flutter and the host platform type-safe and easier.
33
repository: https://github.com/flutter/packages/tree/main/packages/pigeon
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+pigeon%22
5-
version: 22.7.4 # This must match the version in lib/generator_tools.dart
5+
version: 23.0.0 # This must match the version in lib/generator_tools.dart
66

77
environment:
88
sdk: ^3.4.0

packages/pigeon/test/swift_generator_test.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,27 @@ void main() {
258258
expect(code, contains('var aFloat64List: FlutterStandardTypedData? = nil'));
259259
});
260260

261+
test('gen pigeon error type', () {
262+
final Root root = Root(apis: <Api>[], classes: <Class>[], enums: <Enum>[]);
263+
final StringBuffer sink = StringBuffer();
264+
const SwiftOptions swiftOptions = SwiftOptions();
265+
const SwiftGenerator generator = SwiftGenerator();
266+
267+
generator.generate(
268+
swiftOptions,
269+
root,
270+
sink,
271+
dartPackageName: DEFAULT_PACKAGE_NAME,
272+
);
273+
final String code = sink.toString();
274+
expect(code, contains('class PigeonError: Error'));
275+
expect(code, contains('let code: String'));
276+
expect(code, contains('let message: String?'));
277+
expect(code, contains('let details: Sendable?'));
278+
expect(code,
279+
contains('init(code: String, message: String?, details: Sendable?)'));
280+
});
281+
261282
test('gen one flutter api', () {
262283
final Root root = Root(apis: <Api>[
263284
AstFlutterApi(name: 'Api', methods: <Method>[

0 commit comments

Comments
 (0)