diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 1113b055482..305a51f0abe 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 9.2.1 + +* [swift] Fixes NSNull casting crash. + ## 9.2.0 * [cpp] Removes experimental tags. diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index d421b22ccad..f2cab84527c 100644 --- a/packages/pigeon/lib/generator_tools.dart +++ b/packages/pigeon/lib/generator_tools.dart @@ -11,7 +11,7 @@ import 'ast.dart'; /// The current version of pigeon. /// /// This must match the version in pubspec.yaml. -const String pigeonVersion = '9.2.0'; +const String pigeonVersion = '9.2.1'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/lib/swift_generator.dart b/packages/pigeon/lib/swift_generator.dart index 67ee5016445..b14077c7b4f 100644 --- a/packages/pigeon/lib/swift_generator.dart +++ b/packages/pigeon/lib/swift_generator.dart @@ -75,9 +75,7 @@ import Flutter import FlutterMacOS #else #error("Unsupported platform.") -#endif -'''); - indent.newln(); +#endif'''); } @override @@ -176,44 +174,17 @@ import FlutterMacOS indent.addScoped('{', '}', () { enumerate(getFieldsInSerializationOrder(klass), (int index, final NamedType field) { - final HostDatatype hostDatatype = _getHostDatatype(root, field); - final String listValue = 'list[$index]'; - final String fieldType = _swiftTypeForDartType(field.type); - if (field.type.isNullable) { - if (!hostDatatype.isBuiltin && - customClassNames.contains(field.type.baseName)) { - indent.writeln('var ${field.name}: $fieldType? = nil'); - indent.write('if let ${field.name}List = $listValue as! [Any]? '); - indent.addScoped('{', '}', () { - indent.writeln( - '${field.name} = $fieldType.fromList(${field.name}List as [Any])'); - }); - } else if (!hostDatatype.isBuiltin && - customEnumNames.contains(field.type.baseName)) { - indent.writeln('var ${field.name}: $fieldType? = nil'); - indent.write('if let ${field.name}RawValue = $listValue as! Int? '); - indent.addScoped('{', '}', () { - indent.writeln( - '${field.name} = $fieldType(rawValue: ${field.name}RawValue)'); - }); - } else { - indent.writeln('let ${field.name} = $listValue as! $fieldType? '); - } - } else { - if (!hostDatatype.isBuiltin && - customClassNames.contains(field.type.baseName)) { - indent.writeln( - 'let ${field.name} = $fieldType.fromList($listValue as! [Any])!'); - } else if (!hostDatatype.isBuiltin && - customEnumNames.contains(field.type.baseName)) { - indent.writeln( - 'let ${field.name} = $fieldType(rawValue: $listValue as! Int)!'); - } else { - indent.writeln('let ${field.name} = $listValue as! $fieldType'); - } - } + _writeDecodeCasting( + root: root, + indent: indent, + value: listValue, + variableName: field.name, + type: field.type, + listEncodedClassNames: customClassNames, + listEncodedEnumNames: customEnumNames, + ); }); indent.newln(); @@ -345,8 +316,13 @@ import FlutterMacOS }); } else { indent.addScoped('{ response in', '}', () { - indent.writeln( - 'let result = ${_castForceUnwrap("response", func.returnType, root)}'); + _writeDecodeCasting( + root: root, + indent: indent, + value: 'response', + variableName: 'result', + type: func.returnType, + ); indent.writeln('completion(result)'); }); } @@ -461,9 +437,13 @@ import FlutterMacOS final String argName = _getSafeArgumentName(index, arg.namedType); final String argIndex = 'args[$index]'; - indent.writeln( - 'let $argName = ${_castForceUnwrap(argIndex, arg.type, root)}'); - + _writeDecodeCasting( + root: root, + indent: indent, + value: argIndex, + variableName: argName, + type: arg.type, + ); if (arg.label == '_') { methodArgument.add(argName); } else { @@ -607,6 +587,79 @@ import FlutterMacOS indent.newln(); } + /// Writes decode and casting code for any type. + /// + /// Optional parameters should only be used for class decoding. + void _writeDecodeCasting({ + required Root root, + required Indent indent, + required String value, + required String variableName, + required TypeDeclaration type, + Set? listEncodedClassNames, + Set? listEncodedEnumNames, + }) { + String castForceUnwrap(String value, TypeDeclaration type, Root root) { + if (isEnum(root, type)) { + assert(!type.isNullable, + 'nullable enums require special code that this helper does not supply'); + return '${_swiftTypeForDartType(type)}(rawValue: $value as! Int)!'; + } else if (type.baseName == 'Object') { + // Special-cased to avoid warnings about using 'as' with Any. + return value; + } else if (type.baseName == 'int') { + if (type.isNullable) { + // Nullable ints need to check for NSNull, and Int32 before casting can be done safely. + // This nested ternary is a necessary evil to avoid less efficient conversions. + return '$value is NSNull ? nil : ($value is Int64? ? $value as! Int64? : Int64($value as! Int32))'; + } else { + return '$value is Int64 ? $value as! Int64 : Int64($value as! Int32)'; + } + } else if (type.isNullable) { + return 'nilOrValue($value)'; + } else { + return '$value as! ${_swiftTypeForDartType(type)}'; + } + } + + final String fieldType = _swiftTypeForDartType(type); + + if (type.isNullable) { + if (listEncodedClassNames != null && + listEncodedClassNames.contains(type.baseName)) { + indent.writeln('var $variableName: $fieldType? = nil'); + indent.write('if let ${variableName}List = $value as! [Any]? '); + indent.addScoped('{', '}', () { + indent.writeln( + '$variableName = $fieldType.fromList(${variableName}List)'); + }); + } else if (listEncodedEnumNames != null && + listEncodedEnumNames.contains(type.baseName)) { + indent.writeln('var $variableName: $fieldType? = nil'); + indent.writeln( + 'let ${variableName}EnumVal: Int? = ${castForceUnwrap(value, const TypeDeclaration(baseName: 'Int', isNullable: true), root)}'); + indent + .write('if let ${variableName}RawValue = ${variableName}EnumVal '); + indent.addScoped('{', '}', () { + indent.writeln( + '$variableName = $fieldType(rawValue: ${variableName}RawValue)!'); + }); + } else { + indent.writeln( + 'let $variableName: $fieldType? = ${castForceUnwrap(value, type, root)}'); + } + } else { + if (listEncodedClassNames != null && + listEncodedClassNames.contains(type.baseName)) { + indent.writeln( + 'let $variableName = $fieldType.fromList($value as! [Any])!'); + } else { + indent.writeln( + 'let $variableName = ${castForceUnwrap(value, type, root)}'); + } + } + } + void _writeWrapResult(Indent indent) { indent.newln(); indent.write('private func wrapResult(_ result: Any?) -> [Any?] '); @@ -637,11 +690,21 @@ import FlutterMacOS }); } + void _writeNilOrValue(Indent indent) { + indent.format(''' + +private func nilOrValue(_ value: Any?) -> T? { + if value is NSNull { return nil } + return (value as Any) as! T? +}'''); + } + @override void writeGeneralUtilities( SwiftOptions generatorOptions, Root root, Indent indent) { _writeWrapResult(indent); _writeWrapError(indent); + _writeNilOrValue(indent); } } @@ -667,23 +730,6 @@ String _camelCase(String text) { return pascal[0].toLowerCase() + pascal.substring(1); } -String _castForceUnwrap(String value, TypeDeclaration type, Root root) { - final String forceUnwrap = type.isNullable ? '' : '!'; - final String castUnwrap = type.isNullable ? '?' : ''; - if (isEnum(root, type)) { - final String nullableConditionPrefix = - type.isNullable ? '$value == nil ? nil : ' : ''; - return '$nullableConditionPrefix${_swiftTypeForDartType(type)}(rawValue: $value as! Int)$forceUnwrap'; - } else if (type.baseName == 'Object') { - // Special-cased to avoid warnings about using 'as' with Any. - return value; - } else if (type.baseName == 'int') { - return '($value is Int) ? Int64($value as! Int) : $value as! Int64$castUnwrap'; - } else { - return '$value as! ${_swiftTypeForDartType(type)}$castUnwrap'; - } -} - /// Converts a [List] of [TypeDeclaration]s to a comma separated [String] to be /// used in Swift code. String _flattenTypeArguments(List args) { diff --git a/packages/pigeon/mock_handler_tester/test/message.dart b/packages/pigeon/mock_handler_tester/test/message.dart index 01543d7ac23..24edfc79dda 100644 --- a/packages/pigeon/mock_handler_tester/test/message.dart +++ b/packages/pigeon/mock_handler_tester/test/message.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/mock_handler_tester/test/test.dart b/packages/pigeon/mock_handler_tester/test/test.dart index 421c65bae28..2c402483887 100644 --- a/packages/pigeon/mock_handler_tester/test/test.dart +++ b/packages/pigeon/mock_handler_tester/test/test.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import // ignore_for_file: avoid_relative_lib_imports diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java index 586ede195cc..aa03f939db0 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon package com.example.alternate_language_test_plugin; diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h index 572f26923cd..94c8476b8db 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon #import diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m index d9451b83298..597221179f7 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon #import "CoreTests.gen.h" diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart index 3f6d4e85fdb..90cf481a613 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/flutter_unittests.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/flutter_unittests.gen.dart index 605de08823d..646557e5d55 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/flutter_unittests.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/flutter_unittests.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart index 743cdbb7b12..261a4ea4434 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart index 03124128f47..02464cc431f 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart index 7c64e887885..494b6ecf560 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart index 3bee98184bc..df0e8a4e397 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.gen.dart index 47e74241788..15c103933ff 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/integration_tests.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/integration_tests.dart index 5157041b0fc..730dedfc9d4 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/integration_tests.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/integration_tests.dart @@ -1255,6 +1255,15 @@ void runPigeonIntegrationTests(TargetGenerator targetGenerator) { expect(echoObject, sentObject); }); + testWidgets('nullable big ints serialize and deserialize correctly', + (WidgetTester _) async { + final HostIntegrationCoreApi api = HostIntegrationCoreApi(); + + const int sentObject = _biggerThanBigInt; + final int? echoObject = await api.callFlutterEchoNullableInt(sentObject); + expect(echoObject, sentObject); + }); + testWidgets('null ints serialize and deserialize correctly', (WidgetTester _) async { final HostIntegrationCoreApi api = HostIntegrationCoreApi(); diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart index 3f6d4e85fdb..90cf481a613 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt index fc40e6c0f76..a235655633a 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon package com.example.test_plugin diff --git a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/EchoBinaryMessenger.swift b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/EchoBinaryMessenger.swift index 393ff02cec8..fe2886ff25c 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/EchoBinaryMessenger.swift +++ b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/EchoBinaryMessenger.swift @@ -28,8 +28,7 @@ class EchoBinaryMessenger: NSObject, FlutterBinaryMessenger { guard let args = self.codec.decode(message) as? [Any?], - let firstArg = args.first, - !(firstArg is NSNull) + let firstArg: Any? = nilOrValue(args.first) else { callback(self.defaultReturn.flatMap { self.codec.encode($0) }) return @@ -49,4 +48,9 @@ class EchoBinaryMessenger: NSObject, FlutterBinaryMessenger { func cleanUpConnection(_ connection: FlutterBinaryMessengerConnection) { // Method not implemented because this messenger is just for echoing } + + private func nilOrValue(_ value: Any?) -> T? { + if value is NSNull { return nil } + return (value as Any) as! T? + } } 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 eb2c59ea9bc..92421529092 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 @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation @@ -14,8 +14,6 @@ import FlutterMacOS #error("Unsupported platform.") #endif - - private func wrapResult(_ result: Any?) -> [Any?] { return [result] } @@ -35,6 +33,11 @@ private func wrapError(_ error: Any) -> [Any?] { ] } +private func nilOrValue(_ value: Any?) -> T? { + if value is NSNull { return nil } + return (value as Any) as! T? +} + enum AnEnum: Int { case one = 0 case two = 1 @@ -58,8 +61,8 @@ struct AllTypes { static func fromList(_ list: [Any]) -> AllTypes? { let aBool = list[0] as! Bool - let anInt = list[1] as! Int64 - let anInt64 = list[2] as! Int64 + let anInt = list[1] is Int64 ? list[1] as! Int64 : Int64(list[1] as! Int32) + let anInt64 = list[2] is Int64 ? list[2] as! Int64 : Int64(list[2] as! Int32) let aDouble = list[3] as! Double let aByteArray = list[4] as! FlutterStandardTypedData let a4ByteArray = list[5] as! FlutterStandardTypedData @@ -122,24 +125,25 @@ struct AllNullableTypes { var aNullableString: String? = nil static func fromList(_ list: [Any]) -> AllNullableTypes? { - let aNullableBool = list[0] as! Bool? - let aNullableInt = list[1] as! Int64? - let aNullableInt64 = list[2] as! Int64? - let aNullableDouble = list[3] as! Double? - let aNullableByteArray = list[4] as! FlutterStandardTypedData? - let aNullable4ByteArray = list[5] as! FlutterStandardTypedData? - let aNullable8ByteArray = list[6] as! FlutterStandardTypedData? - let aNullableFloatArray = list[7] as! FlutterStandardTypedData? - let aNullableList = list[8] as! [Any]? - let aNullableMap = list[9] as! [AnyHashable: Any]? - let nullableNestedList = list[10] as! [[Bool?]?]? - let nullableMapWithAnnotations = list[11] as! [String?: String?]? - let nullableMapWithObject = list[12] as! [String?: Any?]? + let aNullableBool: Bool? = nilOrValue(list[0]) + let aNullableInt: Int64? = list[1] is NSNull ? nil : (list[1] is Int64? ? list[1] as! Int64? : Int64(list[1] as! Int32)) + let aNullableInt64: Int64? = list[2] is NSNull ? nil : (list[2] is Int64? ? list[2] as! Int64? : Int64(list[2] as! Int32)) + let aNullableDouble: Double? = nilOrValue(list[3]) + let aNullableByteArray: FlutterStandardTypedData? = nilOrValue(list[4]) + let aNullable4ByteArray: FlutterStandardTypedData? = nilOrValue(list[5]) + let aNullable8ByteArray: FlutterStandardTypedData? = nilOrValue(list[6]) + let aNullableFloatArray: FlutterStandardTypedData? = nilOrValue(list[7]) + let aNullableList: [Any]? = nilOrValue(list[8]) + let aNullableMap: [AnyHashable: Any]? = nilOrValue(list[9]) + let nullableNestedList: [[Bool?]?]? = nilOrValue(list[10]) + let nullableMapWithAnnotations: [String?: String?]? = nilOrValue(list[11]) + let nullableMapWithObject: [String?: Any?]? = nilOrValue(list[12]) var aNullableEnum: AnEnum? = nil - if let aNullableEnumRawValue = list[13] as! Int? { - aNullableEnum = AnEnum(rawValue: aNullableEnumRawValue) + let aNullableEnumEnumVal: Int? = nilOrValue(list[13]) + if let aNullableEnumRawValue = aNullableEnumEnumVal { + aNullableEnum = AnEnum(rawValue: aNullableEnumRawValue)! } - let aNullableString = list[14] as! String? + let aNullableString: String? = nilOrValue(list[14]) return AllNullableTypes( aNullableBool: aNullableBool, @@ -205,7 +209,7 @@ struct TestMessage { var testList: [Any]? = nil static func fromList(_ list: [Any]) -> TestMessage? { - let testList = list[0] as! [Any]? + let testList: [Any]? = nilOrValue(list[0]) return TestMessage( testList: testList @@ -477,7 +481,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoIntChannel.setMessageHandler { message, reply in let args = message as! [Any] - let anIntArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64 + let anIntArg = args[0] is Int64 ? args[0] as! Int64 : Int64(args[0] as! Int32) do { let result = try api.echo(anIntArg) reply(wrapResult(result)) @@ -605,7 +609,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAllNullableTypesChannel.setMessageHandler { message, reply in let args = message as! [Any] - let everythingArg = args[0] as! AllNullableTypes? + let everythingArg: AllNullableTypes? = nilOrValue(args[0]) do { let result = try api.echo(everythingArg) reply(wrapResult(result)) @@ -639,7 +643,7 @@ class HostIntegrationCoreApiSetup { if let api = api { createNestedNullableStringChannel.setMessageHandler { message, reply in let args = message as! [Any] - let nullableStringArg = args[0] as! String? + let nullableStringArg: String? = nilOrValue(args[0]) do { let result = try api.createNestedObject(with: nullableStringArg) reply(wrapResult(result)) @@ -655,9 +659,9 @@ class HostIntegrationCoreApiSetup { if let api = api { sendMultipleNullableTypesChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableBoolArg = args[0] as! Bool? - let aNullableIntArg = (args[1] is Int) ? Int64(args[1] as! Int) : args[1] as! Int64? - let aNullableStringArg = args[2] as! String? + let aNullableBoolArg: Bool? = nilOrValue(args[0]) + let aNullableIntArg: Int64? = args[1] is NSNull ? nil : (args[1] is Int64? ? args[1] as! Int64? : Int64(args[1] as! Int32)) + let aNullableStringArg: String? = nilOrValue(args[2]) do { let result = try api.sendMultipleNullableTypes(aBool: aNullableBoolArg, anInt: aNullableIntArg, aString: aNullableStringArg) reply(wrapResult(result)) @@ -673,7 +677,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableIntChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableIntArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64? + let aNullableIntArg: Int64? = args[0] is NSNull ? nil : (args[0] is Int64? ? args[0] as! Int64? : Int64(args[0] as! Int32)) do { let result = try api.echo(aNullableIntArg) reply(wrapResult(result)) @@ -689,7 +693,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableDoubleChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableDoubleArg = args[0] as! Double? + let aNullableDoubleArg: Double? = nilOrValue(args[0]) do { let result = try api.echo(aNullableDoubleArg) reply(wrapResult(result)) @@ -705,7 +709,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableBoolChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableBoolArg = args[0] as! Bool? + let aNullableBoolArg: Bool? = nilOrValue(args[0]) do { let result = try api.echo(aNullableBoolArg) reply(wrapResult(result)) @@ -721,7 +725,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableStringChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableStringArg = args[0] as! String? + let aNullableStringArg: String? = nilOrValue(args[0]) do { let result = try api.echo(aNullableStringArg) reply(wrapResult(result)) @@ -737,7 +741,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableUint8ListChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableUint8ListArg = args[0] as! FlutterStandardTypedData? + let aNullableUint8ListArg: FlutterStandardTypedData? = nilOrValue(args[0]) do { let result = try api.echo(aNullableUint8ListArg) reply(wrapResult(result)) @@ -753,7 +757,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableObjectChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableObjectArg = args[0] + let aNullableObjectArg: Any? = args[0] do { let result = try api.echo(aNullableObjectArg) reply(wrapResult(result)) @@ -769,7 +773,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableListChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableListArg = args[0] as! [Any?]? + let aNullableListArg: [Any?]? = nilOrValue(args[0]) do { let result = try api.echoNullable(aNullableListArg) reply(wrapResult(result)) @@ -785,7 +789,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableMapChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableMapArg = args[0] as! [String?: Any?]? + let aNullableMapArg: [String?: Any?]? = nilOrValue(args[0]) do { let result = try api.echoNullable(aNullableMapArg) reply(wrapResult(result)) @@ -818,7 +822,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncIntChannel.setMessageHandler { message, reply in let args = message as! [Any] - let anIntArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64 + let anIntArg = args[0] is Int64 ? args[0] as! Int64 : Int64(args[0] as! Int32) api.echoAsync(anIntArg) { result in switch result { case .success(let res): @@ -1028,7 +1032,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableAllNullableTypesChannel.setMessageHandler { message, reply in let args = message as! [Any] - let everythingArg = args[0] as! AllNullableTypes? + let everythingArg: AllNullableTypes? = nilOrValue(args[0]) api.echoAsync(everythingArg) { result in switch result { case .success(let res): @@ -1046,7 +1050,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableIntChannel.setMessageHandler { message, reply in let args = message as! [Any] - let anIntArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64? + let anIntArg: Int64? = args[0] is NSNull ? nil : (args[0] is Int64? ? args[0] as! Int64? : Int64(args[0] as! Int32)) api.echoAsyncNullable(anIntArg) { result in switch result { case .success(let res): @@ -1064,7 +1068,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableDoubleChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aDoubleArg = args[0] as! Double? + let aDoubleArg: Double? = nilOrValue(args[0]) api.echoAsyncNullable(aDoubleArg) { result in switch result { case .success(let res): @@ -1082,7 +1086,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableBoolChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aBoolArg = args[0] as! Bool? + let aBoolArg: Bool? = nilOrValue(args[0]) api.echoAsyncNullable(aBoolArg) { result in switch result { case .success(let res): @@ -1100,7 +1104,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableStringChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aStringArg = args[0] as! String? + let aStringArg: String? = nilOrValue(args[0]) api.echoAsyncNullable(aStringArg) { result in switch result { case .success(let res): @@ -1118,7 +1122,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableUint8ListChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aUint8ListArg = args[0] as! FlutterStandardTypedData? + let aUint8ListArg: FlutterStandardTypedData? = nilOrValue(args[0]) api.echoAsyncNullable(aUint8ListArg) { result in switch result { case .success(let res): @@ -1136,7 +1140,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableObjectChannel.setMessageHandler { message, reply in let args = message as! [Any] - let anObjectArg = args[0] + let anObjectArg: Any? = args[0] api.echoAsyncNullable(anObjectArg) { result in switch result { case .success(let res): @@ -1154,7 +1158,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableListChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aListArg = args[0] as! [Any?]? + let aListArg: [Any?]? = nilOrValue(args[0]) api.echoAsyncNullable(aListArg) { result in switch result { case .success(let res): @@ -1172,7 +1176,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableMapChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aMapArg = args[0] as! [String?: Any?]? + let aMapArg: [String?: Any?]? = nilOrValue(args[0]) api.echAsyncoNullable(aMapArg) { result in switch result { case .success(let res): @@ -1251,9 +1255,9 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterSendMultipleNullableTypesChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableBoolArg = args[0] as! Bool? - let aNullableIntArg = (args[1] is Int) ? Int64(args[1] as! Int) : args[1] as! Int64? - let aNullableStringArg = args[2] as! String? + let aNullableBoolArg: Bool? = nilOrValue(args[0]) + let aNullableIntArg: Int64? = args[1] is NSNull ? nil : (args[1] is Int64? ? args[1] as! Int64? : Int64(args[1] as! Int32)) + let aNullableStringArg: String? = nilOrValue(args[2]) api.callFlutterSendMultipleNullableTypes(aBool: aNullableBoolArg, anInt: aNullableIntArg, aString: aNullableStringArg) { result in switch result { case .success(let res): @@ -1287,7 +1291,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoIntChannel.setMessageHandler { message, reply in let args = message as! [Any] - let anIntArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64 + let anIntArg = args[0] is Int64 ? args[0] as! Int64 : Int64(args[0] as! Int32) api.callFlutterEcho(anIntArg) { result in switch result { case .success(let res): @@ -1389,7 +1393,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableBoolChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aBoolArg = args[0] as! Bool? + let aBoolArg: Bool? = nilOrValue(args[0]) api.callFlutterEchoNullable(aBoolArg) { result in switch result { case .success(let res): @@ -1406,7 +1410,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableIntChannel.setMessageHandler { message, reply in let args = message as! [Any] - let anIntArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64? + let anIntArg: Int64? = args[0] is NSNull ? nil : (args[0] is Int64? ? args[0] as! Int64? : Int64(args[0] as! Int32)) api.callFlutterEchoNullable(anIntArg) { result in switch result { case .success(let res): @@ -1423,7 +1427,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableDoubleChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aDoubleArg = args[0] as! Double? + let aDoubleArg: Double? = nilOrValue(args[0]) api.callFlutterEchoNullable(aDoubleArg) { result in switch result { case .success(let res): @@ -1440,7 +1444,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableStringChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aStringArg = args[0] as! String? + let aStringArg: String? = nilOrValue(args[0]) api.callFlutterEchoNullable(aStringArg) { result in switch result { case .success(let res): @@ -1457,7 +1461,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableUint8ListChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aListArg = args[0] as! FlutterStandardTypedData? + let aListArg: FlutterStandardTypedData? = nilOrValue(args[0]) api.callFlutterEchoNullable(aListArg) { result in switch result { case .success(let res): @@ -1474,7 +1478,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableListChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aListArg = args[0] as! [Any?]? + let aListArg: [Any?]? = nilOrValue(args[0]) api.callFlutterEchoNullable(aListArg) { result in switch result { case .success(let res): @@ -1491,7 +1495,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableMapChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aMapArg = args[0] as! [String?: Any?]? + let aMapArg: [String?: Any?]? = nilOrValue(args[0]) api.callFlutterEchoNullable(aMapArg) { result in switch result { case .success(let res): @@ -1581,7 +1585,7 @@ class FlutterIntegrationCoreApi { func throwError(completion: @escaping (Any?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.throwError", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage(nil) { response in - let result = response + let result: Any? = response completion(result) } } @@ -1630,7 +1634,7 @@ class FlutterIntegrationCoreApi { func echo(_ anIntArg: Int64, completion: @escaping (Int64) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoInt", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([anIntArg] as [Any?]) { response in - let result = (response is Int) ? Int64(response as! Int) : response as! Int64 + let result = response is Int64 ? response as! Int64 : Int64(response as! Int32) completion(result) } } @@ -1678,7 +1682,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ aBoolArg: Bool?, completion: @escaping (Bool?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableBool", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([aBoolArg] as [Any?]) { response in - let result = response as! Bool? + let result: Bool? = nilOrValue(response) completion(result) } } @@ -1686,7 +1690,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ anIntArg: Int64?, completion: @escaping (Int64?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableInt", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([anIntArg] as [Any?]) { response in - let result = (response is Int) ? Int64(response as! Int) : response as! Int64? + let result: Int64? = response is NSNull ? nil : (response is Int64? ? response as! Int64? : Int64(response as! Int32)) completion(result) } } @@ -1694,7 +1698,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ aDoubleArg: Double?, completion: @escaping (Double?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableDouble", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([aDoubleArg] as [Any?]) { response in - let result = response as! Double? + let result: Double? = nilOrValue(response) completion(result) } } @@ -1702,7 +1706,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ aStringArg: String?, completion: @escaping (String?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableString", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([aStringArg] as [Any?]) { response in - let result = response as! String? + let result: String? = nilOrValue(response) completion(result) } } @@ -1710,7 +1714,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ aListArg: FlutterStandardTypedData?, completion: @escaping (FlutterStandardTypedData?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableUint8List", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([aListArg] as [Any?]) { response in - let result = response as! FlutterStandardTypedData? + let result: FlutterStandardTypedData? = nilOrValue(response) completion(result) } } @@ -1718,7 +1722,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ aListArg: [Any?]?, completion: @escaping ([Any?]?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableList", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([aListArg] as [Any?]) { response in - let result = response as! [Any?]? + let result: [Any?]? = nilOrValue(response) completion(result) } } @@ -1726,7 +1730,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ aMapArg: [String?: Any?]?, completion: @escaping ([String?: Any?]?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableMap", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([aMapArg] as [Any?]) { response in - let result = response as! [String?: Any?]? + let result: [String?: Any?]? = nilOrValue(response) completion(result) } } 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 eb2c59ea9bc..92421529092 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 @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation @@ -14,8 +14,6 @@ import FlutterMacOS #error("Unsupported platform.") #endif - - private func wrapResult(_ result: Any?) -> [Any?] { return [result] } @@ -35,6 +33,11 @@ private func wrapError(_ error: Any) -> [Any?] { ] } +private func nilOrValue(_ value: Any?) -> T? { + if value is NSNull { return nil } + return (value as Any) as! T? +} + enum AnEnum: Int { case one = 0 case two = 1 @@ -58,8 +61,8 @@ struct AllTypes { static func fromList(_ list: [Any]) -> AllTypes? { let aBool = list[0] as! Bool - let anInt = list[1] as! Int64 - let anInt64 = list[2] as! Int64 + let anInt = list[1] is Int64 ? list[1] as! Int64 : Int64(list[1] as! Int32) + let anInt64 = list[2] is Int64 ? list[2] as! Int64 : Int64(list[2] as! Int32) let aDouble = list[3] as! Double let aByteArray = list[4] as! FlutterStandardTypedData let a4ByteArray = list[5] as! FlutterStandardTypedData @@ -122,24 +125,25 @@ struct AllNullableTypes { var aNullableString: String? = nil static func fromList(_ list: [Any]) -> AllNullableTypes? { - let aNullableBool = list[0] as! Bool? - let aNullableInt = list[1] as! Int64? - let aNullableInt64 = list[2] as! Int64? - let aNullableDouble = list[3] as! Double? - let aNullableByteArray = list[4] as! FlutterStandardTypedData? - let aNullable4ByteArray = list[5] as! FlutterStandardTypedData? - let aNullable8ByteArray = list[6] as! FlutterStandardTypedData? - let aNullableFloatArray = list[7] as! FlutterStandardTypedData? - let aNullableList = list[8] as! [Any]? - let aNullableMap = list[9] as! [AnyHashable: Any]? - let nullableNestedList = list[10] as! [[Bool?]?]? - let nullableMapWithAnnotations = list[11] as! [String?: String?]? - let nullableMapWithObject = list[12] as! [String?: Any?]? + let aNullableBool: Bool? = nilOrValue(list[0]) + let aNullableInt: Int64? = list[1] is NSNull ? nil : (list[1] is Int64? ? list[1] as! Int64? : Int64(list[1] as! Int32)) + let aNullableInt64: Int64? = list[2] is NSNull ? nil : (list[2] is Int64? ? list[2] as! Int64? : Int64(list[2] as! Int32)) + let aNullableDouble: Double? = nilOrValue(list[3]) + let aNullableByteArray: FlutterStandardTypedData? = nilOrValue(list[4]) + let aNullable4ByteArray: FlutterStandardTypedData? = nilOrValue(list[5]) + let aNullable8ByteArray: FlutterStandardTypedData? = nilOrValue(list[6]) + let aNullableFloatArray: FlutterStandardTypedData? = nilOrValue(list[7]) + let aNullableList: [Any]? = nilOrValue(list[8]) + let aNullableMap: [AnyHashable: Any]? = nilOrValue(list[9]) + let nullableNestedList: [[Bool?]?]? = nilOrValue(list[10]) + let nullableMapWithAnnotations: [String?: String?]? = nilOrValue(list[11]) + let nullableMapWithObject: [String?: Any?]? = nilOrValue(list[12]) var aNullableEnum: AnEnum? = nil - if let aNullableEnumRawValue = list[13] as! Int? { - aNullableEnum = AnEnum(rawValue: aNullableEnumRawValue) + let aNullableEnumEnumVal: Int? = nilOrValue(list[13]) + if let aNullableEnumRawValue = aNullableEnumEnumVal { + aNullableEnum = AnEnum(rawValue: aNullableEnumRawValue)! } - let aNullableString = list[14] as! String? + let aNullableString: String? = nilOrValue(list[14]) return AllNullableTypes( aNullableBool: aNullableBool, @@ -205,7 +209,7 @@ struct TestMessage { var testList: [Any]? = nil static func fromList(_ list: [Any]) -> TestMessage? { - let testList = list[0] as! [Any]? + let testList: [Any]? = nilOrValue(list[0]) return TestMessage( testList: testList @@ -477,7 +481,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoIntChannel.setMessageHandler { message, reply in let args = message as! [Any] - let anIntArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64 + let anIntArg = args[0] is Int64 ? args[0] as! Int64 : Int64(args[0] as! Int32) do { let result = try api.echo(anIntArg) reply(wrapResult(result)) @@ -605,7 +609,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAllNullableTypesChannel.setMessageHandler { message, reply in let args = message as! [Any] - let everythingArg = args[0] as! AllNullableTypes? + let everythingArg: AllNullableTypes? = nilOrValue(args[0]) do { let result = try api.echo(everythingArg) reply(wrapResult(result)) @@ -639,7 +643,7 @@ class HostIntegrationCoreApiSetup { if let api = api { createNestedNullableStringChannel.setMessageHandler { message, reply in let args = message as! [Any] - let nullableStringArg = args[0] as! String? + let nullableStringArg: String? = nilOrValue(args[0]) do { let result = try api.createNestedObject(with: nullableStringArg) reply(wrapResult(result)) @@ -655,9 +659,9 @@ class HostIntegrationCoreApiSetup { if let api = api { sendMultipleNullableTypesChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableBoolArg = args[0] as! Bool? - let aNullableIntArg = (args[1] is Int) ? Int64(args[1] as! Int) : args[1] as! Int64? - let aNullableStringArg = args[2] as! String? + let aNullableBoolArg: Bool? = nilOrValue(args[0]) + let aNullableIntArg: Int64? = args[1] is NSNull ? nil : (args[1] is Int64? ? args[1] as! Int64? : Int64(args[1] as! Int32)) + let aNullableStringArg: String? = nilOrValue(args[2]) do { let result = try api.sendMultipleNullableTypes(aBool: aNullableBoolArg, anInt: aNullableIntArg, aString: aNullableStringArg) reply(wrapResult(result)) @@ -673,7 +677,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableIntChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableIntArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64? + let aNullableIntArg: Int64? = args[0] is NSNull ? nil : (args[0] is Int64? ? args[0] as! Int64? : Int64(args[0] as! Int32)) do { let result = try api.echo(aNullableIntArg) reply(wrapResult(result)) @@ -689,7 +693,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableDoubleChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableDoubleArg = args[0] as! Double? + let aNullableDoubleArg: Double? = nilOrValue(args[0]) do { let result = try api.echo(aNullableDoubleArg) reply(wrapResult(result)) @@ -705,7 +709,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableBoolChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableBoolArg = args[0] as! Bool? + let aNullableBoolArg: Bool? = nilOrValue(args[0]) do { let result = try api.echo(aNullableBoolArg) reply(wrapResult(result)) @@ -721,7 +725,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableStringChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableStringArg = args[0] as! String? + let aNullableStringArg: String? = nilOrValue(args[0]) do { let result = try api.echo(aNullableStringArg) reply(wrapResult(result)) @@ -737,7 +741,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableUint8ListChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableUint8ListArg = args[0] as! FlutterStandardTypedData? + let aNullableUint8ListArg: FlutterStandardTypedData? = nilOrValue(args[0]) do { let result = try api.echo(aNullableUint8ListArg) reply(wrapResult(result)) @@ -753,7 +757,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableObjectChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableObjectArg = args[0] + let aNullableObjectArg: Any? = args[0] do { let result = try api.echo(aNullableObjectArg) reply(wrapResult(result)) @@ -769,7 +773,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableListChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableListArg = args[0] as! [Any?]? + let aNullableListArg: [Any?]? = nilOrValue(args[0]) do { let result = try api.echoNullable(aNullableListArg) reply(wrapResult(result)) @@ -785,7 +789,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoNullableMapChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableMapArg = args[0] as! [String?: Any?]? + let aNullableMapArg: [String?: Any?]? = nilOrValue(args[0]) do { let result = try api.echoNullable(aNullableMapArg) reply(wrapResult(result)) @@ -818,7 +822,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncIntChannel.setMessageHandler { message, reply in let args = message as! [Any] - let anIntArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64 + let anIntArg = args[0] is Int64 ? args[0] as! Int64 : Int64(args[0] as! Int32) api.echoAsync(anIntArg) { result in switch result { case .success(let res): @@ -1028,7 +1032,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableAllNullableTypesChannel.setMessageHandler { message, reply in let args = message as! [Any] - let everythingArg = args[0] as! AllNullableTypes? + let everythingArg: AllNullableTypes? = nilOrValue(args[0]) api.echoAsync(everythingArg) { result in switch result { case .success(let res): @@ -1046,7 +1050,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableIntChannel.setMessageHandler { message, reply in let args = message as! [Any] - let anIntArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64? + let anIntArg: Int64? = args[0] is NSNull ? nil : (args[0] is Int64? ? args[0] as! Int64? : Int64(args[0] as! Int32)) api.echoAsyncNullable(anIntArg) { result in switch result { case .success(let res): @@ -1064,7 +1068,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableDoubleChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aDoubleArg = args[0] as! Double? + let aDoubleArg: Double? = nilOrValue(args[0]) api.echoAsyncNullable(aDoubleArg) { result in switch result { case .success(let res): @@ -1082,7 +1086,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableBoolChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aBoolArg = args[0] as! Bool? + let aBoolArg: Bool? = nilOrValue(args[0]) api.echoAsyncNullable(aBoolArg) { result in switch result { case .success(let res): @@ -1100,7 +1104,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableStringChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aStringArg = args[0] as! String? + let aStringArg: String? = nilOrValue(args[0]) api.echoAsyncNullable(aStringArg) { result in switch result { case .success(let res): @@ -1118,7 +1122,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableUint8ListChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aUint8ListArg = args[0] as! FlutterStandardTypedData? + let aUint8ListArg: FlutterStandardTypedData? = nilOrValue(args[0]) api.echoAsyncNullable(aUint8ListArg) { result in switch result { case .success(let res): @@ -1136,7 +1140,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableObjectChannel.setMessageHandler { message, reply in let args = message as! [Any] - let anObjectArg = args[0] + let anObjectArg: Any? = args[0] api.echoAsyncNullable(anObjectArg) { result in switch result { case .success(let res): @@ -1154,7 +1158,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableListChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aListArg = args[0] as! [Any?]? + let aListArg: [Any?]? = nilOrValue(args[0]) api.echoAsyncNullable(aListArg) { result in switch result { case .success(let res): @@ -1172,7 +1176,7 @@ class HostIntegrationCoreApiSetup { if let api = api { echoAsyncNullableMapChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aMapArg = args[0] as! [String?: Any?]? + let aMapArg: [String?: Any?]? = nilOrValue(args[0]) api.echAsyncoNullable(aMapArg) { result in switch result { case .success(let res): @@ -1251,9 +1255,9 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterSendMultipleNullableTypesChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aNullableBoolArg = args[0] as! Bool? - let aNullableIntArg = (args[1] is Int) ? Int64(args[1] as! Int) : args[1] as! Int64? - let aNullableStringArg = args[2] as! String? + let aNullableBoolArg: Bool? = nilOrValue(args[0]) + let aNullableIntArg: Int64? = args[1] is NSNull ? nil : (args[1] is Int64? ? args[1] as! Int64? : Int64(args[1] as! Int32)) + let aNullableStringArg: String? = nilOrValue(args[2]) api.callFlutterSendMultipleNullableTypes(aBool: aNullableBoolArg, anInt: aNullableIntArg, aString: aNullableStringArg) { result in switch result { case .success(let res): @@ -1287,7 +1291,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoIntChannel.setMessageHandler { message, reply in let args = message as! [Any] - let anIntArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64 + let anIntArg = args[0] is Int64 ? args[0] as! Int64 : Int64(args[0] as! Int32) api.callFlutterEcho(anIntArg) { result in switch result { case .success(let res): @@ -1389,7 +1393,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableBoolChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aBoolArg = args[0] as! Bool? + let aBoolArg: Bool? = nilOrValue(args[0]) api.callFlutterEchoNullable(aBoolArg) { result in switch result { case .success(let res): @@ -1406,7 +1410,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableIntChannel.setMessageHandler { message, reply in let args = message as! [Any] - let anIntArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64? + let anIntArg: Int64? = args[0] is NSNull ? nil : (args[0] is Int64? ? args[0] as! Int64? : Int64(args[0] as! Int32)) api.callFlutterEchoNullable(anIntArg) { result in switch result { case .success(let res): @@ -1423,7 +1427,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableDoubleChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aDoubleArg = args[0] as! Double? + let aDoubleArg: Double? = nilOrValue(args[0]) api.callFlutterEchoNullable(aDoubleArg) { result in switch result { case .success(let res): @@ -1440,7 +1444,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableStringChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aStringArg = args[0] as! String? + let aStringArg: String? = nilOrValue(args[0]) api.callFlutterEchoNullable(aStringArg) { result in switch result { case .success(let res): @@ -1457,7 +1461,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableUint8ListChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aListArg = args[0] as! FlutterStandardTypedData? + let aListArg: FlutterStandardTypedData? = nilOrValue(args[0]) api.callFlutterEchoNullable(aListArg) { result in switch result { case .success(let res): @@ -1474,7 +1478,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableListChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aListArg = args[0] as! [Any?]? + let aListArg: [Any?]? = nilOrValue(args[0]) api.callFlutterEchoNullable(aListArg) { result in switch result { case .success(let res): @@ -1491,7 +1495,7 @@ class HostIntegrationCoreApiSetup { if let api = api { callFlutterEchoNullableMapChannel.setMessageHandler { message, reply in let args = message as! [Any] - let aMapArg = args[0] as! [String?: Any?]? + let aMapArg: [String?: Any?]? = nilOrValue(args[0]) api.callFlutterEchoNullable(aMapArg) { result in switch result { case .success(let res): @@ -1581,7 +1585,7 @@ class FlutterIntegrationCoreApi { func throwError(completion: @escaping (Any?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.throwError", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage(nil) { response in - let result = response + let result: Any? = response completion(result) } } @@ -1630,7 +1634,7 @@ class FlutterIntegrationCoreApi { func echo(_ anIntArg: Int64, completion: @escaping (Int64) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoInt", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([anIntArg] as [Any?]) { response in - let result = (response is Int) ? Int64(response as! Int) : response as! Int64 + let result = response is Int64 ? response as! Int64 : Int64(response as! Int32) completion(result) } } @@ -1678,7 +1682,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ aBoolArg: Bool?, completion: @escaping (Bool?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableBool", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([aBoolArg] as [Any?]) { response in - let result = response as! Bool? + let result: Bool? = nilOrValue(response) completion(result) } } @@ -1686,7 +1690,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ anIntArg: Int64?, completion: @escaping (Int64?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableInt", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([anIntArg] as [Any?]) { response in - let result = (response is Int) ? Int64(response as! Int) : response as! Int64? + let result: Int64? = response is NSNull ? nil : (response is Int64? ? response as! Int64? : Int64(response as! Int32)) completion(result) } } @@ -1694,7 +1698,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ aDoubleArg: Double?, completion: @escaping (Double?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableDouble", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([aDoubleArg] as [Any?]) { response in - let result = response as! Double? + let result: Double? = nilOrValue(response) completion(result) } } @@ -1702,7 +1706,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ aStringArg: String?, completion: @escaping (String?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableString", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([aStringArg] as [Any?]) { response in - let result = response as! String? + let result: String? = nilOrValue(response) completion(result) } } @@ -1710,7 +1714,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ aListArg: FlutterStandardTypedData?, completion: @escaping (FlutterStandardTypedData?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableUint8List", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([aListArg] as [Any?]) { response in - let result = response as! FlutterStandardTypedData? + let result: FlutterStandardTypedData? = nilOrValue(response) completion(result) } } @@ -1718,7 +1722,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ aListArg: [Any?]?, completion: @escaping ([Any?]?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableList", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([aListArg] as [Any?]) { response in - let result = response as! [Any?]? + let result: [Any?]? = nilOrValue(response) completion(result) } } @@ -1726,7 +1730,7 @@ class FlutterIntegrationCoreApi { func echoNullable(_ aMapArg: [String?: Any?]?, completion: @escaping ([String?: Any?]?) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableMap", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([aMapArg] as [Any?]) { response in - let result = response as! [String?: Any?]? + let result: [String?: Any?]? = nilOrValue(response) completion(result) } } diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp index 9530b62f6e8..5b2f38b98c0 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp +++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon #undef _HAS_EXCEPTIONS diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h index ece787bae8e..476d246dd01 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h +++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v9.2.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.1), do not edit directly. // See also: https://pub.dev/packages/pigeon #ifndef PIGEON_CORE_TESTS_GEN_H_ diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index 09e8d1a9984..2e9ea2a9d57 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%3Apigeon -version: 9.2.0 # This must match the version in lib/generator_tools.dart +version: 9.2.1 # This must match the version in lib/generator_tools.dart environment: sdk: ">=2.18.0 <4.0.0" diff --git a/packages/pigeon/test/swift_generator_test.dart b/packages/pigeon/test/swift_generator_test.dart index 942460f3ecc..452bf8f8424 100644 --- a/packages/pigeon/test/swift_generator_test.dart +++ b/packages/pigeon/test/swift_generator_test.dart @@ -452,7 +452,7 @@ void main() { expect(code, contains('struct Nested')); expect(code, contains('var nested: Nested? = nil')); expect(code, contains('static func fromList(_ list: [Any]) -> Outer?')); - expect(code, contains('nested = Nested.fromList(nestedList as [Any])')); + expect(code, contains('nested = Nested.fromList(nestedList)')); expect(code, contains('func toList() -> [Any?]')); }); @@ -800,11 +800,11 @@ void main() { expect( code, contains( - 'let xArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64')); + 'let xArg = args[0] is Int64 ? args[0] as! Int64 : Int64(args[0] as! Int32)')); expect( code, contains( - 'let yArg = (args[1] is Int) ? Int64(args[1] as! Int) : args[1] as! Int64')); + 'let yArg = args[1] is Int64 ? args[1] as! Int64 : Int64(args[1] as! Int32)')); expect(code, contains('let result = try api.add(x: xArg, y: yArg)')); expect(code, contains('reply(wrapResult(result))')); }); @@ -837,7 +837,7 @@ void main() { expect( code, contains( - 'let result = (response is Int) ? Int64(response as! Int) : response as! Int64')); + 'let result = response is Int64 ? response as! Int64 : Int64(response as! Int32)')); expect(code, contains('completion(result)')); expect( code, @@ -927,7 +927,7 @@ void main() { expect( code, contains( - 'let fooArg = (args[0] is Int) ? Int64(args[0] as! Int) : args[0] as! Int64?')); + 'let fooArg: Int64? = args[0] is NSNull ? nil : (args[0] is Int64? ? args[0] as! Int64? : Int64(args[0] as! Int32))')); }); test('nullable argument flutter', () {