diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 8fde584cee9..47dce97fc0b 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 19.0.0 +* **Breaking Change** [swift] Removes `FlutterError` in favor of `PigeonError`. * Updates minimum supported SDK version to Flutter 3.16/Dart 3.2. ## 18.0.1 diff --git a/packages/pigeon/README.md b/packages/pigeon/README.md index dfa4e9847d7..2eb938092a1 100644 --- a/packages/pigeon/README.md +++ b/packages/pigeon/README.md @@ -53,8 +53,7 @@ should be returned via the provided callback. To pass custom details into `PlatformException` for error handling, use `FlutterError` in your Host API. [Example](./example/README.md#HostApi_Example). -To use `FlutterError` in Swift you must first extend a standard error. -[Example](./example/README.md#AppDelegate.swift). +For swift, use `PigeonError` instead of `FlutterError` when throwing an error. See [Example#Swift](./example/README.md#Swift) for more details. #### Objective-C and C++ diff --git a/packages/pigeon/example/README.md b/packages/pigeon/example/README.md index 8e22079b47a..46e8c643b1d 100644 --- a/packages/pigeon/example/README.md +++ b/packages/pigeon/example/README.md @@ -115,12 +115,9 @@ Future sendMessage(String messageText) { ### Swift This is the code that will use the generated Swift code to receive calls from Flutter. -packages/pigeon/example/app/ios/Runner/AppDelegate.swift +Unlike other languages, when throwing an error, use `PigeonError` instead of `FlutterError`, as `FlutterError` does not conform to `Swift.Error`. ```swift -// This extension of Error is required to do use FlutterError in any Swift code. -extension FlutterError: Error {} - private class PigeonApiImplementation: ExampleHostApi { func getHostLanguage() throws -> String { return "Swift" @@ -128,14 +125,14 @@ private class PigeonApiImplementation: ExampleHostApi { func add(_ a: Int64, to b: Int64) throws -> Int64 { if a < 0 || b < 0 { - throw FlutterError(code: "code", message: "message", details: "details") + throw PigeonError(code: "code", message: "message", details: "details") } return a + b } func sendMessage(message: MessageData, completion: @escaping (Result) -> Void) { if message.code == Code.one { - completion(.failure(FlutterError(code: "code", message: "message", details: "details"))) + completion(.failure(PigeonError(code: "code", message: "message", details: "details"))) return } completion(.success(true)) diff --git a/packages/pigeon/example/app/ios/Runner/AppDelegate.swift b/packages/pigeon/example/app/ios/Runner/AppDelegate.swift index f259b759085..51119e23fa3 100644 --- a/packages/pigeon/example/app/ios/Runner/AppDelegate.swift +++ b/packages/pigeon/example/app/ios/Runner/AppDelegate.swift @@ -6,9 +6,6 @@ import Flutter import UIKit // #docregion swift-class -// This extension of Error is required to do use FlutterError in any Swift code. -extension FlutterError: Error {} - private class PigeonApiImplementation: ExampleHostApi { func getHostLanguage() throws -> String { return "Swift" @@ -16,14 +13,14 @@ private class PigeonApiImplementation: ExampleHostApi { func add(_ a: Int64, to b: Int64) throws -> Int64 { if a < 0 || b < 0 { - throw FlutterError(code: "code", message: "message", details: "details") + throw PigeonError(code: "code", message: "message", details: "details") } return a + b } func sendMessage(message: MessageData, completion: @escaping (Result) -> Void) { if message.code == Code.one { - completion(.failure(FlutterError(code: "code", message: "message", details: "details"))) + completion(.failure(PigeonError(code: "code", message: "message", details: "details"))) return } completion(.success(true)) diff --git a/packages/pigeon/example/app/ios/Runner/Messages.g.swift b/packages/pigeon/example/app/ios/Runner/Messages.g.swift index 7155583cfab..51b3cfa61de 100644 --- a/packages/pigeon/example/app/ios/Runner/Messages.g.swift +++ b/packages/pigeon/example/app/ios/Runner/Messages.g.swift @@ -14,11 +14,36 @@ import Foundation #error("Unsupported platform.") #endif +/// Error class for passing custom error details to Dart side. +final class PigeonError: Error { + let code: String + let message: String? + let details: Any? + + init(code: String, message: String?, details: Any?) { + self.code = code + self.message = message + self.details = details + } + + var localizedDescription: String { + return + "PigeonError(code: \(code), message: \(message ?? ""), details: \(details ?? "")" + } +} + private func wrapResult(_ result: Any?) -> [Any?] { return [result] } private func wrapError(_ error: Any) -> [Any?] { + if let pigeonError = error as? PigeonError { + return [ + pigeonError.code, + pigeonError.message, + pigeonError.details, + ] + } if let flutterError = error as? FlutterError { return [ flutterError.code, @@ -33,8 +58,8 @@ private func wrapError(_ error: Any) -> [Any?] { ] } -private func createConnectionError(withChannelName channelName: String) -> FlutterError { - return FlutterError( +private func createConnectionError(withChannelName channelName: String) -> PigeonError { + return PigeonError( code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", details: "") } @@ -194,7 +219,7 @@ class ExampleHostApiSetup { /// Generated protocol from Pigeon that represents Flutter messages that can be called from Swift. protocol MessageFlutterApiProtocol { func flutterMethod( - aString aStringArg: String?, completion: @escaping (Result) -> Void) + aString aStringArg: String?, completion: @escaping (Result) -> Void) } class MessageFlutterApi: MessageFlutterApiProtocol { private let binaryMessenger: FlutterBinaryMessenger @@ -204,7 +229,7 @@ class MessageFlutterApi: MessageFlutterApiProtocol { self.messageChannelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : "" } func flutterMethod( - aString aStringArg: String?, completion: @escaping (Result) -> Void + aString aStringArg: String?, completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_example_package.MessageFlutterApi.flutterMethod\(messageChannelSuffix)" @@ -218,11 +243,11 @@ class MessageFlutterApi: MessageFlutterApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index 98f27ad0fec..e11c448070f 100644 --- a/packages/pigeon/lib/generator_tools.dart +++ b/packages/pigeon/lib/generator_tools.dart @@ -13,7 +13,7 @@ import 'ast.dart'; /// The current version of pigeon. /// /// This must match the version in pubspec.yaml. -const String pigeonVersion = '18.0.1'; +const String pigeonVersion = '19.0.0'; /// Prefix for all local variables in methods. /// diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 4b3ce09574f..42da8b060f1 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -705,6 +705,7 @@ class SwiftGeneratorAdapter implements GeneratorAdapter { ? _lineReader( path.posix.join(options.basePath ?? '', options.copyrightHeader)) : null, + errorClassName: swiftOptions.errorClassName, )); const SwiftGenerator generator = SwiftGenerator(); generator.generate( diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index b644e561d5e..db5701e371b 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -19,16 +19,21 @@ class SwiftOptions { /// Creates a [SwiftOptions] object const SwiftOptions({ this.copyrightHeader, + this.errorClassName, }); /// A copyright header that will get prepended to generated code. final Iterable? copyrightHeader; + /// The name of the error class used for passing custom error parameters. + final String? errorClassName; + /// Creates a [SwiftOptions] from a Map representation where: /// `x = SwiftOptions.fromList(x.toMap())`. static SwiftOptions fromList(Map map) { return SwiftOptions( copyrightHeader: map['copyrightHeader'] as Iterable?, + errorClassName: map['errorClassName'] as String?, ); } @@ -37,6 +42,7 @@ class SwiftOptions { Map toMap() { final Map result = { if (copyrightHeader != null) 'copyrightHeader': copyrightHeader!, + if (errorClassName != null) 'errorClassName': errorClassName!, }; return result; } @@ -316,7 +322,7 @@ class SwiftGenerator extends StructuredGenerator { name: func.name, parameters: func.parameters, returnType: func.returnType, - errorTypeName: 'FlutterError', + errorTypeName: _getErrorClassName(generatorOptions), isAsynchronous: true, swiftFunction: func.swiftFunction, getParameterName: _getSafeArgumentName, @@ -350,6 +356,7 @@ class SwiftGenerator extends StructuredGenerator { indent, func.documentationComments, _docCommentSpec); _writeFlutterMethod( indent, + generatorOptions: generatorOptions, name: func.name, channelName: makeChannelName(api, func, dartPackageName), parameters: func.parameters, @@ -614,10 +621,20 @@ class SwiftGenerator extends StructuredGenerator { }); } - void _writeWrapError(Indent indent) { + void _writeWrapError(SwiftOptions generatorOptions, Indent indent) { indent.newln(); indent.write('private func wrapError(_ error: Any) -> [Any?] '); indent.addScoped('{', '}', () { + indent.write( + 'if let pigeonError = error as? ${_getErrorClassName(generatorOptions)} '); + indent.addScoped('{', '}', () { + indent.write('return '); + indent.addScoped('[', ']', () { + indent.writeln('pigeonError.code,'); + indent.writeln('pigeonError.message,'); + indent.writeln('pigeonError.details,'); + }); + }); indent.write('if let flutterError = error as? FlutterError '); indent.addScoped('{', '}', () { indent.write('return '); @@ -645,13 +662,14 @@ private func nilOrValue(_ value: Any?) -> T? { }'''); } - void _writeCreateConnectionError(Indent indent) { + void _writeCreateConnectionError( + SwiftOptions generatorOptions, Indent indent) { indent.newln(); indent.writeScoped( - 'private func createConnectionError(withChannelName channelName: String) -> FlutterError {', + 'private func createConnectionError(withChannelName channelName: String) -> ${_getErrorClassName(generatorOptions)} {', '}', () { indent.writeln( - 'return FlutterError(code: "channel-error", message: "Unable to establish connection on channel: \'\\(channelName)\'.", details: "")'); + 'return ${_getErrorClassName(generatorOptions)}(code: "channel-error", message: "Unable to establish connection on channel: \'\\(channelName)\'.", details: "")'); }); } @@ -669,19 +687,23 @@ private func nilOrValue(_ value: Any?) -> T? { .whereType() .any((Api api) => api.methods.isNotEmpty); + _writePigeonError(generatorOptions, indent); + if (hasHostApi) { _writeWrapResult(indent); - _writeWrapError(indent); + _writeWrapError(generatorOptions, indent); } if (hasFlutterApi) { - _writeCreateConnectionError(indent); + _writeCreateConnectionError(generatorOptions, indent); } + _writeIsNullish(indent); _writeNilOrValue(indent); } void _writeFlutterMethod( Indent indent, { + required SwiftOptions generatorOptions, required String name, required String channelName, required List parameters, @@ -693,7 +715,7 @@ private func nilOrValue(_ value: Any?) -> T? { name: name, parameters: parameters, returnType: returnType, - errorTypeName: 'FlutterError', + errorTypeName: _getErrorClassName(generatorOptions), isAsynchronous: true, swiftFunction: swiftFunction, getParameterName: _getSafeArgumentName, @@ -735,12 +757,12 @@ private func nilOrValue(_ value: Any?) -> T? { indent.writeln('let message: String? = nilOrValue(listResponse[1])'); indent.writeln('let details: String? = nilOrValue(listResponse[2])'); indent.writeln( - 'completion(.failure(FlutterError(code: code, message: message, details: details)))'); + 'completion(.failure(${_getErrorClassName(generatorOptions)}(code: code, message: message, details: details)))'); }, addTrailingNewline: false); if (!returnType.isNullable && !returnType.isVoid) { indent.addScoped('else if listResponse[0] == nil {', '} ', () { indent.writeln( - 'completion(.failure(FlutterError(code: "null-error", message: "Flutter api returned null value for non-null return value.", details: "")))'); + 'completion(.failure(${_getErrorClassName(generatorOptions)}(code: "null-error", message: "Flutter api returned null value for non-null return value.", details: "")))'); }, addTrailingNewline: false); } indent.addScoped('else {', '}', () { @@ -870,11 +892,41 @@ private func nilOrValue(_ value: Any?) -> T? { indent.writeln('$varChannelName.setMessageHandler(nil)'); }); } + + void _writePigeonError(SwiftOptions generatorOptions, Indent indent) { + indent.newln(); + indent.writeln( + '/// Error class for passing custom error details to Dart side.'); + indent.writeScoped( + 'final class ${_getErrorClassName(generatorOptions)}: Error {', '}', + () { + indent.writeln('let code: String'); + indent.writeln('let message: String?'); + indent.writeln('let details: Any?'); + indent.newln(); + indent.writeScoped( + 'init(code: String, message: String?, details: Any?) {', '}', () { + indent.writeln('self.code = code'); + indent.writeln('self.message = message'); + indent.writeln('self.details = details'); + }); + indent.newln(); + indent.writeScoped('var localizedDescription: String {', '}', () { + indent.writeScoped('return', '', () { + indent.writeln( + '"${_getErrorClassName(generatorOptions)}(code: \\(code), message: \\(message ?? ""), details: \\(details ?? "")"'); + }, addTrailingNewline: false); + }); + }); + } } /// Calculates the name of the codec that will be generated for [api]. String _getCodecName(Api api) => '${api.name}Codec'; +String _getErrorClassName(SwiftOptions generatorOptions) => + generatorOptions.errorClassName ?? 'PigeonError'; + String _getArgumentName(int count, NamedType argument) => argument.name.isEmpty ? 'arg$count' : argument.name; diff --git a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/RunnerTests.swift b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/RunnerTests.swift index e86e5c948d1..4e02aa6e24b 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/RunnerTests.swift +++ b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/RunnerTests.swift @@ -48,14 +48,16 @@ class RunnerTests: XCTestCase { } class FlutterApiFromProtocol: FlutterSmallApiProtocol { - func echo(string aStringArg: String, completion: @escaping (Result) -> Void) - { + func echo( + string aStringArg: String, + completion: @escaping (Result) -> Void + ) { completion(.success(aStringArg)) } func echo( _ msgArg: test_plugin.TestMessage, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { completion(.success(msgArg)) } diff --git a/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift index 717985e7a4b..c54100d2db4 100644 --- a/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift +++ b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift @@ -15,11 +15,36 @@ import Foundation #error("Unsupported platform.") #endif +/// Error class for passing custom error details to Dart side. +final class PigeonError: Error { + let code: String + let message: String? + let details: Any? + + init(code: String, message: String?, details: Any?) { + self.code = code + self.message = message + self.details = details + } + + var localizedDescription: String { + return + "PigeonError(code: \(code), message: \(message ?? ""), details: \(details ?? "")" + } +} + private func wrapResult(_ result: Any?) -> [Any?] { return [result] } private func wrapError(_ error: Any) -> [Any?] { + if let pigeonError = error as? PigeonError { + return [ + pigeonError.code, + pigeonError.message, + pigeonError.details, + ] + } if let flutterError = error as? FlutterError { return [ flutterError.code, @@ -34,8 +59,8 @@ private func wrapError(_ error: Any) -> [Any?] { ] } -private func createConnectionError(withChannelName channelName: String) -> FlutterError { - return FlutterError( +private func createConnectionError(withChannelName channelName: String) -> PigeonError { + return PigeonError( code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", details: "") } @@ -2438,86 +2463,85 @@ class FlutterIntegrationCoreApiCodec: FlutterStandardMessageCodec { protocol FlutterIntegrationCoreApiProtocol { /// A no-op function taking no arguments and returning no value, to sanity /// test basic calling. - func noop(completion: @escaping (Result) -> Void) + func noop(completion: @escaping (Result) -> Void) /// Responds with an error from an async function returning a value. - func throwError(completion: @escaping (Result) -> Void) + func throwError(completion: @escaping (Result) -> Void) /// Responds with an error from an async void function. - func throwErrorFromVoid(completion: @escaping (Result) -> Void) + func throwErrorFromVoid(completion: @escaping (Result) -> Void) /// Returns the passed object, to test serialization and deserialization. func echo( - _ everythingArg: AllTypes, completion: @escaping (Result) -> Void) + _ everythingArg: AllTypes, completion: @escaping (Result) -> Void) /// Returns the passed object, to test serialization and deserialization. func echoNullable( _ everythingArg: AllNullableTypes?, - completion: @escaping (Result) -> Void) + completion: @escaping (Result) -> Void) /// Returns passed in arguments of multiple types. /// /// Tests multiple-arity FlutterApi handling. func sendMultipleNullableTypes( aBool aNullableBoolArg: Bool?, anInt aNullableIntArg: Int64?, aString aNullableStringArg: String?, - completion: @escaping (Result) -> Void) + completion: @escaping (Result) -> Void) /// Returns the passed object, to test serialization and deserialization. func echoNullable( _ everythingArg: AllNullableTypesWithoutRecursion?, - completion: @escaping (Result) -> Void) + completion: @escaping (Result) -> Void) /// Returns passed in arguments of multiple types. /// /// Tests multiple-arity FlutterApi handling. func sendMultipleNullableTypesWithoutRecursion( aBool aNullableBoolArg: Bool?, anInt aNullableIntArg: Int64?, aString aNullableStringArg: String?, - completion: @escaping (Result) -> Void) + completion: @escaping (Result) -> Void) /// Returns the passed boolean, to test serialization and deserialization. - func echo(_ aBoolArg: Bool, completion: @escaping (Result) -> Void) + func echo(_ aBoolArg: Bool, completion: @escaping (Result) -> Void) /// Returns the passed int, to test serialization and deserialization. - func echo(_ anIntArg: Int64, completion: @escaping (Result) -> Void) + func echo(_ anIntArg: Int64, completion: @escaping (Result) -> Void) /// Returns the passed double, to test serialization and deserialization. - func echo(_ aDoubleArg: Double, completion: @escaping (Result) -> Void) + func echo(_ aDoubleArg: Double, completion: @escaping (Result) -> Void) /// Returns the passed string, to test serialization and deserialization. - func echo(_ aStringArg: String, completion: @escaping (Result) -> Void) + func echo(_ aStringArg: String, completion: @escaping (Result) -> Void) /// Returns the passed byte list, to test serialization and deserialization. func echo( _ listArg: FlutterStandardTypedData, - completion: @escaping (Result) -> Void) + completion: @escaping (Result) -> Void) /// Returns the passed list, to test serialization and deserialization. - func echo(_ listArg: [Any?], completion: @escaping (Result<[Any?], FlutterError>) -> Void) + func echo(_ listArg: [Any?], completion: @escaping (Result<[Any?], PigeonError>) -> Void) /// Returns the passed map, to test serialization and deserialization. func echo( - _ aMapArg: [String?: Any?], - completion: @escaping (Result<[String?: Any?], FlutterError>) -> Void) + _ aMapArg: [String?: Any?], completion: @escaping (Result<[String?: Any?], PigeonError>) -> Void + ) /// Returns the passed enum to test serialization and deserialization. - func echo(_ anEnumArg: AnEnum, completion: @escaping (Result) -> Void) + func echo(_ anEnumArg: AnEnum, completion: @escaping (Result) -> Void) /// Returns the passed boolean, to test serialization and deserialization. - func echoNullable(_ aBoolArg: Bool?, completion: @escaping (Result) -> Void) + func echoNullable(_ aBoolArg: Bool?, completion: @escaping (Result) -> Void) /// Returns the passed int, to test serialization and deserialization. - func echoNullable( - _ anIntArg: Int64?, completion: @escaping (Result) -> Void) + func echoNullable(_ anIntArg: Int64?, completion: @escaping (Result) -> Void) /// Returns the passed double, to test serialization and deserialization. func echoNullable( - _ aDoubleArg: Double?, completion: @escaping (Result) -> Void) + _ aDoubleArg: Double?, completion: @escaping (Result) -> Void) /// Returns the passed string, to test serialization and deserialization. func echoNullable( - _ aStringArg: String?, completion: @escaping (Result) -> Void) + _ aStringArg: String?, completion: @escaping (Result) -> Void) /// Returns the passed byte list, to test serialization and deserialization. func echoNullable( _ listArg: FlutterStandardTypedData?, - completion: @escaping (Result) -> Void) + completion: @escaping (Result) -> Void) /// Returns the passed list, to test serialization and deserialization. func echoNullable( - _ listArg: [Any?]?, completion: @escaping (Result<[Any?]?, FlutterError>) -> Void) + _ listArg: [Any?]?, completion: @escaping (Result<[Any?]?, PigeonError>) -> Void) /// Returns the passed map, to test serialization and deserialization. func echoNullable( _ aMapArg: [String?: Any?]?, - completion: @escaping (Result<[String?: Any?]?, FlutterError>) -> Void) + completion: @escaping (Result<[String?: Any?]?, PigeonError>) -> Void) /// Returns the passed enum to test serialization and deserialization. func echoNullable( - _ anEnumArg: AnEnum?, completion: @escaping (Result) -> Void) + _ anEnumArg: AnEnum?, completion: @escaping (Result) -> Void) /// A no-op function taking no arguments and returning no value, to sanity /// test basic asynchronous calling. - func noopAsync(completion: @escaping (Result) -> Void) + func noopAsync(completion: @escaping (Result) -> Void) /// Returns the passed in generic Object asynchronously. - func echoAsync(_ aStringArg: String, completion: @escaping (Result) -> Void) + func echoAsync(_ aStringArg: String, completion: @escaping (Result) -> Void) } class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { private let binaryMessenger: FlutterBinaryMessenger @@ -2531,7 +2555,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// A no-op function taking no arguments and returning no value, to sanity /// test basic calling. - func noop(completion: @escaping (Result) -> Void) { + func noop(completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.noop\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2545,14 +2569,14 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { completion(.success(Void())) } } } /// Responds with an error from an async function returning a value. - func throwError(completion: @escaping (Result) -> Void) { + func throwError(completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.throwError\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2566,7 +2590,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: Any? = listResponse[0] completion(.success(result)) @@ -2574,7 +2598,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Responds with an error from an async void function. - func throwErrorFromVoid(completion: @escaping (Result) -> Void) { + func throwErrorFromVoid(completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.throwErrorFromVoid\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2588,7 +2612,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { completion(.success(Void())) } @@ -2596,7 +2620,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// Returns the passed object, to test serialization and deserialization. func echo( - _ everythingArg: AllTypes, completion: @escaping (Result) -> Void + _ everythingArg: AllTypes, completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoAllTypes\(messageChannelSuffix)" @@ -2611,11 +2635,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2627,7 +2651,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { /// Returns the passed object, to test serialization and deserialization. func echoNullable( _ everythingArg: AllNullableTypes?, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoAllNullableTypes\(messageChannelSuffix)" @@ -2642,7 +2666,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: AllNullableTypes? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -2655,7 +2679,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { func sendMultipleNullableTypes( aBool aNullableBoolArg: Bool?, anInt aNullableIntArg: Int64?, aString aNullableStringArg: String?, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.sendMultipleNullableTypes\(messageChannelSuffix)" @@ -2671,11 +2695,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2687,7 +2711,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { /// Returns the passed object, to test serialization and deserialization. func echoNullable( _ everythingArg: AllNullableTypesWithoutRecursion?, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoAllNullableTypesWithoutRecursion\(messageChannelSuffix)" @@ -2702,7 +2726,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: AllNullableTypesWithoutRecursion? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -2715,7 +2739,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { func sendMultipleNullableTypesWithoutRecursion( aBool aNullableBoolArg: Bool?, anInt aNullableIntArg: Int64?, aString aNullableStringArg: String?, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.sendMultipleNullableTypesWithoutRecursion\(messageChannelSuffix)" @@ -2731,11 +2755,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2745,7 +2769,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed boolean, to test serialization and deserialization. - func echo(_ aBoolArg: Bool, completion: @escaping (Result) -> Void) { + func echo(_ aBoolArg: Bool, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoBool\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2759,11 +2783,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2773,7 +2797,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed int, to test serialization and deserialization. - func echo(_ anIntArg: Int64, completion: @escaping (Result) -> Void) { + func echo(_ anIntArg: Int64, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoInt\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2787,11 +2811,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2802,7 +2826,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed double, to test serialization and deserialization. - func echo(_ aDoubleArg: Double, completion: @escaping (Result) -> Void) { + func echo(_ aDoubleArg: Double, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoDouble\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2816,11 +2840,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2830,7 +2854,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed string, to test serialization and deserialization. - func echo(_ aStringArg: String, completion: @escaping (Result) -> Void) { + func echo(_ aStringArg: String, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoString\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2844,11 +2868,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2860,7 +2884,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { /// Returns the passed byte list, to test serialization and deserialization. func echo( _ listArg: FlutterStandardTypedData, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoUint8List\(messageChannelSuffix)" @@ -2875,11 +2899,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2889,7 +2913,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed list, to test serialization and deserialization. - func echo(_ listArg: [Any?], completion: @escaping (Result<[Any?], FlutterError>) -> Void) { + func echo(_ listArg: [Any?], completion: @escaping (Result<[Any?], PigeonError>) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoList\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2903,11 +2927,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2918,8 +2942,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// Returns the passed map, to test serialization and deserialization. func echo( - _ aMapArg: [String?: Any?], - completion: @escaping (Result<[String?: Any?], FlutterError>) -> Void + _ aMapArg: [String?: Any?], completion: @escaping (Result<[String?: Any?], PigeonError>) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoMap\(messageChannelSuffix)" @@ -2934,11 +2957,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2948,7 +2971,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed enum to test serialization and deserialization. - func echo(_ anEnumArg: AnEnum, completion: @escaping (Result) -> Void) { + func echo(_ anEnumArg: AnEnum, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoEnum\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2962,11 +2985,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2976,8 +2999,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed boolean, to test serialization and deserialization. - func echoNullable(_ aBoolArg: Bool?, completion: @escaping (Result) -> Void) - { + func echoNullable(_ aBoolArg: Bool?, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableBool\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2991,7 +3013,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: Bool? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -2999,9 +3021,8 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed int, to test serialization and deserialization. - func echoNullable( - _ anIntArg: Int64?, completion: @escaping (Result) -> Void - ) { + func echoNullable(_ anIntArg: Int64?, completion: @escaping (Result) -> Void) + { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableInt\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -3015,7 +3036,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: Int64? = isNullish(listResponse[0]) @@ -3028,7 +3049,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// Returns the passed double, to test serialization and deserialization. func echoNullable( - _ aDoubleArg: Double?, completion: @escaping (Result) -> Void + _ aDoubleArg: Double?, completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableDouble\(messageChannelSuffix)" @@ -3043,7 +3064,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: Double? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -3052,7 +3073,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// Returns the passed string, to test serialization and deserialization. func echoNullable( - _ aStringArg: String?, completion: @escaping (Result) -> Void + _ aStringArg: String?, completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableString\(messageChannelSuffix)" @@ -3067,7 +3088,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: String? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -3077,7 +3098,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { /// Returns the passed byte list, to test serialization and deserialization. func echoNullable( _ listArg: FlutterStandardTypedData?, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableUint8List\(messageChannelSuffix)" @@ -3092,7 +3113,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: FlutterStandardTypedData? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -3101,7 +3122,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// Returns the passed list, to test serialization and deserialization. func echoNullable( - _ listArg: [Any?]?, completion: @escaping (Result<[Any?]?, FlutterError>) -> Void + _ listArg: [Any?]?, completion: @escaping (Result<[Any?]?, PigeonError>) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableList\(messageChannelSuffix)" @@ -3116,7 +3137,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: [Any?]? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -3126,7 +3147,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { /// Returns the passed map, to test serialization and deserialization. func echoNullable( _ aMapArg: [String?: Any?]?, - completion: @escaping (Result<[String?: Any?]?, FlutterError>) -> Void + completion: @escaping (Result<[String?: Any?]?, PigeonError>) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableMap\(messageChannelSuffix)" @@ -3141,7 +3162,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: [String?: Any?]? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -3150,7 +3171,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// Returns the passed enum to test serialization and deserialization. func echoNullable( - _ anEnumArg: AnEnum?, completion: @escaping (Result) -> Void + _ anEnumArg: AnEnum?, completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableEnum\(messageChannelSuffix)" @@ -3165,7 +3186,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: AnEnum? = isNullish(listResponse[0]) ? nil : AnEnum(rawValue: listResponse[0] as! Int)! @@ -3175,7 +3196,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// A no-op function taking no arguments and returning no value, to sanity /// test basic asynchronous calling. - func noopAsync(completion: @escaping (Result) -> Void) { + func noopAsync(completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.noopAsync\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -3189,14 +3210,14 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { completion(.success(Void())) } } } /// Returns the passed in generic Object asynchronously. - func echoAsync(_ aStringArg: String, completion: @escaping (Result) -> Void) + func echoAsync(_ aStringArg: String, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoAsyncString\(messageChannelSuffix)" @@ -3211,11 +3232,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -3351,9 +3372,8 @@ class FlutterSmallApiCodec: FlutterStandardMessageCodec { /// /// Generated protocol from Pigeon that represents Flutter messages that can be called from Swift. protocol FlutterSmallApiProtocol { - func echo( - _ msgArg: TestMessage, completion: @escaping (Result) -> Void) - func echo(string aStringArg: String, completion: @escaping (Result) -> Void) + func echo(_ msgArg: TestMessage, completion: @escaping (Result) -> Void) + func echo(string aStringArg: String, completion: @escaping (Result) -> Void) } class FlutterSmallApi: FlutterSmallApiProtocol { private let binaryMessenger: FlutterBinaryMessenger @@ -3365,9 +3385,8 @@ class FlutterSmallApi: FlutterSmallApiProtocol { var codec: FlutterStandardMessageCodec { return FlutterSmallApiCodec.shared } - func echo( - _ msgArg: TestMessage, completion: @escaping (Result) -> Void - ) { + func echo(_ msgArg: TestMessage, completion: @escaping (Result) -> Void) + { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterSmallApi.echoWrappedList\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -3381,11 +3400,11 @@ class FlutterSmallApi: FlutterSmallApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -3394,7 +3413,7 @@ class FlutterSmallApi: FlutterSmallApiProtocol { } } } - func echo(string aStringArg: String, completion: @escaping (Result) -> Void) + func echo(string aStringArg: String, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterSmallApi.echoString\(messageChannelSuffix)" @@ -3409,11 +3428,11 @@ class FlutterSmallApi: FlutterSmallApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { diff --git a/packages/pigeon/platform_tests/test_plugin/ios/Classes/TestPlugin.swift b/packages/pigeon/platform_tests/test_plugin/ios/Classes/TestPlugin.swift index a00affe7040..36e6a445b53 100644 --- a/packages/pigeon/platform_tests/test_plugin/ios/Classes/TestPlugin.swift +++ b/packages/pigeon/platform_tests/test_plugin/ios/Classes/TestPlugin.swift @@ -5,8 +5,6 @@ import Flutter import UIKit -extension FlutterError: Error {} - /// This plugin handles the native side of the integration tests in /// example/integration_test/. public class TestPlugin: NSObject, FlutterPlugin, HostIntegrationCoreApi { @@ -50,15 +48,15 @@ public class TestPlugin: NSObject, FlutterPlugin, HostIntegrationCoreApi { } func throwError() throws -> Any? { - throw FlutterError(code: "code", message: "message", details: "details") + throw PigeonError(code: "code", message: "message", details: "details") } func throwErrorFromVoid() throws { - throw FlutterError(code: "code", message: "message", details: "details") + throw PigeonError(code: "code", message: "message", details: "details") } func throwFlutterError() throws -> Any? { - throw FlutterError(code: "code", message: "message", details: "details") + throw PigeonError(code: "code", message: "message", details: "details") } func echo(_ anInt: Int64) -> Int64 { @@ -186,15 +184,15 @@ public class TestPlugin: NSObject, FlutterPlugin, HostIntegrationCoreApi { } func throwAsyncError(completion: @escaping (Result) -> Void) { - completion(.failure(FlutterError(code: "code", message: "message", details: "details"))) + completion(.failure(PigeonError(code: "code", message: "message", details: "details"))) } func throwAsyncErrorFromVoid(completion: @escaping (Result) -> Void) { - completion(.failure(FlutterError(code: "code", message: "message", details: "details"))) + completion(.failure(PigeonError(code: "code", message: "message", details: "details"))) } func throwAsyncFlutterError(completion: @escaping (Result) -> Void) { - completion(.failure(FlutterError(code: "code", message: "message", details: "details"))) + completion(.failure(PigeonError(code: "code", message: "message", details: "details"))) } func echoAsync(_ everything: AllTypes, completion: @escaping (Result) -> Void) { @@ -623,7 +621,7 @@ public class TestPlugin: NSObject, FlutterPlugin, HostIntegrationCoreApi { } else { completion( .failure( - FlutterError( + PigeonError( code: "", message: "Multi-instance responses were not matching: \(resOne), \(resTwo)", details: nil))) diff --git a/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift index 717985e7a4b..c54100d2db4 100644 --- a/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift +++ b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift @@ -15,11 +15,36 @@ import Foundation #error("Unsupported platform.") #endif +/// Error class for passing custom error details to Dart side. +final class PigeonError: Error { + let code: String + let message: String? + let details: Any? + + init(code: String, message: String?, details: Any?) { + self.code = code + self.message = message + self.details = details + } + + var localizedDescription: String { + return + "PigeonError(code: \(code), message: \(message ?? ""), details: \(details ?? "")" + } +} + private func wrapResult(_ result: Any?) -> [Any?] { return [result] } private func wrapError(_ error: Any) -> [Any?] { + if let pigeonError = error as? PigeonError { + return [ + pigeonError.code, + pigeonError.message, + pigeonError.details, + ] + } if let flutterError = error as? FlutterError { return [ flutterError.code, @@ -34,8 +59,8 @@ private func wrapError(_ error: Any) -> [Any?] { ] } -private func createConnectionError(withChannelName channelName: String) -> FlutterError { - return FlutterError( +private func createConnectionError(withChannelName channelName: String) -> PigeonError { + return PigeonError( code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", details: "") } @@ -2438,86 +2463,85 @@ class FlutterIntegrationCoreApiCodec: FlutterStandardMessageCodec { protocol FlutterIntegrationCoreApiProtocol { /// A no-op function taking no arguments and returning no value, to sanity /// test basic calling. - func noop(completion: @escaping (Result) -> Void) + func noop(completion: @escaping (Result) -> Void) /// Responds with an error from an async function returning a value. - func throwError(completion: @escaping (Result) -> Void) + func throwError(completion: @escaping (Result) -> Void) /// Responds with an error from an async void function. - func throwErrorFromVoid(completion: @escaping (Result) -> Void) + func throwErrorFromVoid(completion: @escaping (Result) -> Void) /// Returns the passed object, to test serialization and deserialization. func echo( - _ everythingArg: AllTypes, completion: @escaping (Result) -> Void) + _ everythingArg: AllTypes, completion: @escaping (Result) -> Void) /// Returns the passed object, to test serialization and deserialization. func echoNullable( _ everythingArg: AllNullableTypes?, - completion: @escaping (Result) -> Void) + completion: @escaping (Result) -> Void) /// Returns passed in arguments of multiple types. /// /// Tests multiple-arity FlutterApi handling. func sendMultipleNullableTypes( aBool aNullableBoolArg: Bool?, anInt aNullableIntArg: Int64?, aString aNullableStringArg: String?, - completion: @escaping (Result) -> Void) + completion: @escaping (Result) -> Void) /// Returns the passed object, to test serialization and deserialization. func echoNullable( _ everythingArg: AllNullableTypesWithoutRecursion?, - completion: @escaping (Result) -> Void) + completion: @escaping (Result) -> Void) /// Returns passed in arguments of multiple types. /// /// Tests multiple-arity FlutterApi handling. func sendMultipleNullableTypesWithoutRecursion( aBool aNullableBoolArg: Bool?, anInt aNullableIntArg: Int64?, aString aNullableStringArg: String?, - completion: @escaping (Result) -> Void) + completion: @escaping (Result) -> Void) /// Returns the passed boolean, to test serialization and deserialization. - func echo(_ aBoolArg: Bool, completion: @escaping (Result) -> Void) + func echo(_ aBoolArg: Bool, completion: @escaping (Result) -> Void) /// Returns the passed int, to test serialization and deserialization. - func echo(_ anIntArg: Int64, completion: @escaping (Result) -> Void) + func echo(_ anIntArg: Int64, completion: @escaping (Result) -> Void) /// Returns the passed double, to test serialization and deserialization. - func echo(_ aDoubleArg: Double, completion: @escaping (Result) -> Void) + func echo(_ aDoubleArg: Double, completion: @escaping (Result) -> Void) /// Returns the passed string, to test serialization and deserialization. - func echo(_ aStringArg: String, completion: @escaping (Result) -> Void) + func echo(_ aStringArg: String, completion: @escaping (Result) -> Void) /// Returns the passed byte list, to test serialization and deserialization. func echo( _ listArg: FlutterStandardTypedData, - completion: @escaping (Result) -> Void) + completion: @escaping (Result) -> Void) /// Returns the passed list, to test serialization and deserialization. - func echo(_ listArg: [Any?], completion: @escaping (Result<[Any?], FlutterError>) -> Void) + func echo(_ listArg: [Any?], completion: @escaping (Result<[Any?], PigeonError>) -> Void) /// Returns the passed map, to test serialization and deserialization. func echo( - _ aMapArg: [String?: Any?], - completion: @escaping (Result<[String?: Any?], FlutterError>) -> Void) + _ aMapArg: [String?: Any?], completion: @escaping (Result<[String?: Any?], PigeonError>) -> Void + ) /// Returns the passed enum to test serialization and deserialization. - func echo(_ anEnumArg: AnEnum, completion: @escaping (Result) -> Void) + func echo(_ anEnumArg: AnEnum, completion: @escaping (Result) -> Void) /// Returns the passed boolean, to test serialization and deserialization. - func echoNullable(_ aBoolArg: Bool?, completion: @escaping (Result) -> Void) + func echoNullable(_ aBoolArg: Bool?, completion: @escaping (Result) -> Void) /// Returns the passed int, to test serialization and deserialization. - func echoNullable( - _ anIntArg: Int64?, completion: @escaping (Result) -> Void) + func echoNullable(_ anIntArg: Int64?, completion: @escaping (Result) -> Void) /// Returns the passed double, to test serialization and deserialization. func echoNullable( - _ aDoubleArg: Double?, completion: @escaping (Result) -> Void) + _ aDoubleArg: Double?, completion: @escaping (Result) -> Void) /// Returns the passed string, to test serialization and deserialization. func echoNullable( - _ aStringArg: String?, completion: @escaping (Result) -> Void) + _ aStringArg: String?, completion: @escaping (Result) -> Void) /// Returns the passed byte list, to test serialization and deserialization. func echoNullable( _ listArg: FlutterStandardTypedData?, - completion: @escaping (Result) -> Void) + completion: @escaping (Result) -> Void) /// Returns the passed list, to test serialization and deserialization. func echoNullable( - _ listArg: [Any?]?, completion: @escaping (Result<[Any?]?, FlutterError>) -> Void) + _ listArg: [Any?]?, completion: @escaping (Result<[Any?]?, PigeonError>) -> Void) /// Returns the passed map, to test serialization and deserialization. func echoNullable( _ aMapArg: [String?: Any?]?, - completion: @escaping (Result<[String?: Any?]?, FlutterError>) -> Void) + completion: @escaping (Result<[String?: Any?]?, PigeonError>) -> Void) /// Returns the passed enum to test serialization and deserialization. func echoNullable( - _ anEnumArg: AnEnum?, completion: @escaping (Result) -> Void) + _ anEnumArg: AnEnum?, completion: @escaping (Result) -> Void) /// A no-op function taking no arguments and returning no value, to sanity /// test basic asynchronous calling. - func noopAsync(completion: @escaping (Result) -> Void) + func noopAsync(completion: @escaping (Result) -> Void) /// Returns the passed in generic Object asynchronously. - func echoAsync(_ aStringArg: String, completion: @escaping (Result) -> Void) + func echoAsync(_ aStringArg: String, completion: @escaping (Result) -> Void) } class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { private let binaryMessenger: FlutterBinaryMessenger @@ -2531,7 +2555,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// A no-op function taking no arguments and returning no value, to sanity /// test basic calling. - func noop(completion: @escaping (Result) -> Void) { + func noop(completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.noop\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2545,14 +2569,14 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { completion(.success(Void())) } } } /// Responds with an error from an async function returning a value. - func throwError(completion: @escaping (Result) -> Void) { + func throwError(completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.throwError\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2566,7 +2590,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: Any? = listResponse[0] completion(.success(result)) @@ -2574,7 +2598,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Responds with an error from an async void function. - func throwErrorFromVoid(completion: @escaping (Result) -> Void) { + func throwErrorFromVoid(completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.throwErrorFromVoid\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2588,7 +2612,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { completion(.success(Void())) } @@ -2596,7 +2620,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// Returns the passed object, to test serialization and deserialization. func echo( - _ everythingArg: AllTypes, completion: @escaping (Result) -> Void + _ everythingArg: AllTypes, completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoAllTypes\(messageChannelSuffix)" @@ -2611,11 +2635,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2627,7 +2651,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { /// Returns the passed object, to test serialization and deserialization. func echoNullable( _ everythingArg: AllNullableTypes?, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoAllNullableTypes\(messageChannelSuffix)" @@ -2642,7 +2666,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: AllNullableTypes? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -2655,7 +2679,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { func sendMultipleNullableTypes( aBool aNullableBoolArg: Bool?, anInt aNullableIntArg: Int64?, aString aNullableStringArg: String?, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.sendMultipleNullableTypes\(messageChannelSuffix)" @@ -2671,11 +2695,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2687,7 +2711,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { /// Returns the passed object, to test serialization and deserialization. func echoNullable( _ everythingArg: AllNullableTypesWithoutRecursion?, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoAllNullableTypesWithoutRecursion\(messageChannelSuffix)" @@ -2702,7 +2726,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: AllNullableTypesWithoutRecursion? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -2715,7 +2739,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { func sendMultipleNullableTypesWithoutRecursion( aBool aNullableBoolArg: Bool?, anInt aNullableIntArg: Int64?, aString aNullableStringArg: String?, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.sendMultipleNullableTypesWithoutRecursion\(messageChannelSuffix)" @@ -2731,11 +2755,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2745,7 +2769,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed boolean, to test serialization and deserialization. - func echo(_ aBoolArg: Bool, completion: @escaping (Result) -> Void) { + func echo(_ aBoolArg: Bool, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoBool\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2759,11 +2783,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2773,7 +2797,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed int, to test serialization and deserialization. - func echo(_ anIntArg: Int64, completion: @escaping (Result) -> Void) { + func echo(_ anIntArg: Int64, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoInt\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2787,11 +2811,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2802,7 +2826,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed double, to test serialization and deserialization. - func echo(_ aDoubleArg: Double, completion: @escaping (Result) -> Void) { + func echo(_ aDoubleArg: Double, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoDouble\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2816,11 +2840,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2830,7 +2854,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed string, to test serialization and deserialization. - func echo(_ aStringArg: String, completion: @escaping (Result) -> Void) { + func echo(_ aStringArg: String, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoString\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2844,11 +2868,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2860,7 +2884,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { /// Returns the passed byte list, to test serialization and deserialization. func echo( _ listArg: FlutterStandardTypedData, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoUint8List\(messageChannelSuffix)" @@ -2875,11 +2899,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2889,7 +2913,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed list, to test serialization and deserialization. - func echo(_ listArg: [Any?], completion: @escaping (Result<[Any?], FlutterError>) -> Void) { + func echo(_ listArg: [Any?], completion: @escaping (Result<[Any?], PigeonError>) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoList\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2903,11 +2927,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2918,8 +2942,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// Returns the passed map, to test serialization and deserialization. func echo( - _ aMapArg: [String?: Any?], - completion: @escaping (Result<[String?: Any?], FlutterError>) -> Void + _ aMapArg: [String?: Any?], completion: @escaping (Result<[String?: Any?], PigeonError>) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoMap\(messageChannelSuffix)" @@ -2934,11 +2957,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2948,7 +2971,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed enum to test serialization and deserialization. - func echo(_ anEnumArg: AnEnum, completion: @escaping (Result) -> Void) { + func echo(_ anEnumArg: AnEnum, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoEnum\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2962,11 +2985,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -2976,8 +2999,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed boolean, to test serialization and deserialization. - func echoNullable(_ aBoolArg: Bool?, completion: @escaping (Result) -> Void) - { + func echoNullable(_ aBoolArg: Bool?, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableBool\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -2991,7 +3013,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: Bool? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -2999,9 +3021,8 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } } /// Returns the passed int, to test serialization and deserialization. - func echoNullable( - _ anIntArg: Int64?, completion: @escaping (Result) -> Void - ) { + func echoNullable(_ anIntArg: Int64?, completion: @escaping (Result) -> Void) + { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableInt\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -3015,7 +3036,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: Int64? = isNullish(listResponse[0]) @@ -3028,7 +3049,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// Returns the passed double, to test serialization and deserialization. func echoNullable( - _ aDoubleArg: Double?, completion: @escaping (Result) -> Void + _ aDoubleArg: Double?, completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableDouble\(messageChannelSuffix)" @@ -3043,7 +3064,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: Double? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -3052,7 +3073,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// Returns the passed string, to test serialization and deserialization. func echoNullable( - _ aStringArg: String?, completion: @escaping (Result) -> Void + _ aStringArg: String?, completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableString\(messageChannelSuffix)" @@ -3067,7 +3088,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: String? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -3077,7 +3098,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { /// Returns the passed byte list, to test serialization and deserialization. func echoNullable( _ listArg: FlutterStandardTypedData?, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableUint8List\(messageChannelSuffix)" @@ -3092,7 +3113,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: FlutterStandardTypedData? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -3101,7 +3122,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// Returns the passed list, to test serialization and deserialization. func echoNullable( - _ listArg: [Any?]?, completion: @escaping (Result<[Any?]?, FlutterError>) -> Void + _ listArg: [Any?]?, completion: @escaping (Result<[Any?]?, PigeonError>) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableList\(messageChannelSuffix)" @@ -3116,7 +3137,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: [Any?]? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -3126,7 +3147,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { /// Returns the passed map, to test serialization and deserialization. func echoNullable( _ aMapArg: [String?: Any?]?, - completion: @escaping (Result<[String?: Any?]?, FlutterError>) -> Void + completion: @escaping (Result<[String?: Any?]?, PigeonError>) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableMap\(messageChannelSuffix)" @@ -3141,7 +3162,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: [String?: Any?]? = nilOrValue(listResponse[0]) completion(.success(result)) @@ -3150,7 +3171,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// Returns the passed enum to test serialization and deserialization. func echoNullable( - _ anEnumArg: AnEnum?, completion: @escaping (Result) -> Void + _ anEnumArg: AnEnum?, completion: @escaping (Result) -> Void ) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoNullableEnum\(messageChannelSuffix)" @@ -3165,7 +3186,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { let result: AnEnum? = isNullish(listResponse[0]) ? nil : AnEnum(rawValue: listResponse[0] as! Int)! @@ -3175,7 +3196,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { } /// A no-op function taking no arguments and returning no value, to sanity /// test basic asynchronous calling. - func noopAsync(completion: @escaping (Result) -> Void) { + func noopAsync(completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.noopAsync\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -3189,14 +3210,14 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { completion(.success(Void())) } } } /// Returns the passed in generic Object asynchronously. - func echoAsync(_ aStringArg: String, completion: @escaping (Result) -> Void) + func echoAsync(_ aStringArg: String, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterIntegrationCoreApi.echoAsyncString\(messageChannelSuffix)" @@ -3211,11 +3232,11 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -3351,9 +3372,8 @@ class FlutterSmallApiCodec: FlutterStandardMessageCodec { /// /// Generated protocol from Pigeon that represents Flutter messages that can be called from Swift. protocol FlutterSmallApiProtocol { - func echo( - _ msgArg: TestMessage, completion: @escaping (Result) -> Void) - func echo(string aStringArg: String, completion: @escaping (Result) -> Void) + func echo(_ msgArg: TestMessage, completion: @escaping (Result) -> Void) + func echo(string aStringArg: String, completion: @escaping (Result) -> Void) } class FlutterSmallApi: FlutterSmallApiProtocol { private let binaryMessenger: FlutterBinaryMessenger @@ -3365,9 +3385,8 @@ class FlutterSmallApi: FlutterSmallApiProtocol { var codec: FlutterStandardMessageCodec { return FlutterSmallApiCodec.shared } - func echo( - _ msgArg: TestMessage, completion: @escaping (Result) -> Void - ) { + func echo(_ msgArg: TestMessage, completion: @escaping (Result) -> Void) + { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterSmallApi.echoWrappedList\(messageChannelSuffix)" let channel = FlutterBasicMessageChannel( @@ -3381,11 +3400,11 @@ class FlutterSmallApi: FlutterSmallApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { @@ -3394,7 +3413,7 @@ class FlutterSmallApi: FlutterSmallApiProtocol { } } } - func echo(string aStringArg: String, completion: @escaping (Result) -> Void) + func echo(string aStringArg: String, completion: @escaping (Result) -> Void) { let channelName: String = "dev.flutter.pigeon.pigeon_integration_tests.FlutterSmallApi.echoString\(messageChannelSuffix)" @@ -3409,11 +3428,11 @@ class FlutterSmallApi: FlutterSmallApiProtocol { let code: String = listResponse[0] as! String let message: String? = nilOrValue(listResponse[1]) let details: String? = nilOrValue(listResponse[2]) - completion(.failure(FlutterError(code: code, message: message, details: details))) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { completion( .failure( - FlutterError( + PigeonError( code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { diff --git a/packages/pigeon/platform_tests/test_plugin/macos/Classes/TestPlugin.swift b/packages/pigeon/platform_tests/test_plugin/macos/Classes/TestPlugin.swift index 2c415135bcc..5a649736641 100644 --- a/packages/pigeon/platform_tests/test_plugin/macos/Classes/TestPlugin.swift +++ b/packages/pigeon/platform_tests/test_plugin/macos/Classes/TestPlugin.swift @@ -5,8 +5,6 @@ import Cocoa import FlutterMacOS -extension FlutterError: Error {} - /// This plugin handles the native side of the integration tests in /// example/integration_test/. public class TestPlugin: NSObject, FlutterPlugin, HostIntegrationCoreApi { @@ -49,15 +47,15 @@ public class TestPlugin: NSObject, FlutterPlugin, HostIntegrationCoreApi { } func throwError() throws -> Any? { - throw FlutterError(code: "code", message: "message", details: "details") + throw PigeonError(code: "code", message: "message", details: "details") } func throwErrorFromVoid() throws { - throw FlutterError(code: "code", message: "message", details: "details") + throw PigeonError(code: "code", message: "message", details: "details") } func throwFlutterError() throws -> Any? { - throw FlutterError(code: "code", message: "message", details: "details") + throw PigeonError(code: "code", message: "message", details: "details") } func echo(_ anInt: Int64) -> Int64 { @@ -185,15 +183,15 @@ public class TestPlugin: NSObject, FlutterPlugin, HostIntegrationCoreApi { } func throwAsyncError(completion: @escaping (Result) -> Void) { - completion(.failure(FlutterError(code: "code", message: "message", details: "details"))) + completion(.failure(PigeonError(code: "code", message: "message", details: "details"))) } func throwAsyncErrorFromVoid(completion: @escaping (Result) -> Void) { - completion(.failure(FlutterError(code: "code", message: "message", details: "details"))) + completion(.failure(PigeonError(code: "code", message: "message", details: "details"))) } func throwAsyncFlutterError(completion: @escaping (Result) -> Void) { - completion(.failure(FlutterError(code: "code", message: "message", details: "details"))) + completion(.failure(PigeonError(code: "code", message: "message", details: "details"))) } func echoAsync(_ everything: AllTypes, completion: @escaping (Result) -> Void) { @@ -622,7 +620,7 @@ public class TestPlugin: NSObject, FlutterPlugin, HostIntegrationCoreApi { } else { completion( .failure( - FlutterError( + PigeonError( code: "", message: "Multi-instance responses were not matching: \(resOne), \(resTwo)", details: nil))) diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index e727afd0468..f3ceac84cba 100644 --- a/packages/pigeon/pubspec.yaml +++ b/packages/pigeon/pubspec.yaml @@ -2,7 +2,7 @@ name: pigeon description: Code generator tool to make communication between Flutter and the host platform type-safe and easier. repository: https://github.com/flutter/packages/tree/main/packages/pigeon issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+pigeon%22 -version: 18.0.1 # This must match the version in lib/generator_tools.dart +version: 19.0.0 # This must match the version in lib/generator_tools.dart environment: sdk: ^3.2.0 diff --git a/packages/pigeon/test/swift_generator_test.dart b/packages/pigeon/test/swift_generator_test.dart index 8fb544bbedb..780736c03b5 100644 --- a/packages/pigeon/test/swift_generator_test.dart +++ b/packages/pigeon/test/swift_generator_test.dart @@ -395,7 +395,7 @@ void main() { ); final String code = sink.toString(); expect(code, - contains('completion: @escaping (Result) -> Void')); + contains('completion: @escaping (Result) -> Void')); expect(code, contains('completion(.success(Void()))')); expect(code, isNot(contains('if ('))); }); @@ -477,7 +477,7 @@ void main() { expect( code, contains( - 'func doSomething(completion: @escaping (Result) -> Void)')); + 'func doSomething(completion: @escaping (Result) -> Void)')); expect(code, contains('channel.sendMessage(nil')); expect(code, isNot(contains('if ('))); }); @@ -964,7 +964,7 @@ void main() { expect( code, contains( - 'func doit(completion: @escaping (Result<[Int64?], FlutterError>) -> Void)')); + 'func doit(completion: @escaping (Result<[Int64?], PigeonError>) -> Void)')); expect(code, contains('let result = listResponse[0] as! [Int64?]')); expect(code, contains('completion(.success(result))')); }); @@ -1052,7 +1052,7 @@ void main() { expect( code, contains( - 'func add(x xArg: Int64, y yArg: Int64, completion: @escaping (Result) -> Void)')); + 'func add(x xArg: Int64, y yArg: Int64, completion: @escaping (Result) -> Void)')); expect(code, contains('channel.sendMessage([xArg, yArg] as [Any?]) { response in')); }); @@ -1192,7 +1192,7 @@ void main() { expect( code, contains( - 'func doit(foo fooArg: Int64?, completion: @escaping (Result) -> Void)')); + 'func doit(foo fooArg: Int64?, completion: @escaping (Result) -> Void)')); }); test('nonnull fields', () { @@ -1572,6 +1572,6 @@ void main() { expect( code, contains( - 'return FlutterError(code: "channel-error", message: "Unable to establish connection on channel: \'\\(channelName)\'.", details: "")')); + 'return PigeonError(code: "channel-error", message: "Unable to establish connection on channel: \'\\(channelName)\'.", details: "")')); }); } diff --git a/packages/pigeon/tool/shared/generation.dart b/packages/pigeon/tool/shared/generation.dart index 1cd3b6e5ea9..c4cf84582f1 100644 --- a/packages/pigeon/tool/shared/generation.dart +++ b/packages/pigeon/tool/shared/generation.dart @@ -89,6 +89,11 @@ Future generateTestPigeons({required String baseDir}) async { ? 'FlutterError' : '${pascalCaseName}Error'; + final bool swiftErrorUseDefaultErrorName = input == 'core_tests'; + + final String? swiftErrorClassName = + swiftErrorUseDefaultErrorName ? null : '${pascalCaseName}Error'; + // Generate the default language test plugin output. int generateCode = await runPigeon( input: './pigeons/$input.dart', @@ -104,6 +109,7 @@ Future generateTestPigeons({required String baseDir}) async { swiftOut: skipLanguages.contains(GeneratorLanguage.swift) ? null : '$outputBase/ios/Classes/$pascalCaseName.gen.swift', + swiftErrorClassName: swiftErrorClassName, // Windows cppHeaderOut: skipLanguages.contains(GeneratorLanguage.cpp) ? null @@ -127,6 +133,7 @@ Future generateTestPigeons({required String baseDir}) async { swiftOut: skipLanguages.contains(GeneratorLanguage.swift) ? null : '$outputBase/macos/Classes/$pascalCaseName.gen.swift', + swiftErrorClassName: swiftErrorClassName, suppressVersion: true, dartPackageName: 'pigeon_integration_tests', ); @@ -188,6 +195,7 @@ Future runPigeon({ String? kotlinErrorClassName, bool kotlinIncludeErrorClass = true, String? swiftOut, + String? swiftErrorClassName, String? cppHeaderOut, String? cppSourceOut, String? cppNamespace, @@ -236,7 +244,9 @@ Future runPigeon({ objcSourceOut: objcSourceOut, objcOptions: ObjcOptions(prefix: objcPrefix), swiftOut: swiftOut, - swiftOptions: const SwiftOptions(), + swiftOptions: SwiftOptions( + errorClassName: swiftErrorClassName, + ), basePath: basePath, dartPackageName: dartPackageName, ));