diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 0d8bf1004cd..14ee5daa917 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,11 @@ +## 24.1.1 + +* [swift, kotlin] Adds an error message when a ProxyAPI callback method that returns a non-null + value is nullable. +* [swift, kotlin] Adds an error message in the `ProxyApiBaseCodec` when an instance could not be + retrieved when reading a value. +* [swift, kotlin] Fixes ProxyAPI platform APIs not calling completion when creating a new instance. + ## 24.1.0 * [kotlin, swift] Adds annotation options to omit shared classes used in Event Channels. diff --git a/packages/pigeon/lib/src/generator_tools.dart b/packages/pigeon/lib/src/generator_tools.dart index 1398b446035..e6d7be1623b 100644 --- a/packages/pigeon/lib/src/generator_tools.dart +++ b/packages/pigeon/lib/src/generator_tools.dart @@ -14,7 +14,7 @@ import 'ast.dart'; /// The current version of pigeon. /// /// This must match the version in pubspec.yaml. -const String pigeonVersion = '24.1.0'; +const String pigeonVersion = '24.1.1'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart index 6c51d8a0b0d..6a59d7594d0 100644 --- a/packages/pigeon/lib/src/kotlin/kotlin_generator.dart +++ b/packages/pigeon/lib/src/kotlin/kotlin_generator.dart @@ -847,7 +847,15 @@ if (wrapped == null) { override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? { return when (type) { $proxyApiCodecInstanceManagerKey.toByte() -> { - return registrar.instanceManager.getInstance(readValue(buffer) as Long) + val identifier: Long = readValue(buffer) as Long + val instance: Any? = registrar.instanceManager.getInstance(identifier) + if (instance == null) { + Log.e( + "${proxyApiCodecName(const KotlinOptions())}", + "Failed to find instance with identifier: \$identifier" + ) + } + return instance } else -> super.readValueOfType(type, buffer) } @@ -1912,58 +1920,63 @@ if (wrapped == null) { ''' callback( Result.failure( - $errorClassName("ignore-calls-error", "Calls to Dart are being ignored.", ""))) - return''', + $errorClassName("ignore-calls-error", "Calls to Dart are being ignored.", "")))''', ); }, + addTrailingNewline: false, ); indent.writeScoped( - 'if (pigeonRegistrar.instanceManager.containsInstance(${classMemberNamePrefix}instanceArg)) {', + ' else if (pigeonRegistrar.instanceManager.containsInstance(${classMemberNamePrefix}instanceArg)) {', '}', () { - indent.writeln('Result.success(Unit)'); - indent.writeln('return'); + indent.writeln('callback(Result.success(Unit))'); }, + addTrailingNewline: false, ); - if (api.hasCallbackConstructor()) { - indent.writeln( - 'val ${classMemberNamePrefix}identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(${classMemberNamePrefix}instanceArg)', - ); - enumerate(api.unattachedFields, (int index, ApiField field) { - final String argName = _getSafeArgumentName(index, field); + indent.writeScoped(' else {', '}', () { + if (api.hasCallbackConstructor()) { indent.writeln( - 'val $argName = ${field.name}(${classMemberNamePrefix}instanceArg)', + 'val ${classMemberNamePrefix}identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(${classMemberNamePrefix}instanceArg)', ); - }); + enumerate(api.unattachedFields, (int index, ApiField field) { + final String argName = _getSafeArgumentName(index, field); + indent.writeln( + 'val $argName = ${field.name}(${classMemberNamePrefix}instanceArg)', + ); + }); - indent - .writeln('val binaryMessenger = pigeonRegistrar.binaryMessenger'); - indent.writeln('val codec = pigeonRegistrar.codec'); - _writeFlutterMethodMessageCall( - indent, - returnType: returnType, - channelName: channelName, - errorClassName: errorClassName, - parameters: [ - Parameter( - name: '${classMemberNamePrefix}identifier', - type: const TypeDeclaration( - baseName: 'int', - isNullable: false, + indent.writeln( + 'val binaryMessenger = pigeonRegistrar.binaryMessenger'); + indent.writeln('val codec = pigeonRegistrar.codec'); + _writeFlutterMethodMessageCall( + indent, + returnType: returnType, + channelName: channelName, + errorClassName: errorClassName, + parameters: [ + Parameter( + name: '${classMemberNamePrefix}identifier', + type: const TypeDeclaration( + baseName: 'int', + isNullable: false, + ), ), - ), - ...api.unattachedFields.map( - (ApiField field) { - return Parameter(name: field.name, type: field.type); - }, - ), - ], - ); - } else { - indent.writeln( - 'throw IllegalStateException("Attempting to create a new Dart instance of ${api.name}, but the class has a nonnull callback method.")', - ); - } + ...api.unattachedFields.map( + (ApiField field) { + return Parameter(name: field.name, type: field.type); + }, + ), + ], + ); + } else { + indent.format( + ''' + callback( + Result.failure( + $errorClassName("new-instance-error", "Attempting to create a new Dart instance of ${api.name}, but the class has a nonnull callback method.", "")))''', + ); + } + }); }, ); indent.newln(); diff --git a/packages/pigeon/lib/src/pigeon_lib.dart b/packages/pigeon/lib/src/pigeon_lib.dart index b7238c1f250..45ed062ca52 100644 --- a/packages/pigeon/lib/src/pigeon_lib.dart +++ b/packages/pigeon/lib/src/pigeon_lib.dart @@ -1397,11 +1397,22 @@ List _validateProxyApi( } } - if (method.location == ApiLocation.flutter && method.isStatic) { - result.add(Error( - message: 'Static callback methods are not supported: ${method.name}.', - lineNumber: _calculateLineNumberNullable(source, method.offset), - )); + if (method.location == ApiLocation.flutter) { + if (!method.returnType.isVoid && + !method.returnType.isNullable && + !method.isRequired) { + result.add(Error( + message: + 'Callback methods that return a non-null value must be non-null: ${method.name}.', + lineNumber: _calculateLineNumberNullable(source, method.offset), + )); + } + if (method.isStatic) { + result.add(Error( + message: 'Static callback methods are not supported: ${method.name}.', + lineNumber: _calculateLineNumberNullable(source, method.offset), + )); + } } } diff --git a/packages/pigeon/lib/src/swift/swift_generator.dart b/packages/pigeon/lib/src/swift/swift_generator.dart index 9ff3655eb01..848c4bfa323 100644 --- a/packages/pigeon/lib/src/swift/swift_generator.dart +++ b/packages/pigeon/lib/src/swift/swift_generator.dart @@ -949,6 +949,9 @@ if (wrapped == nil) { let identifier = self.readValue() let instance: AnyObject? = pigeonRegistrar.instanceManager.instance( forIdentifier: identifier is Int64 ? identifier as! Int64 : Int64(identifier as! Int32)) + if instance == nil { + print("Failed to find instance with identifier: \\(identifier!)") + } return instance default: return super.readValue(ofType: type) @@ -1502,7 +1505,7 @@ private func nilOrValue(_ value: Any?) -> T? { } indent.addScoped('else {', '}', () { if (returnType.isVoid) { - indent.writeln('completion(.success(Void()))'); + indent.writeln('completion(.success(()))'); } else { final String fieldType = _swiftTypeForDartType(returnType); _writeGenericCasting( @@ -2318,63 +2321,70 @@ private func nilOrValue(_ value: Any?) -> T? { .failure( ${_getErrorClassName(generatorOptions)}( code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - return''', + message: "Calls to Dart are being ignored.", details: "")))''', ); }, + addTrailingNewline: false, ); indent.writeScoped( - 'if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) {', + ' else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) {', '}', () { - indent.writeln('completion(.success(Void()))'); - indent.writeln('return'); + indent.writeln('completion(.success(()))'); }, + addTrailingNewline: false, ); - if (api.hasCallbackConstructor()) { - indent.writeln( - 'let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject)', - ); - enumerate(api.unattachedFields, (int index, ApiField field) { - final String argName = _getSafeArgumentName(index, field); + indent.writeScoped(' else {', '}', () { + if (api.hasCallbackConstructor()) { indent.writeln( - 'let $argName = try! pigeonDelegate.${field.name}(pigeonApi: self, pigeonInstance: pigeonInstance)', + 'let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject)', ); - }); - indent.writeln( - 'let binaryMessenger = pigeonRegistrar.binaryMessenger', - ); - indent.writeln('let codec = pigeonRegistrar.codec'); - _writeFlutterMethodMessageCall( - indent, - generatorOptions: generatorOptions, - parameters: [ - Parameter( - name: 'pigeonIdentifier', - type: const TypeDeclaration( - baseName: 'int', - isNullable: false, + enumerate(api.unattachedFields, (int index, ApiField field) { + final String argName = _getSafeArgumentName(index, field); + indent.writeln( + 'let $argName = try! pigeonDelegate.${field.name}(pigeonApi: self, pigeonInstance: pigeonInstance)', + ); + }); + indent.writeln( + 'let binaryMessenger = pigeonRegistrar.binaryMessenger', + ); + indent.writeln('let codec = pigeonRegistrar.codec'); + _writeFlutterMethodMessageCall( + indent, + generatorOptions: generatorOptions, + parameters: [ + Parameter( + name: 'pigeonIdentifier', + type: const TypeDeclaration( + baseName: 'int', + isNullable: false, + ), ), + ...api.unattachedFields.map( + (ApiField field) { + return Parameter(name: field.name, type: field.type); + }, + ), + ], + returnType: const TypeDeclaration.voidDeclaration(), + channelName: makeChannelNameWithStrings( + apiName: api.name, + methodName: newInstanceMethodName, + dartPackageName: dartPackageName, ), - ...api.unattachedFields.map( - (ApiField field) { - return Parameter(name: field.name, type: field.type); - }, - ), - ], - returnType: const TypeDeclaration.voidDeclaration(), - channelName: makeChannelNameWithStrings( - apiName: api.name, - methodName: newInstanceMethodName, - dartPackageName: dartPackageName, - ), - ); - } else { - indent.writeln( - 'print("Error: Attempting to create a new Dart instance of ${api.name}, but the class has a nonnull callback method.")', - ); - } + ); + } else { + indent.format( + ''' + completion( + .failure( + ${_getErrorClassName(generatorOptions)}( + code: "new-instance-error", + message: "Error: Attempting to create a new Dart instance of ${api.name}, but the class has a nonnull callback method.", details: "")))''', + ); + } + }); }); if (unsupportedPlatforms != null) { diff --git a/packages/pigeon/pigeons/proxy_api_tests.dart b/packages/pigeon/pigeons/proxy_api_tests.dart index b9e001071bd..4d47992ed85 100644 --- a/packages/pigeon/pigeons/proxy_api_tests.dart +++ b/packages/pigeon/pigeons/proxy_api_tests.dart @@ -95,42 +95,42 @@ abstract class ProxyApiTestClass extends ProxyApiSuperClass // ========== Non-nullable argument/return type tests ========== /// Returns the passed boolean, to test serialization and deserialization. - late bool Function(bool aBool)? flutterEchoBool; + late bool Function(bool aBool) flutterEchoBool; /// Returns the passed int, to test serialization and deserialization. - late int Function(int anInt)? flutterEchoInt; + late int Function(int anInt) flutterEchoInt; /// Returns the passed double, to test serialization and deserialization. - late double Function(double aDouble)? flutterEchoDouble; + late double Function(double aDouble) flutterEchoDouble; /// Returns the passed string, to test serialization and deserialization. - late String Function(String aString)? flutterEchoString; + late String Function(String aString) flutterEchoString; /// Returns the passed byte list, to test serialization and deserialization. - late Uint8List Function(Uint8List aList)? flutterEchoUint8List; + late Uint8List Function(Uint8List aList) flutterEchoUint8List; /// Returns the passed list, to test serialization and deserialization. - late List Function(List aList)? flutterEchoList; + late List Function(List aList) flutterEchoList; /// Returns the passed list with ProxyApis, to test serialization and /// deserialization. - late List Function(List aList)? + late List Function(List aList) flutterEchoProxyApiList; /// Returns the passed map, to test serialization and deserialization. - late Map Function(Map aMap)? + late Map Function(Map aMap) flutterEchoMap; /// Returns the passed map with ProxyApis, to test serialization and /// deserialization. late Map Function( - Map aMap)? flutterEchoProxyApiMap; + Map aMap) flutterEchoProxyApiMap; /// Returns the passed enum to test serialization and deserialization. - late ProxyApiTestEnum Function(ProxyApiTestEnum anEnum)? flutterEchoEnum; + late ProxyApiTestEnum Function(ProxyApiTestEnum anEnum) flutterEchoEnum; /// Returns the passed ProxyApi to test serialization and deserialization. - late ProxyApiSuperClass Function(ProxyApiSuperClass aProxyApi)? + late ProxyApiSuperClass Function(ProxyApiSuperClass aProxyApi) flutterEchoProxyApi; // ========== Nullable argument/return type tests ========== @@ -177,7 +177,7 @@ abstract class ProxyApiTestClass extends ProxyApiSuperClass /// Returns the passed in generic Object asynchronously. @async - late String Function(String aString)? flutterEchoAsyncString; + late String Function(String aString) flutterEchoAsyncString; // ========== Synchronous host method tests ========== 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 bf3b05f4052..8b5da977702 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 @@ -2183,6 +2183,18 @@ void runPigeonIntegrationTests(TargetGenerator targetGenerator) { aMap: const {}, anEnum: ProxyApiTestEnum.one, aProxyApi: ProxyApiSuperClass(), + flutterEchoBool: (ProxyApiTestClass instance, bool aBool) => true, + flutterEchoInt: (_, __) => 3, + flutterEchoDouble: (_, __) => 1.0, + flutterEchoString: (_, __) => '', + flutterEchoUint8List: (_, __) => Uint8List(0), + flutterEchoList: (_, __) => [], + flutterEchoProxyApiList: (_, __) => [], + flutterEchoMap: (_, __) => {}, + flutterEchoEnum: (_, __) => ProxyApiTestEnum.one, + flutterEchoProxyApi: (_, __) => ProxyApiSuperClass(), + flutterEchoAsyncString: (_, __) async => '', + flutterEchoProxyApiMap: (_, __) => {}, ); // Ensure no error calling method on instance. await instance.noop(); @@ -3283,17 +3295,18 @@ ProxyApiTestClass _createGenericProxyApiTestClass({ flutterNoop: flutterNoop, flutterThrowError: flutterThrowError, flutterThrowErrorFromVoid: flutterThrowErrorFromVoid, - flutterEchoBool: flutterEchoBool, - flutterEchoInt: flutterEchoInt, - flutterEchoDouble: flutterEchoDouble, - flutterEchoString: flutterEchoString, - flutterEchoUint8List: flutterEchoUint8List, - flutterEchoList: flutterEchoList, - flutterEchoProxyApiList: flutterEchoProxyApiList, - flutterEchoMap: flutterEchoMap, - flutterEchoProxyApiMap: flutterEchoProxyApiMap, - flutterEchoEnum: flutterEchoEnum, - flutterEchoProxyApi: flutterEchoProxyApi, + flutterEchoBool: + flutterEchoBool ?? (ProxyApiTestClass instance, bool aBool) => true, + flutterEchoInt: flutterEchoInt ?? (_, __) => 3, + flutterEchoDouble: flutterEchoDouble ?? (_, __) => 1.0, + flutterEchoString: flutterEchoString ?? (_, __) => '', + flutterEchoUint8List: flutterEchoUint8List ?? (_, __) => Uint8List(0), + flutterEchoList: flutterEchoList ?? (_, __) => [], + flutterEchoProxyApiList: + flutterEchoProxyApiList ?? (_, __) => [], + flutterEchoMap: flutterEchoMap ?? (_, __) => {}, + flutterEchoEnum: flutterEchoEnum ?? (_, __) => ProxyApiTestEnum.one, + flutterEchoProxyApi: flutterEchoProxyApi ?? (_, __) => ProxyApiSuperClass(), flutterEchoNullableBool: flutterEchoNullableBool, flutterEchoNullableInt: flutterEchoNullableInt, flutterEchoNullableDouble: flutterEchoNullableDouble, @@ -3304,6 +3317,8 @@ ProxyApiTestClass _createGenericProxyApiTestClass({ flutterEchoNullableEnum: flutterEchoNullableEnum, flutterEchoNullableProxyApi: flutterEchoNullableProxyApi, flutterNoopAsync: flutterNoopAsync, - flutterEchoAsyncString: flutterEchoAsyncString, + flutterEchoAsyncString: flutterEchoAsyncString ?? (_, __) async => '', + flutterEchoProxyApiMap: + flutterEchoProxyApiMap ?? (_, __) => {}, ); } diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/proxy_api_tests.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/proxy_api_tests.gen.dart index a371c333349..8ee17ba3bd1 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/proxy_api_tests.gen.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/proxy_api_tests.gen.dart @@ -469,17 +469,17 @@ class ProxyApiTestClass extends ProxyApiSuperClass this.flutterNoop, this.flutterThrowError, this.flutterThrowErrorFromVoid, - this.flutterEchoBool, - this.flutterEchoInt, - this.flutterEchoDouble, - this.flutterEchoString, - this.flutterEchoUint8List, - this.flutterEchoList, - this.flutterEchoProxyApiList, - this.flutterEchoMap, - this.flutterEchoProxyApiMap, - this.flutterEchoEnum, - this.flutterEchoProxyApi, + required this.flutterEchoBool, + required this.flutterEchoInt, + required this.flutterEchoDouble, + required this.flutterEchoString, + required this.flutterEchoUint8List, + required this.flutterEchoList, + required this.flutterEchoProxyApiList, + required this.flutterEchoMap, + required this.flutterEchoProxyApiMap, + required this.flutterEchoEnum, + required this.flutterEchoProxyApi, this.flutterEchoNullableBool, this.flutterEchoNullableInt, this.flutterEchoNullableDouble, @@ -490,7 +490,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass this.flutterEchoNullableEnum, this.flutterEchoNullableProxyApi, this.flutterNoopAsync, - this.flutterEchoAsyncString, + required this.flutterEchoAsyncString, required bool boolParam, required int intParam, required double doubleParam, @@ -603,17 +603,17 @@ class ProxyApiTestClass extends ProxyApiSuperClass this.flutterNoop, this.flutterThrowError, this.flutterThrowErrorFromVoid, - this.flutterEchoBool, - this.flutterEchoInt, - this.flutterEchoDouble, - this.flutterEchoString, - this.flutterEchoUint8List, - this.flutterEchoList, - this.flutterEchoProxyApiList, - this.flutterEchoMap, - this.flutterEchoProxyApiMap, - this.flutterEchoEnum, - this.flutterEchoProxyApi, + required this.flutterEchoBool, + required this.flutterEchoInt, + required this.flutterEchoDouble, + required this.flutterEchoString, + required this.flutterEchoUint8List, + required this.flutterEchoList, + required this.flutterEchoProxyApiList, + required this.flutterEchoMap, + required this.flutterEchoProxyApiMap, + required this.flutterEchoEnum, + required this.flutterEchoProxyApi, this.flutterEchoNullableBool, this.flutterEchoNullableInt, this.flutterEchoNullableDouble, @@ -624,7 +624,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass this.flutterEchoNullableEnum, this.flutterEchoNullableProxyApi, this.flutterNoopAsync, - this.flutterEchoAsyncString, + required this.flutterEchoAsyncString, }) : super.pigeon_detached() { final int pigeonVar_instanceIdentifier = pigeon_instanceManager.addDartCreatedInstance(this); @@ -706,17 +706,17 @@ class ProxyApiTestClass extends ProxyApiSuperClass this.flutterNoop, this.flutterThrowError, this.flutterThrowErrorFromVoid, - this.flutterEchoBool, - this.flutterEchoInt, - this.flutterEchoDouble, - this.flutterEchoString, - this.flutterEchoUint8List, - this.flutterEchoList, - this.flutterEchoProxyApiList, - this.flutterEchoMap, - this.flutterEchoProxyApiMap, - this.flutterEchoEnum, - this.flutterEchoProxyApi, + required this.flutterEchoBool, + required this.flutterEchoInt, + required this.flutterEchoDouble, + required this.flutterEchoString, + required this.flutterEchoUint8List, + required this.flutterEchoList, + required this.flutterEchoProxyApiList, + required this.flutterEchoMap, + required this.flutterEchoProxyApiMap, + required this.flutterEchoEnum, + required this.flutterEchoProxyApi, this.flutterEchoNullableBool, this.flutterEchoNullableInt, this.flutterEchoNullableDouble, @@ -727,7 +727,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass this.flutterEchoNullableEnum, this.flutterEchoNullableProxyApi, this.flutterNoopAsync, - this.flutterEchoAsyncString, + required this.flutterEchoAsyncString, }) : super.pigeon_detached(); late final _PigeonInternalProxyApiBaseCodec @@ -857,7 +857,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass final bool Function( ProxyApiTestClass pigeon_instance, bool aBool, - )? flutterEchoBool; + ) flutterEchoBool; /// Returns the passed int, to test serialization and deserialization. /// @@ -881,7 +881,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass final int Function( ProxyApiTestClass pigeon_instance, int anInt, - )? flutterEchoInt; + ) flutterEchoInt; /// Returns the passed double, to test serialization and deserialization. /// @@ -905,7 +905,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass final double Function( ProxyApiTestClass pigeon_instance, double aDouble, - )? flutterEchoDouble; + ) flutterEchoDouble; /// Returns the passed string, to test serialization and deserialization. /// @@ -929,7 +929,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass final String Function( ProxyApiTestClass pigeon_instance, String aString, - )? flutterEchoString; + ) flutterEchoString; /// Returns the passed byte list, to test serialization and deserialization. /// @@ -953,7 +953,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass final Uint8List Function( ProxyApiTestClass pigeon_instance, Uint8List aList, - )? flutterEchoUint8List; + ) flutterEchoUint8List; /// Returns the passed list, to test serialization and deserialization. /// @@ -977,7 +977,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass final List Function( ProxyApiTestClass pigeon_instance, List aList, - )? flutterEchoList; + ) flutterEchoList; /// Returns the passed list with ProxyApis, to test serialization and /// deserialization. @@ -1002,7 +1002,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass final List Function( ProxyApiTestClass pigeon_instance, List aList, - )? flutterEchoProxyApiList; + ) flutterEchoProxyApiList; /// Returns the passed map, to test serialization and deserialization. /// @@ -1026,7 +1026,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass final Map Function( ProxyApiTestClass pigeon_instance, Map aMap, - )? flutterEchoMap; + ) flutterEchoMap; /// Returns the passed map with ProxyApis, to test serialization and /// deserialization. @@ -1051,7 +1051,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass final Map Function( ProxyApiTestClass pigeon_instance, Map aMap, - )? flutterEchoProxyApiMap; + ) flutterEchoProxyApiMap; /// Returns the passed enum to test serialization and deserialization. /// @@ -1075,7 +1075,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass final ProxyApiTestEnum Function( ProxyApiTestClass pigeon_instance, ProxyApiTestEnum anEnum, - )? flutterEchoEnum; + ) flutterEchoEnum; /// Returns the passed ProxyApi to test serialization and deserialization. /// @@ -1099,7 +1099,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass final ProxyApiSuperClass Function( ProxyApiTestClass pigeon_instance, ProxyApiSuperClass aProxyApi, - )? flutterEchoProxyApi; + ) flutterEchoProxyApi; /// Returns the passed boolean, to test serialization and deserialization. /// @@ -1362,7 +1362,7 @@ class ProxyApiTestClass extends ProxyApiSuperClass final Future Function( ProxyApiTestClass pigeon_instance, String aString, - )? flutterEchoAsyncString; + ) flutterEchoAsyncString; @override final void Function(ProxyApiInterface pigeon_instance)? anInterfaceMethod; @@ -1376,26 +1376,6 @@ class ProxyApiTestClass extends ProxyApiSuperClass bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, - ProxyApiTestClass Function( - bool aBool, - int anInt, - double aDouble, - String aString, - Uint8List aUint8List, - List aList, - Map aMap, - ProxyApiTestEnum anEnum, - ProxyApiSuperClass aProxyApi, - bool? aNullableBool, - int? aNullableInt, - double? aNullableDouble, - String? aNullableString, - Uint8List? aNullableUint8List, - List? aNullableList, - Map? aNullableMap, - ProxyApiTestEnum? aNullableEnum, - ProxyApiSuperClass? aNullableProxyApi, - )? pigeon_newInstance, void Function(ProxyApiTestClass pigeon_instance)? flutterNoop, Object? Function(ProxyApiTestClass pigeon_instance)? flutterThrowError, void Function(ProxyApiTestClass pigeon_instance)? flutterThrowErrorFromVoid, @@ -1489,123 +1469,6 @@ class ProxyApiTestClass extends ProxyApiSuperClass _PigeonInternalProxyApiBaseCodec( pigeon_instanceManager ?? PigeonInstanceManager.instance); final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (pigeon_clearHandlers) { - pigeonVar_channel.setMessageHandler(null); - } else { - pigeonVar_channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance was null.'); - final List args = (message as List?)!; - final int? arg_pigeon_instanceIdentifier = (args[0] as int?); - assert(arg_pigeon_instanceIdentifier != null, - 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance was null, expected non-null int.'); - final bool? arg_aBool = (args[1] as bool?); - assert(arg_aBool != null, - 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance was null, expected non-null bool.'); - final int? arg_anInt = (args[2] as int?); - assert(arg_anInt != null, - 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance was null, expected non-null int.'); - final double? arg_aDouble = (args[3] as double?); - assert(arg_aDouble != null, - 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance was null, expected non-null double.'); - final String? arg_aString = (args[4] as String?); - assert(arg_aString != null, - 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance was null, expected non-null String.'); - final Uint8List? arg_aUint8List = (args[5] as Uint8List?); - assert(arg_aUint8List != null, - 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance was null, expected non-null Uint8List.'); - final List? arg_aList = - (args[6] as List?)?.cast(); - assert(arg_aList != null, - 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance was null, expected non-null List.'); - final Map? arg_aMap = - (args[7] as Map?)?.cast(); - assert(arg_aMap != null, - 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance was null, expected non-null Map.'); - final ProxyApiTestEnum? arg_anEnum = (args[8] as ProxyApiTestEnum?); - assert(arg_anEnum != null, - 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance was null, expected non-null ProxyApiTestEnum.'); - final ProxyApiSuperClass? arg_aProxyApi = - (args[9] as ProxyApiSuperClass?); - assert(arg_aProxyApi != null, - 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance was null, expected non-null ProxyApiSuperClass.'); - final bool? arg_aNullableBool = (args[10] as bool?); - final int? arg_aNullableInt = (args[11] as int?); - final double? arg_aNullableDouble = (args[12] as double?); - final String? arg_aNullableString = (args[13] as String?); - final Uint8List? arg_aNullableUint8List = (args[14] as Uint8List?); - final List? arg_aNullableList = - (args[15] as List?)?.cast(); - final Map? arg_aNullableMap = - (args[16] as Map?)?.cast(); - final ProxyApiTestEnum? arg_aNullableEnum = - (args[17] as ProxyApiTestEnum?); - final ProxyApiSuperClass? arg_aNullableProxyApi = - (args[18] as ProxyApiSuperClass?); - try { - (pigeon_instanceManager ?? PigeonInstanceManager.instance) - .addHostCreatedInstance( - pigeon_newInstance?.call( - arg_aBool!, - arg_anInt!, - arg_aDouble!, - arg_aString!, - arg_aUint8List!, - arg_aList!, - arg_aMap!, - arg_anEnum!, - arg_aProxyApi!, - arg_aNullableBool, - arg_aNullableInt, - arg_aNullableDouble, - arg_aNullableString, - arg_aNullableUint8List, - arg_aNullableList, - arg_aNullableMap, - arg_aNullableEnum, - arg_aNullableProxyApi) ?? - ProxyApiTestClass.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - aBool: arg_aBool!, - anInt: arg_anInt!, - aDouble: arg_aDouble!, - aString: arg_aString!, - aUint8List: arg_aUint8List!, - aList: arg_aList!, - aMap: arg_aMap!, - anEnum: arg_anEnum!, - aProxyApi: arg_aProxyApi!, - aNullableBool: arg_aNullableBool, - aNullableInt: arg_aNullableInt, - aNullableDouble: arg_aNullableDouble, - aNullableString: arg_aNullableString, - aNullableUint8List: arg_aNullableUint8List, - aNullableList: arg_aNullableList, - aNullableMap: arg_aNullableMap, - aNullableEnum: arg_aNullableEnum, - aNullableProxyApi: arg_aNullableProxyApi, - ), - arg_pigeon_instanceIdentifier!, - ); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - { final BasicMessageChannel< Object?> pigeonVar_channel = BasicMessageChannel< @@ -1726,9 +1589,9 @@ class ProxyApiTestClass extends ProxyApiSuperClass assert(arg_aBool != null, 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.flutterEchoBool was null, expected non-null bool.'); try { - final bool? output = + final bool output = (flutterEchoBool ?? arg_pigeon_instance!.flutterEchoBool) - ?.call(arg_pigeon_instance!, arg_aBool!); + .call(arg_pigeon_instance!, arg_aBool!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -1762,9 +1625,9 @@ class ProxyApiTestClass extends ProxyApiSuperClass assert(arg_anInt != null, 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.flutterEchoInt was null, expected non-null int.'); try { - final int? output = + final int output = (flutterEchoInt ?? arg_pigeon_instance!.flutterEchoInt) - ?.call(arg_pigeon_instance!, arg_anInt!); + .call(arg_pigeon_instance!, arg_anInt!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -1798,9 +1661,9 @@ class ProxyApiTestClass extends ProxyApiSuperClass assert(arg_aDouble != null, 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.flutterEchoDouble was null, expected non-null double.'); try { - final double? output = + final double output = (flutterEchoDouble ?? arg_pigeon_instance!.flutterEchoDouble) - ?.call(arg_pigeon_instance!, arg_aDouble!); + .call(arg_pigeon_instance!, arg_aDouble!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -1834,9 +1697,9 @@ class ProxyApiTestClass extends ProxyApiSuperClass assert(arg_aString != null, 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.flutterEchoString was null, expected non-null String.'); try { - final String? output = + final String output = (flutterEchoString ?? arg_pigeon_instance!.flutterEchoString) - ?.call(arg_pigeon_instance!, arg_aString!); + .call(arg_pigeon_instance!, arg_aString!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -1870,9 +1733,9 @@ class ProxyApiTestClass extends ProxyApiSuperClass assert(arg_aList != null, 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.flutterEchoUint8List was null, expected non-null Uint8List.'); try { - final Uint8List? output = (flutterEchoUint8List ?? + final Uint8List output = (flutterEchoUint8List ?? arg_pigeon_instance!.flutterEchoUint8List) - ?.call(arg_pigeon_instance!, arg_aList!); + .call(arg_pigeon_instance!, arg_aList!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -1907,9 +1770,9 @@ class ProxyApiTestClass extends ProxyApiSuperClass assert(arg_aList != null, 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.flutterEchoList was null, expected non-null List.'); try { - final List? output = + final List output = (flutterEchoList ?? arg_pigeon_instance!.flutterEchoList) - ?.call(arg_pigeon_instance!, arg_aList!); + .call(arg_pigeon_instance!, arg_aList!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -1944,9 +1807,9 @@ class ProxyApiTestClass extends ProxyApiSuperClass assert(arg_aList != null, 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.flutterEchoProxyApiList was null, expected non-null List.'); try { - final List? output = (flutterEchoProxyApiList ?? + final List output = (flutterEchoProxyApiList ?? arg_pigeon_instance!.flutterEchoProxyApiList) - ?.call(arg_pigeon_instance!, arg_aList!); + .call(arg_pigeon_instance!, arg_aList!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -1981,9 +1844,9 @@ class ProxyApiTestClass extends ProxyApiSuperClass assert(arg_aMap != null, 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.flutterEchoMap was null, expected non-null Map.'); try { - final Map? output = + final Map output = (flutterEchoMap ?? arg_pigeon_instance!.flutterEchoMap) - ?.call(arg_pigeon_instance!, arg_aMap!); + .call(arg_pigeon_instance!, arg_aMap!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -2019,10 +1882,10 @@ class ProxyApiTestClass extends ProxyApiSuperClass assert(arg_aMap != null, 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.flutterEchoProxyApiMap was null, expected non-null Map.'); try { - final Map? output = + final Map output = (flutterEchoProxyApiMap ?? arg_pigeon_instance!.flutterEchoProxyApiMap) - ?.call(arg_pigeon_instance!, arg_aMap!); + .call(arg_pigeon_instance!, arg_aMap!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -2056,9 +1919,9 @@ class ProxyApiTestClass extends ProxyApiSuperClass assert(arg_anEnum != null, 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.flutterEchoEnum was null, expected non-null ProxyApiTestEnum.'); try { - final ProxyApiTestEnum? output = + final ProxyApiTestEnum output = (flutterEchoEnum ?? arg_pigeon_instance!.flutterEchoEnum) - ?.call(arg_pigeon_instance!, arg_anEnum!); + .call(arg_pigeon_instance!, arg_anEnum!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -2093,9 +1956,9 @@ class ProxyApiTestClass extends ProxyApiSuperClass assert(arg_aProxyApi != null, 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.flutterEchoProxyApi was null, expected non-null ProxyApiSuperClass.'); try { - final ProxyApiSuperClass? output = (flutterEchoProxyApi ?? + final ProxyApiSuperClass output = (flutterEchoProxyApi ?? arg_pigeon_instance!.flutterEchoProxyApi) - ?.call(arg_pigeon_instance!, arg_aProxyApi!); + .call(arg_pigeon_instance!, arg_aProxyApi!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -2470,9 +2333,9 @@ class ProxyApiTestClass extends ProxyApiSuperClass assert(arg_aString != null, 'Argument for dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.flutterEchoAsyncString was null, expected non-null String.'); try { - final String? output = await (flutterEchoAsyncString ?? + final String output = await (flutterEchoAsyncString ?? arg_pigeon_instance!.flutterEchoAsyncString) - ?.call(arg_pigeon_instance!, arg_aString!); + .call(arg_pigeon_instance!, arg_aString!); return wrapResponse(result: output); } on PlatformException catch (e) { return wrapResponse(error: e); diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/ProxyApiTestApiImpls.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/ProxyApiTestApiImpls.kt index b9389fd10dc..21c6df0a367 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/ProxyApiTestApiImpls.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/ProxyApiTestApiImpls.kt @@ -105,78 +105,6 @@ class ProxyApiTestClassApi(override val pigeonRegistrar: ProxyApiRegistrar) : return ProxyApiSuperClass() } - override fun aBool(pigeon_instance: ProxyApiTestClass): Boolean { - return true - } - - override fun anInt(pigeon_instance: ProxyApiTestClass): Long { - return 0 - } - - override fun aDouble(pigeon_instance: ProxyApiTestClass): Double { - return 0.0 - } - - override fun aString(pigeon_instance: ProxyApiTestClass): String { - return "" - } - - override fun aUint8List(pigeon_instance: ProxyApiTestClass): ByteArray { - return byteArrayOf() - } - - override fun aList(pigeon_instance: ProxyApiTestClass): List { - return listOf() - } - - override fun aMap(pigeon_instance: ProxyApiTestClass): Map { - return mapOf() - } - - override fun anEnum(pigeon_instance: ProxyApiTestClass): ProxyApiTestEnum { - return ProxyApiTestEnum.ONE - } - - override fun aProxyApi(pigeon_instance: ProxyApiTestClass): ProxyApiSuperClass { - return ProxyApiSuperClass() - } - - override fun aNullableBool(pigeon_instance: ProxyApiTestClass): Boolean? { - return null - } - - override fun aNullableInt(pigeon_instance: ProxyApiTestClass): Long? { - return null - } - - override fun aNullableDouble(pigeon_instance: ProxyApiTestClass): Double? { - return null - } - - override fun aNullableString(pigeon_instance: ProxyApiTestClass): String? { - return null - } - - override fun aNullableUint8List(pigeon_instance: ProxyApiTestClass): ByteArray? { - return null - } - - override fun aNullableList(pigeon_instance: ProxyApiTestClass): List? { - return null - } - - override fun aNullableMap(pigeon_instance: ProxyApiTestClass): Map? { - return null - } - - override fun aNullableEnum(pigeon_instance: ProxyApiTestClass): ProxyApiTestEnum? { - return null - } - - override fun aNullableProxyApi(pigeon_instance: ProxyApiTestClass): ProxyApiSuperClass? { - return null - } - override fun noop(pigeon_instance: ProxyApiTestClass) {} override fun throwError(pigeon_instance: ProxyApiTestClass): Any? { diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/ProxyApiTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/ProxyApiTests.gen.kt index 08b6b635c27..88c43a433ea 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/ProxyApiTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/ProxyApiTests.gen.kt @@ -422,7 +422,12 @@ private class ProxyApiTestsPigeonProxyApiBaseCodec( override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? { return when (type) { 128.toByte() -> { - return registrar.instanceManager.getInstance(readValue(buffer) as Long) + val identifier: Long = readValue(buffer) as Long + val instance: Any? = registrar.instanceManager.getInstance(identifier) + if (instance == null) { + Log.e("PigeonProxyApiBaseCodec", "Failed to find instance with identifier: $identifier") + } + return instance } else -> super.readValueOfType(type, buffer) } @@ -576,46 +581,6 @@ abstract class PigeonApiProxyApiTestClass( abstract fun staticAttachedField(): com.example.test_plugin.ProxyApiSuperClass - abstract fun aBool(pigeon_instance: ProxyApiTestClass): Boolean - - abstract fun anInt(pigeon_instance: ProxyApiTestClass): Long - - abstract fun aDouble(pigeon_instance: ProxyApiTestClass): Double - - abstract fun aString(pigeon_instance: ProxyApiTestClass): String - - abstract fun aUint8List(pigeon_instance: ProxyApiTestClass): ByteArray - - abstract fun aList(pigeon_instance: ProxyApiTestClass): List - - abstract fun aMap(pigeon_instance: ProxyApiTestClass): Map - - abstract fun anEnum(pigeon_instance: ProxyApiTestClass): ProxyApiTestEnum - - abstract fun aProxyApi( - pigeon_instance: ProxyApiTestClass - ): com.example.test_plugin.ProxyApiSuperClass - - abstract fun aNullableBool(pigeon_instance: ProxyApiTestClass): Boolean? - - abstract fun aNullableInt(pigeon_instance: ProxyApiTestClass): Long? - - abstract fun aNullableDouble(pigeon_instance: ProxyApiTestClass): Double? - - abstract fun aNullableString(pigeon_instance: ProxyApiTestClass): String? - - abstract fun aNullableUint8List(pigeon_instance: ProxyApiTestClass): ByteArray? - - abstract fun aNullableList(pigeon_instance: ProxyApiTestClass): List? - - abstract fun aNullableMap(pigeon_instance: ProxyApiTestClass): Map? - - abstract fun aNullableEnum(pigeon_instance: ProxyApiTestClass): ProxyApiTestEnum? - - abstract fun aNullableProxyApi( - pigeon_instance: ProxyApiTestClass - ): com.example.test_plugin.ProxyApiSuperClass? - /** A no-op function taking no arguments and returning no value, to sanity test basic calling. */ abstract fun noop(pigeon_instance: ProxyApiTestClass) @@ -3089,70 +3054,16 @@ abstract class PigeonApiProxyApiTestClass( callback( Result.failure( ProxyApiTestsError("ignore-calls-error", "Calls to Dart are being ignored.", ""))) - return - } - if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { - Result.success(Unit) - return + } else if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + callback(Result.success(Unit)) + } else { + callback( + Result.failure( + ProxyApiTestsError( + "new-instance-error", + "Attempting to create a new Dart instance of ProxyApiTestClass, but the class has a nonnull callback method.", + ""))) } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) - val aBoolArg = aBool(pigeon_instanceArg) - val anIntArg = anInt(pigeon_instanceArg) - val aDoubleArg = aDouble(pigeon_instanceArg) - val aStringArg = aString(pigeon_instanceArg) - val aUint8ListArg = aUint8List(pigeon_instanceArg) - val aListArg = aList(pigeon_instanceArg) - val aMapArg = aMap(pigeon_instanceArg) - val anEnumArg = anEnum(pigeon_instanceArg) - val aProxyApiArg = aProxyApi(pigeon_instanceArg) - val aNullableBoolArg = aNullableBool(pigeon_instanceArg) - val aNullableIntArg = aNullableInt(pigeon_instanceArg) - val aNullableDoubleArg = aNullableDouble(pigeon_instanceArg) - val aNullableStringArg = aNullableString(pigeon_instanceArg) - val aNullableUint8ListArg = aNullableUint8List(pigeon_instanceArg) - val aNullableListArg = aNullableList(pigeon_instanceArg) - val aNullableMapArg = aNullableMap(pigeon_instanceArg) - val aNullableEnumArg = aNullableEnum(pigeon_instanceArg) - val aNullableProxyApiArg = aNullableProxyApi(pigeon_instanceArg) - val binaryMessenger = pigeonRegistrar.binaryMessenger - val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance" - val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send( - listOf( - pigeon_identifierArg, - aBoolArg, - anIntArg, - aDoubleArg, - aStringArg, - aUint8ListArg, - aListArg, - aMapArg, - anEnumArg, - aProxyApiArg, - aNullableBoolArg, - aNullableIntArg, - aNullableDoubleArg, - aNullableStringArg, - aNullableUint8ListArg, - aNullableListArg, - aNullableMapArg, - aNullableEnumArg, - aNullableProxyApiArg)) { - if (it is List<*>) { - if (it.size > 1) { - callback( - Result.failure( - ProxyApiTestsError(it[0] as String, it[1] as String, it[2] as String?))) - } else { - callback(Result.success(Unit)) - } - } else { - callback(Result.failure(createConnectionError(channelName))) - } - } } /** A no-op function taking no arguments and returning no value, to sanity test basic calling. */ @@ -4133,30 +4044,28 @@ abstract class PigeonApiProxyApiSuperClass( callback( Result.failure( ProxyApiTestsError("ignore-calls-error", "Calls to Dart are being ignored.", ""))) - return - } - if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { - Result.success(Unit) - return - } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) - val binaryMessenger = pigeonRegistrar.binaryMessenger - val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiSuperClass.pigeon_newInstance" - val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_identifierArg)) { - if (it is List<*>) { - if (it.size > 1) { - callback( - Result.failure( - ProxyApiTestsError(it[0] as String, it[1] as String, it[2] as String?))) + } else if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + callback(Result.success(Unit)) + } else { + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = + "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiSuperClass.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + if (it is List<*>) { + if (it.size > 1) { + callback( + Result.failure( + ProxyApiTestsError(it[0] as String, it[1] as String, it[2] as String?))) + } else { + callback(Result.success(Unit)) + } } else { - callback(Result.success(Unit)) + callback(Result.failure(createConnectionError(channelName))) } - } else { - callback(Result.failure(createConnectionError(channelName))) } } } @@ -4173,30 +4082,28 @@ open class PigeonApiProxyApiInterface( callback( Result.failure( ProxyApiTestsError("ignore-calls-error", "Calls to Dart are being ignored.", ""))) - return - } - if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { - Result.success(Unit) - return - } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) - val binaryMessenger = pigeonRegistrar.binaryMessenger - val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiInterface.pigeon_newInstance" - val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_identifierArg)) { - if (it is List<*>) { - if (it.size > 1) { - callback( - Result.failure( - ProxyApiTestsError(it[0] as String, it[1] as String, it[2] as String?))) + } else if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + callback(Result.success(Unit)) + } else { + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = + "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiInterface.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + if (it is List<*>) { + if (it.size > 1) { + callback( + Result.failure( + ProxyApiTestsError(it[0] as String, it[1] as String, it[2] as String?))) + } else { + callback(Result.success(Unit)) + } } else { - callback(Result.success(Unit)) + callback(Result.failure(createConnectionError(channelName))) } - } else { - callback(Result.failure(createConnectionError(channelName))) } } } @@ -4343,30 +4250,28 @@ abstract class PigeonApiClassWithApiRequirement( callback( Result.failure( ProxyApiTestsError("ignore-calls-error", "Calls to Dart are being ignored.", ""))) - return - } - if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { - Result.success(Unit) - return - } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) - val binaryMessenger = pigeonRegistrar.binaryMessenger - val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.pigeon_integration_tests.ClassWithApiRequirement.pigeon_newInstance" - val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_identifierArg)) { - if (it is List<*>) { - if (it.size > 1) { - callback( - Result.failure( - ProxyApiTestsError(it[0] as String, it[1] as String, it[2] as String?))) + } else if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + callback(Result.success(Unit)) + } else { + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = + "dev.flutter.pigeon.pigeon_integration_tests.ClassWithApiRequirement.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + if (it is List<*>) { + if (it.size > 1) { + callback( + Result.failure( + ProxyApiTestsError(it[0] as String, it[1] as String, it[2] as String?))) + } else { + callback(Result.success(Unit)) + } } else { - callback(Result.success(Unit)) + callback(Result.failure(createConnectionError(channelName))) } - } else { - callback(Result.failure(createConnectionError(channelName))) } } } 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 4afb07b5dcd..4647a66d1aa 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 @@ -4299,7 +4299,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -4342,7 +4342,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -5659,7 +5659,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } diff --git a/packages/pigeon/platform_tests/test_plugin/ios/Classes/ProxyApiTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/ios/Classes/ProxyApiTests.gen.swift index c0a6cd23135..90b721d4fe4 100644 --- a/packages/pigeon/platform_tests/test_plugin/ios/Classes/ProxyApiTests.gen.swift +++ b/packages/pigeon/platform_tests/test_plugin/ios/Classes/ProxyApiTests.gen.swift @@ -362,7 +362,7 @@ private class ProxyApiTestsPigeonInstanceManagerApi { let details: String? = nilOrValue(listResponse[2]) completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -468,6 +468,9 @@ private class ProxyApiTestsPigeonInternalProxyApiCodecReaderWriter: FlutterStand let identifier = self.readValue() let instance: AnyObject? = pigeonRegistrar.instanceManager.instance( forIdentifier: identifier is Int64 ? identifier as! Int64 : Int64(identifier as! Int32)) + if instance == nil { + print("Failed to find instance with identifier: \(identifier!)") + } return instance default: return super.readValue(ofType: type) @@ -640,42 +643,6 @@ protocol PigeonApiDelegateProxyApiTestClass { func attachedField(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws -> ProxyApiSuperClass func staticAttachedField(pigeonApi: PigeonApiProxyApiTestClass) throws -> ProxyApiSuperClass - func aBool(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> Bool - func anInt(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> Int64 - func aDouble(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> Double - func aString(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> String - func aUint8List(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> FlutterStandardTypedData - func aList(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> [Any?] - func aMap(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> [String?: Any?] - func anEnum(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> ProxyApiTestEnum - func aProxyApi(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> ProxyApiSuperClass - func aNullableBool(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> Bool? - func aNullableInt(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> Int64? - func aNullableDouble(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> Double? - func aNullableString(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> String? - func aNullableUint8List(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> FlutterStandardTypedData? - func aNullableList(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> [Any?]? - func aNullableMap(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> [String?: Any?]? - func aNullableEnum(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> ProxyApiTestEnum? - func aNullableProxyApi(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> ProxyApiSuperClass? /// A no-op function taking no arguments and returning no value, to sanity /// test basic calling. func noop(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws @@ -2847,69 +2814,16 @@ final class PigeonApiProxyApiTestClass: PigeonApiProtocolProxyApiTestClass { ProxyApiTestsError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - return - } - if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(Void())) - return - } - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let aBoolArg = try! pigeonDelegate.aBool(pigeonApi: self, pigeonInstance: pigeonInstance) - let anIntArg = try! pigeonDelegate.anInt(pigeonApi: self, pigeonInstance: pigeonInstance) - let aDoubleArg = try! pigeonDelegate.aDouble(pigeonApi: self, pigeonInstance: pigeonInstance) - let aStringArg = try! pigeonDelegate.aString(pigeonApi: self, pigeonInstance: pigeonInstance) - let aUint8ListArg = try! pigeonDelegate.aUint8List( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aListArg = try! pigeonDelegate.aList(pigeonApi: self, pigeonInstance: pigeonInstance) - let aMapArg = try! pigeonDelegate.aMap(pigeonApi: self, pigeonInstance: pigeonInstance) - let anEnumArg = try! pigeonDelegate.anEnum(pigeonApi: self, pigeonInstance: pigeonInstance) - let aProxyApiArg = try! pigeonDelegate.aProxyApi( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableBoolArg = try! pigeonDelegate.aNullableBool( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableIntArg = try! pigeonDelegate.aNullableInt( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableDoubleArg = try! pigeonDelegate.aNullableDouble( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableStringArg = try! pigeonDelegate.aNullableString( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableUint8ListArg = try! pigeonDelegate.aNullableUint8List( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableListArg = try! pigeonDelegate.aNullableList( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableMapArg = try! pigeonDelegate.aNullableMap( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableEnumArg = try! pigeonDelegate.aNullableEnum( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableProxyApiArg = try! pigeonDelegate.aNullableProxyApi( - pigeonApi: self, pigeonInstance: pigeonInstance) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage( - [ - pigeonIdentifierArg, aBoolArg, anIntArg, aDoubleArg, aStringArg, aUint8ListArg, aListArg, - aMapArg, anEnumArg, aProxyApiArg, aNullableBoolArg, aNullableIntArg, aNullableDoubleArg, - aNullableStringArg, aNullableUint8ListArg, aNullableListArg, aNullableMapArg, - aNullableEnumArg, aNullableProxyApiArg, - ] as [Any?] - ) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) - } else { - completion(.success(Void())) - } + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + completion( + .failure( + ProxyApiTestsError( + code: "new-instance-error", + message: + "Error: Attempting to create a new Dart instance of ProxyApiTestClass, but the class has a nonnull callback method.", + details: ""))) } } /// A no-op function taking no arguments and returning no value, to sanity @@ -2943,7 +2857,7 @@ final class PigeonApiProxyApiTestClass: PigeonApiProtocolProxyApiTestClass { let details: String? = nilOrValue(listResponse[2]) completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -3014,7 +2928,7 @@ final class PigeonApiProxyApiTestClass: PigeonApiProtocolProxyApiTestClass { let details: String? = nilOrValue(listResponse[2]) completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -3840,7 +3754,7 @@ final class PigeonApiProxyApiTestClass: PigeonApiProtocolProxyApiTestClass { let details: String? = nilOrValue(listResponse[2]) completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -3966,32 +3880,30 @@ final class PigeonApiProxyApiSuperClass: PigeonApiProtocolProxyApiSuperClass { ProxyApiTestsError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - return - } - if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(Void())) - return - } - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiSuperClass.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) - } else { - completion(.success(Void())) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = + "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiSuperClass.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } } } } @@ -4026,32 +3938,30 @@ final class PigeonApiProxyApiInterface: PigeonApiProtocolProxyApiInterface { ProxyApiTestsError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - return - } - if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(Void())) - return - } - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiInterface.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) - } else { - completion(.success(Void())) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = + "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiInterface.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } } } } @@ -4084,7 +3994,7 @@ final class PigeonApiProxyApiInterface: PigeonApiProtocolProxyApiInterface { let details: String? = nilOrValue(listResponse[2]) completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -4212,32 +4122,30 @@ final class PigeonApiClassWithApiRequirement: PigeonApiProtocolClassWithApiRequi ProxyApiTestsError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - return - } - if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(Void())) - return - } - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.pigeon_integration_tests.ClassWithApiRequirement.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) - } else { - completion(.success(Void())) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = + "dev.flutter.pigeon.pigeon_integration_tests.ClassWithApiRequirement.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } } } } 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 1ecd036cd1e..ddfba5c6d1e 100644 --- a/packages/pigeon/platform_tests/test_plugin/ios/Classes/TestPlugin.swift +++ b/packages/pigeon/platform_tests/test_plugin/ios/Classes/TestPlugin.swift @@ -1354,134 +1354,6 @@ class ProxyApiDelegate: ProxyApiTestsPigeonProxyApiDelegate { return ProxyApiSuperClass() } - func aBool(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws - -> Bool - { - return true - } - - func anInt(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws - -> Int64 - { - return 0 - } - - func aDouble(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws - -> Double - { - return 0.0 - } - - func aString(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws - -> String - { - return "" - } - - func aUint8List(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> FlutterStandardTypedData - { - return FlutterStandardTypedData(bytes: Data()) - } - - func aList(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws - -> [Any?] - { - return [] - } - - func aMap(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> [String?: Any?] - { - return [:] - } - - func anEnum(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws - -> ProxyApiTestEnum - { - return ProxyApiTestEnum.one - } - - func aProxyApi(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> ProxyApiSuperClass - { - return ProxyApiSuperClass() - } - - func aNullableBool( - pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass - ) - throws -> Bool? - { - return nil - } - - func aNullableInt( - pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass - ) - throws -> Int64? - { - return nil - } - - func aNullableDouble( - pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass - ) - throws -> Double? - { - return nil - } - - func aNullableString( - pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass - ) - throws -> String? - { - return nil - } - - func aNullableUint8List( - pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass - ) throws -> FlutterStandardTypedData? { - return nil - } - - func aNullableList( - pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass - ) - throws -> [Any?]? - { - return nil - } - - func aNullableMap( - pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass - ) - throws -> [String?: Any?]? - { - return nil - } - - func aNullableEnum( - pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass - ) - throws -> ProxyApiTestEnum? - { - return nil - } - - func aNullableProxyApi( - pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass - ) throws -> ProxyApiSuperClass? { - return nil - } - func noop(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws { } 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 4afb07b5dcd..4647a66d1aa 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 @@ -4299,7 +4299,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -4342,7 +4342,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -5659,7 +5659,7 @@ class FlutterIntegrationCoreApi: FlutterIntegrationCoreApiProtocol { let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } diff --git a/packages/pigeon/platform_tests/test_plugin/macos/Classes/ProxyApiTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/macos/Classes/ProxyApiTests.gen.swift index c0a6cd23135..90b721d4fe4 100644 --- a/packages/pigeon/platform_tests/test_plugin/macos/Classes/ProxyApiTests.gen.swift +++ b/packages/pigeon/platform_tests/test_plugin/macos/Classes/ProxyApiTests.gen.swift @@ -362,7 +362,7 @@ private class ProxyApiTestsPigeonInstanceManagerApi { let details: String? = nilOrValue(listResponse[2]) completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -468,6 +468,9 @@ private class ProxyApiTestsPigeonInternalProxyApiCodecReaderWriter: FlutterStand let identifier = self.readValue() let instance: AnyObject? = pigeonRegistrar.instanceManager.instance( forIdentifier: identifier is Int64 ? identifier as! Int64 : Int64(identifier as! Int32)) + if instance == nil { + print("Failed to find instance with identifier: \(identifier!)") + } return instance default: return super.readValue(ofType: type) @@ -640,42 +643,6 @@ protocol PigeonApiDelegateProxyApiTestClass { func attachedField(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws -> ProxyApiSuperClass func staticAttachedField(pigeonApi: PigeonApiProxyApiTestClass) throws -> ProxyApiSuperClass - func aBool(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> Bool - func anInt(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> Int64 - func aDouble(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> Double - func aString(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> String - func aUint8List(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> FlutterStandardTypedData - func aList(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> [Any?] - func aMap(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> [String?: Any?] - func anEnum(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> ProxyApiTestEnum - func aProxyApi(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> ProxyApiSuperClass - func aNullableBool(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> Bool? - func aNullableInt(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> Int64? - func aNullableDouble(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> Double? - func aNullableString(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> String? - func aNullableUint8List(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> FlutterStandardTypedData? - func aNullableList(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> [Any?]? - func aNullableMap(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws - -> [String?: Any?]? - func aNullableEnum(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> ProxyApiTestEnum? - func aNullableProxyApi(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) - throws -> ProxyApiSuperClass? /// A no-op function taking no arguments and returning no value, to sanity /// test basic calling. func noop(pigeonApi: PigeonApiProxyApiTestClass, pigeonInstance: ProxyApiTestClass) throws @@ -2847,69 +2814,16 @@ final class PigeonApiProxyApiTestClass: PigeonApiProtocolProxyApiTestClass { ProxyApiTestsError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - return - } - if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(Void())) - return - } - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let aBoolArg = try! pigeonDelegate.aBool(pigeonApi: self, pigeonInstance: pigeonInstance) - let anIntArg = try! pigeonDelegate.anInt(pigeonApi: self, pigeonInstance: pigeonInstance) - let aDoubleArg = try! pigeonDelegate.aDouble(pigeonApi: self, pigeonInstance: pigeonInstance) - let aStringArg = try! pigeonDelegate.aString(pigeonApi: self, pigeonInstance: pigeonInstance) - let aUint8ListArg = try! pigeonDelegate.aUint8List( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aListArg = try! pigeonDelegate.aList(pigeonApi: self, pigeonInstance: pigeonInstance) - let aMapArg = try! pigeonDelegate.aMap(pigeonApi: self, pigeonInstance: pigeonInstance) - let anEnumArg = try! pigeonDelegate.anEnum(pigeonApi: self, pigeonInstance: pigeonInstance) - let aProxyApiArg = try! pigeonDelegate.aProxyApi( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableBoolArg = try! pigeonDelegate.aNullableBool( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableIntArg = try! pigeonDelegate.aNullableInt( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableDoubleArg = try! pigeonDelegate.aNullableDouble( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableStringArg = try! pigeonDelegate.aNullableString( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableUint8ListArg = try! pigeonDelegate.aNullableUint8List( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableListArg = try! pigeonDelegate.aNullableList( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableMapArg = try! pigeonDelegate.aNullableMap( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableEnumArg = try! pigeonDelegate.aNullableEnum( - pigeonApi: self, pigeonInstance: pigeonInstance) - let aNullableProxyApiArg = try! pigeonDelegate.aNullableProxyApi( - pigeonApi: self, pigeonInstance: pigeonInstance) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiTestClass.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage( - [ - pigeonIdentifierArg, aBoolArg, anIntArg, aDoubleArg, aStringArg, aUint8ListArg, aListArg, - aMapArg, anEnumArg, aProxyApiArg, aNullableBoolArg, aNullableIntArg, aNullableDoubleArg, - aNullableStringArg, aNullableUint8ListArg, aNullableListArg, aNullableMapArg, - aNullableEnumArg, aNullableProxyApiArg, - ] as [Any?] - ) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) - } else { - completion(.success(Void())) - } + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + completion( + .failure( + ProxyApiTestsError( + code: "new-instance-error", + message: + "Error: Attempting to create a new Dart instance of ProxyApiTestClass, but the class has a nonnull callback method.", + details: ""))) } } /// A no-op function taking no arguments and returning no value, to sanity @@ -2943,7 +2857,7 @@ final class PigeonApiProxyApiTestClass: PigeonApiProtocolProxyApiTestClass { let details: String? = nilOrValue(listResponse[2]) completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -3014,7 +2928,7 @@ final class PigeonApiProxyApiTestClass: PigeonApiProtocolProxyApiTestClass { let details: String? = nilOrValue(listResponse[2]) completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -3840,7 +3754,7 @@ final class PigeonApiProxyApiTestClass: PigeonApiProtocolProxyApiTestClass { let details: String? = nilOrValue(listResponse[2]) completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -3966,32 +3880,30 @@ final class PigeonApiProxyApiSuperClass: PigeonApiProtocolProxyApiSuperClass { ProxyApiTestsError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - return - } - if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(Void())) - return - } - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiSuperClass.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) - } else { - completion(.success(Void())) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = + "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiSuperClass.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } } } } @@ -4026,32 +3938,30 @@ final class PigeonApiProxyApiInterface: PigeonApiProtocolProxyApiInterface { ProxyApiTestsError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - return - } - if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(Void())) - return - } - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiInterface.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) - } else { - completion(.success(Void())) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = + "dev.flutter.pigeon.pigeon_integration_tests.ProxyApiInterface.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } } } } @@ -4084,7 +3994,7 @@ final class PigeonApiProxyApiInterface: PigeonApiProtocolProxyApiInterface { let details: String? = nilOrValue(listResponse[2]) completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } @@ -4212,32 +4122,30 @@ final class PigeonApiClassWithApiRequirement: PigeonApiProtocolClassWithApiRequi ProxyApiTestsError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - return - } - if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(Void())) - return - } - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.pigeon_integration_tests.ClassWithApiRequirement.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) - } else { - completion(.success(Void())) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = + "dev.flutter.pigeon.pigeon_integration_tests.ClassWithApiRequirement.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(ProxyApiTestsError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } } } } diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index ee82d5219c8..3fb7a94a35e 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: 24.1.0 # This must match the version in lib/src/generator_tools.dart +version: 24.1.1 # This must match the version in lib/src/generator_tools.dart environment: sdk: ^3.4.0 diff --git a/packages/pigeon/test/kotlin/proxy_api_test.dart b/packages/pigeon/test/kotlin/proxy_api_test.dart index b14f6d25746..ad0a78f81f4 100644 --- a/packages/pigeon/test/kotlin/proxy_api_test.dart +++ b/packages/pigeon/test/kotlin/proxy_api_test.dart @@ -434,6 +434,86 @@ void main() { ), ); }); + + test('host platform constructor callback method', () { + final Root root = Root( + apis: [ + AstProxyApi( + name: 'Api', + constructors: [], + fields: [], + methods: [ + Method( + name: 'aCallbackMethod', + returnType: const TypeDeclaration.voidDeclaration(), + parameters: [], + location: ApiLocation.flutter, + ), + ], + ), + ], + classes: [], + enums: [], + ); + final StringBuffer sink = StringBuffer(); + const KotlinGenerator generator = KotlinGenerator(); + generator.generate( + const KotlinOptions(errorClassName: 'TestError'), + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final String code = sink.toString(); + final String collapsedCode = _collapseNewlineAndIndentation(code); + + expect( + collapsedCode, + contains( + 'if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { callback(Result.success(Unit))', + ), + ); + }); + + test( + 'host platform constructor calls new instance error for required callbacks', + () { + final Root root = Root( + apis: [ + AstProxyApi( + name: 'Api', + constructors: [], + fields: [], + methods: [ + Method( + name: 'aCallbackMethod', + returnType: const TypeDeclaration.voidDeclaration(), + parameters: [], + location: ApiLocation.flutter, + ), + ], + ), + ], + classes: [], + enums: [], + ); + final StringBuffer sink = StringBuffer(); + const KotlinGenerator generator = KotlinGenerator(); + generator.generate( + const KotlinOptions(errorClassName: 'TestError'), + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final String code = sink.toString(); + final String collapsedCode = _collapseNewlineAndIndentation(code); + + expect( + collapsedCode, + contains( + r'Result.failure( TestError("new-instance-error"', + ), + ); + }); }); group('Fields', () { diff --git a/packages/pigeon/test/pigeon_lib_test.dart b/packages/pigeon/test/pigeon_lib_test.dart index ab8dda4b324..a8ef65e766d 100644 --- a/packages/pigeon/test/pigeon_lib_test.dart +++ b/packages/pigeon/test/pigeon_lib_test.dart @@ -1599,6 +1599,23 @@ abstract class MyClass { contains('Attached fields must not be nullable: MyClass?'), ); }); + + test('callback methods with non-null return types must be non-null', () { + const String code = ''' +@ProxyApi() +abstract class MyClass { + late String Function()? aCallbackMethod; +} +'''; + final ParseResults parseResult = parseSource(code); + expect(parseResult.errors, isNotEmpty); + expect( + parseResult.errors[0].message, + contains( + 'Callback methods that return a non-null value must be non-null: aCallbackMethod.', + ), + ); + }); }); group('event channel validation', () { diff --git a/packages/pigeon/test/swift/proxy_api_test.dart b/packages/pigeon/test/swift/proxy_api_test.dart index 26c679ba303..bd29ec250d5 100644 --- a/packages/pigeon/test/swift/proxy_api_test.dart +++ b/packages/pigeon/test/swift/proxy_api_test.dart @@ -627,6 +627,47 @@ void main() { ), ); }); + + test( + 'host platform constructor calls new instance error for required callbacks', + () { + final Root root = Root( + apis: [ + AstProxyApi( + name: 'Api', + constructors: [], + fields: [], + methods: [ + Method( + name: 'aCallbackMethod', + returnType: const TypeDeclaration.voidDeclaration(), + parameters: [], + location: ApiLocation.flutter, + ), + ], + ), + ], + classes: [], + enums: [], + ); + final StringBuffer sink = StringBuffer(); + const SwiftGenerator generator = SwiftGenerator(); + generator.generate( + const SwiftOptions(errorClassName: 'TestError'), + root, + sink, + dartPackageName: DEFAULT_PACKAGE_NAME, + ); + final String code = sink.toString(); + final String collapsedCode = _collapseNewlineAndIndentation(code); + + expect( + collapsedCode, + contains( + r'completion( .failure( TestError( code: "new-instance-error"', + ), + ); + }); }); group('Fields', () { diff --git a/packages/pigeon/test/swift_generator_test.dart b/packages/pigeon/test/swift_generator_test.dart index 1b2b21615cb..806793b0ec4 100644 --- a/packages/pigeon/test/swift_generator_test.dart +++ b/packages/pigeon/test/swift_generator_test.dart @@ -422,7 +422,7 @@ void main() { final String code = sink.toString(); expect(code, contains('completion: @escaping (Result) -> Void')); - expect(code, contains('completion(.success(Void()))')); + expect(code, contains('completion(.success(()))')); expect(code, isNot(contains('if ('))); });