diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 4e941c00aad..66e6abe0f99 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 10.1.3 + +* Adds generic `Object` field support to data classes. + ## 10.1.2 * [swift] Fixes a crash when passing `null` for nested nullable classes. diff --git a/packages/pigeon/lib/cpp_generator.dart b/packages/pigeon/lib/cpp_generator.dart index 417985a2a2b..c5ec10196f1 100644 --- a/packages/pigeon/lib/cpp_generator.dart +++ b/packages/pigeon/lib/cpp_generator.dart @@ -661,6 +661,8 @@ class CppSourceGenerator extends StructuredGenerator { return '(${field.type.baseName})(std::get($encodable))'; } else if (field.type.baseName == 'int') { return '$encodable.LongValue()'; + } else if (field.type.baseName == 'Object') { + return encodable; } else { final HostDatatype hostDatatype = getFieldHostDatatype(field, root.classes, root.enums, _shortBaseCppTypeForBuiltinDartType); @@ -1186,6 +1188,9 @@ ${prefix}reply(EncodableValue(std::move(wrapped)));'''; final String nonNullValue = hostType.isNullable ? '(*$variableName)' : variableName; encodableValue = 'EncodableValue((int)$nonNullValue)'; + } else if (dartType.baseName == 'Object') { + final String operator = hostType.isNullable ? '*' : ''; + encodableValue = '$operator$variableName'; } else { final String operator = hostType.isNullable ? '*' : ''; encodableValue = 'EncodableValue($operator$variableName)'; diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 7146c0aec5a..320e295caf1 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -204,6 +204,10 @@ class DartGenerator extends StructuredGenerator { ) { void writeValueDecode(NamedType field, int index) { final String resultAt = 'result[$index]'; + final String castCallPrefix = field.type.isNullable ? '?' : '!'; + final String genericType = _makeGenericTypeArguments(field.type); + final String castCall = _makeGenericCastCall(field.type); + final String nullableTag = field.type.isNullable ? '?' : ''; if (customClassNames.contains(field.type.baseName)) { final String nonNullValue = '${field.type.baseName}.decode($resultAt! as List)'; @@ -227,23 +231,18 @@ $resultAt != null indent.add(nonNullValue); } } else if (field.type.typeArguments.isNotEmpty) { - final String genericType = _makeGenericTypeArguments(field.type); - final String castCall = _makeGenericCastCall(field.type); - final String castCallPrefix = field.type.isNullable ? '?' : '!'; indent.add( '($resultAt as $genericType?)$castCallPrefix$castCall', ); } else { - final String genericdType = _addGenericTypesNullable(field.type); - if (field.type.isNullable) { - indent.add( - '$resultAt as $genericdType', - ); - } else { - indent.add( - '$resultAt! as $genericdType', - ); - } + final String castCallForcePrefix = field.type.isNullable ? '' : '!'; + final String castString = field.type.baseName == 'Object' + ? '' + : ' as $genericType$nullableTag'; + + indent.add( + '$resultAt$castCallForcePrefix$castString', + ); } } @@ -757,8 +756,8 @@ String _addGenericTypes(TypeDeclaration type) { } String _addGenericTypesNullable(TypeDeclaration type) { - final String genericdType = _addGenericTypes(type); - return type.isNullable ? '$genericdType?' : genericdType; + final String genericType = _addGenericTypes(type); + return type.isNullable ? '$genericType?' : genericType; } /// Crawls up the path of [dartFilePath] until it finds a pubspec.yaml in a diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index f697cb41f22..3927bb74641 100644 --- a/packages/pigeon/lib/generator_tools.dart +++ b/packages/pigeon/lib/generator_tools.dart @@ -11,7 +11,7 @@ import 'ast.dart'; /// The current version of pigeon. /// /// This must match the version in pubspec.yaml. -const String pigeonVersion = '10.1.2'; +const String pigeonVersion = '10.1.3'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index fbfeba6c9b6..0a39c1377de 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -884,6 +884,7 @@ String? _javaTypeForBuiltinDartType(TypeDeclaration type) { 'Int32List': 'int[]', 'Int64List': 'long[]', 'Float64List': 'double[]', + 'Object': 'Object', }; if (javaTypeForDartTypeMap.containsKey(type.baseName)) { return javaTypeForDartTypeMap[type.baseName]; diff --git a/packages/pigeon/mock_handler_tester/test/message.dart b/packages/pigeon/mock_handler_tester/test/message.dart index de2b7db48b5..1ae793cf20b 100644 --- a/packages/pigeon/mock_handler_tester/test/message.dart +++ b/packages/pigeon/mock_handler_tester/test/message.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v10.1.1), do not edit directly. +// Autogenerated from Pigeon (v10.1.3), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/mock_handler_tester/test/test.dart b/packages/pigeon/mock_handler_tester/test/test.dart index 3af78ca43ca..21c4f391856 100644 --- a/packages/pigeon/mock_handler_tester/test/test.dart +++ b/packages/pigeon/mock_handler_tester/test/test.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v10.1.1), do not edit directly. +// Autogenerated from Pigeon (v10.1.3), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import // ignore_for_file: avoid_relative_lib_imports diff --git a/packages/pigeon/pigeons/core_tests.dart b/packages/pigeon/pigeons/core_tests.dart index ceb1de2f36a..f590f87c046 100644 --- a/packages/pigeon/pigeons/core_tests.dart +++ b/packages/pigeon/pigeons/core_tests.dart @@ -25,6 +25,7 @@ class AllTypes { this.aMap = const {}, this.anEnum = AnEnum.one, this.aString = '', + this.anObject = 0, }); bool aBool; @@ -41,6 +42,7 @@ class AllTypes { Map aMap; AnEnum anEnum; String aString; + Object anObject; } /// A class containing all supported nullable types. @@ -61,6 +63,7 @@ class AllNullableTypes { this.nullableMapWithObject, this.aNullableEnum, this.aNullableString, + this.aNullableObject, ); bool? aNullableBool; @@ -80,6 +83,7 @@ class AllNullableTypes { Map? nullableMapWithObject; AnEnum? aNullableEnum; String? aNullableString; + Object? aNullableObject; } /// A class for testing nested class handling. diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java index aa53e509c28..41307363cf8 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java @@ -233,6 +233,19 @@ public void setAString(@NonNull String setterArg) { this.aString = setterArg; } + private @NonNull Object anObject; + + public @NonNull Object getAnObject() { + return anObject; + } + + public void setAnObject(@NonNull Object setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"anObject\" is null."); + } + this.anObject = setterArg; + } + /** Constructor is non-public to enforce null safety; use Builder. */ AllTypes() {} @@ -322,6 +335,13 @@ public static final class Builder { return this; } + private @Nullable Object anObject; + + public @NonNull Builder setAnObject(@NonNull Object setterArg) { + this.anObject = setterArg; + return this; + } + public @NonNull AllTypes build() { AllTypes pigeonReturn = new AllTypes(); pigeonReturn.setABool(aBool); @@ -336,13 +356,14 @@ public static final class Builder { pigeonReturn.setAMap(aMap); pigeonReturn.setAnEnum(anEnum); pigeonReturn.setAString(aString); + pigeonReturn.setAnObject(anObject); return pigeonReturn; } } @NonNull ArrayList toList() { - ArrayList toListResult = new ArrayList(12); + ArrayList toListResult = new ArrayList(13); toListResult.add(aBool); toListResult.add(anInt); toListResult.add(anInt64); @@ -355,6 +376,7 @@ ArrayList toList() { toListResult.add(aMap); toListResult.add(anEnum == null ? null : anEnum.index); toListResult.add(aString); + toListResult.add(anObject); return toListResult; } @@ -388,6 +410,8 @@ ArrayList toList() { pigeonResult.setAnEnum(anEnum == null ? null : AnEnum.values()[(int) anEnum]); Object aString = list.get(11); pigeonResult.setAString((String) aString); + Object anObject = list.get(12); + pigeonResult.setAnObject(anObject); return pigeonResult; } } @@ -548,6 +572,16 @@ public void setANullableString(@Nullable String setterArg) { this.aNullableString = setterArg; } + private @Nullable Object aNullableObject; + + public @Nullable Object getANullableObject() { + return aNullableObject; + } + + public void setANullableObject(@Nullable Object setterArg) { + this.aNullableObject = setterArg; + } + public static final class Builder { private @Nullable Boolean aNullableBool; @@ -656,6 +690,13 @@ public static final class Builder { return this; } + private @Nullable Object aNullableObject; + + public @NonNull Builder setANullableObject(@Nullable Object setterArg) { + this.aNullableObject = setterArg; + return this; + } + public @NonNull AllNullableTypes build() { AllNullableTypes pigeonReturn = new AllNullableTypes(); pigeonReturn.setANullableBool(aNullableBool); @@ -673,13 +714,14 @@ public static final class Builder { pigeonReturn.setNullableMapWithObject(nullableMapWithObject); pigeonReturn.setANullableEnum(aNullableEnum); pigeonReturn.setANullableString(aNullableString); + pigeonReturn.setANullableObject(aNullableObject); return pigeonReturn; } } @NonNull ArrayList toList() { - ArrayList toListResult = new ArrayList(15); + ArrayList toListResult = new ArrayList(16); toListResult.add(aNullableBool); toListResult.add(aNullableInt); toListResult.add(aNullableInt64); @@ -695,6 +737,7 @@ ArrayList toList() { toListResult.add(nullableMapWithObject); toListResult.add(aNullableEnum == null ? null : aNullableEnum.index); toListResult.add(aNullableString); + toListResult.add(aNullableObject); return toListResult; } @@ -739,6 +782,8 @@ ArrayList toList() { aNullableEnum == null ? null : AnEnum.values()[(int) aNullableEnum]); Object aNullableString = list.get(14); pigeonResult.setANullableString((String) aNullableString); + Object aNullableObject = list.get(15); + pigeonResult.setANullableObject(aNullableObject); return pigeonResult; } } diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/test/java/com/example/alternate_language_test_plugin/AllDatatypesTest.java b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/test/java/com/example/alternate_language_test_plugin/AllDatatypesTest.java index cba21e76f49..4e735d92d0e 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/test/java/com/example/alternate_language_test_plugin/AllDatatypesTest.java +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/test/java/com/example/alternate_language_test_plugin/AllDatatypesTest.java @@ -39,7 +39,7 @@ void compareAllTypes(AllTypes firstTypes, AllTypes secondTypes) { assertArrayEquals( firstTypes.getAMap().values().toArray(), secondTypes.getAMap().values().toArray()); assertEquals(firstTypes.getAnEnum(), secondTypes.getAnEnum()); - assertEquals(firstTypes.getAString(), secondTypes.getAString()); + assertEquals(firstTypes.getAnObject(), secondTypes.getAnObject()); } void compareAllNullableTypes(AllNullableTypes firstTypes, AllNullableTypes secondTypes) { @@ -68,6 +68,7 @@ void compareAllNullableTypes(AllNullableTypes firstTypes, AllNullableTypes secon assertArrayEquals( firstTypes.getNullableMapWithObject().values().toArray(), secondTypes.getNullableMapWithObject().values().toArray()); + assertEquals(firstTypes.getANullableObject(), secondTypes.getANullableObject()); } @Test @@ -151,6 +152,7 @@ public void hasValues() { .setAList(Arrays.asList(new int[] {1, 2, 3})) .setAMap(makeMap("hello", 1234)) .setAnEnum(CoreTests.AnEnum.ONE) + .setAnObject(0) .build(); AllNullableTypes everything = @@ -166,6 +168,7 @@ public void hasValues() { .setANullableList(Arrays.asList(new int[] {1, 2, 3})) .setANullableMap(makeMap("hello", 1234)) .setNullableMapWithObject(makeStringMap("hello", 1234)) + .setANullableObject(0) .build(); BinaryMessenger binaryMessenger = mock(BinaryMessenger.class); diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h index 185e866273b..2cf2d11b4d8 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h @@ -40,7 +40,8 @@ typedef NS_ENUM(NSUInteger, AnEnum) { aList:(NSArray *)aList aMap:(NSDictionary *)aMap anEnum:(AnEnum)anEnum - aString:(NSString *)aString; + aString:(NSString *)aString + anObject:(id)anObject; @property(nonatomic, strong) NSNumber *aBool; @property(nonatomic, strong) NSNumber *anInt; @property(nonatomic, strong) NSNumber *anInt64; @@ -53,6 +54,7 @@ typedef NS_ENUM(NSUInteger, AnEnum) { @property(nonatomic, strong) NSDictionary *aMap; @property(nonatomic, assign) AnEnum anEnum; @property(nonatomic, copy) NSString *aString; +@property(nonatomic, strong) id anObject; @end /// A class containing all supported nullable types. @@ -72,7 +74,8 @@ typedef NS_ENUM(NSUInteger, AnEnum) { (nullable NSDictionary *)nullableMapWithAnnotations nullableMapWithObject:(nullable NSDictionary *)nullableMapWithObject aNullableEnum:(AnEnum)aNullableEnum - aNullableString:(nullable NSString *)aNullableString; + aNullableString:(nullable NSString *)aNullableString + aNullableObject:(id)aNullableObject; @property(nonatomic, strong, nullable) NSNumber *aNullableBool; @property(nonatomic, strong, nullable) NSNumber *aNullableInt; @property(nonatomic, strong, nullable) NSNumber *aNullableInt64; @@ -89,6 +92,7 @@ typedef NS_ENUM(NSUInteger, AnEnum) { @property(nonatomic, strong, nullable) NSDictionary *nullableMapWithObject; @property(nonatomic, assign) AnEnum aNullableEnum; @property(nonatomic, copy, nullable) NSString *aNullableString; +@property(nonatomic, strong) id aNullableObject; @end /// A class for testing nested class handling. diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m index 510b9a8f96b..d3a35af1d2d 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m @@ -66,7 +66,8 @@ + (instancetype)makeWithABool:(NSNumber *)aBool aList:(NSArray *)aList aMap:(NSDictionary *)aMap anEnum:(AnEnum)anEnum - aString:(NSString *)aString { + aString:(NSString *)aString + anObject:(id)anObject { AllTypes *pigeonResult = [[AllTypes alloc] init]; pigeonResult.aBool = aBool; pigeonResult.anInt = anInt; @@ -80,6 +81,7 @@ + (instancetype)makeWithABool:(NSNumber *)aBool pigeonResult.aMap = aMap; pigeonResult.anEnum = anEnum; pigeonResult.aString = aString; + pigeonResult.anObject = anObject; return pigeonResult; } + (AllTypes *)fromList:(NSArray *)list { @@ -107,6 +109,8 @@ + (AllTypes *)fromList:(NSArray *)list { pigeonResult.anEnum = [GetNullableObjectAtIndex(list, 10) integerValue]; pigeonResult.aString = GetNullableObjectAtIndex(list, 11); NSAssert(pigeonResult.aString != nil, @""); + pigeonResult.anObject = GetNullableObjectAtIndex(list, 12); + NSAssert(pigeonResult.anObject != nil, @""); return pigeonResult; } + (nullable AllTypes *)nullableFromList:(NSArray *)list { @@ -126,6 +130,7 @@ - (NSArray *)toList { (self.aMap ?: [NSNull null]), @(self.anEnum), (self.aString ?: [NSNull null]), + (self.anObject ?: [NSNull null]), ]; } @end @@ -146,7 +151,8 @@ + (instancetype)makeWithANullableBool:(nullable NSNumber *)aNullableBool (nullable NSDictionary *)nullableMapWithAnnotations nullableMapWithObject:(nullable NSDictionary *)nullableMapWithObject aNullableEnum:(AnEnum)aNullableEnum - aNullableString:(nullable NSString *)aNullableString { + aNullableString:(nullable NSString *)aNullableString + aNullableObject:(id)aNullableObject { AllNullableTypes *pigeonResult = [[AllNullableTypes alloc] init]; pigeonResult.aNullableBool = aNullableBool; pigeonResult.aNullableInt = aNullableInt; @@ -163,6 +169,7 @@ + (instancetype)makeWithANullableBool:(nullable NSNumber *)aNullableBool pigeonResult.nullableMapWithObject = nullableMapWithObject; pigeonResult.aNullableEnum = aNullableEnum; pigeonResult.aNullableString = aNullableString; + pigeonResult.aNullableObject = aNullableObject; return pigeonResult; } + (AllNullableTypes *)fromList:(NSArray *)list { @@ -182,6 +189,7 @@ + (AllNullableTypes *)fromList:(NSArray *)list { pigeonResult.nullableMapWithObject = GetNullableObjectAtIndex(list, 12); pigeonResult.aNullableEnum = [GetNullableObjectAtIndex(list, 13) integerValue]; pigeonResult.aNullableString = GetNullableObjectAtIndex(list, 14); + pigeonResult.aNullableObject = GetNullableObjectAtIndex(list, 15); return pigeonResult; } + (nullable AllNullableTypes *)nullableFromList:(NSArray *)list { @@ -204,6 +212,7 @@ - (NSArray *)toList { (self.nullableMapWithObject ?: [NSNull null]), @(self.aNullableEnum), (self.aNullableString ?: [NSNull null]), + (self.aNullableObject ?: [NSNull null]), ]; } @end diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/macos/Classes/CoreTests.gen.h b/packages/pigeon/platform_tests/alternate_language_test_plugin/macos/Classes/CoreTests.gen.h index 185e866273b..2cf2d11b4d8 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/macos/Classes/CoreTests.gen.h +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/macos/Classes/CoreTests.gen.h @@ -40,7 +40,8 @@ typedef NS_ENUM(NSUInteger, AnEnum) { aList:(NSArray *)aList aMap:(NSDictionary *)aMap anEnum:(AnEnum)anEnum - aString:(NSString *)aString; + aString:(NSString *)aString + anObject:(id)anObject; @property(nonatomic, strong) NSNumber *aBool; @property(nonatomic, strong) NSNumber *anInt; @property(nonatomic, strong) NSNumber *anInt64; @@ -53,6 +54,7 @@ typedef NS_ENUM(NSUInteger, AnEnum) { @property(nonatomic, strong) NSDictionary *aMap; @property(nonatomic, assign) AnEnum anEnum; @property(nonatomic, copy) NSString *aString; +@property(nonatomic, strong) id anObject; @end /// A class containing all supported nullable types. @@ -72,7 +74,8 @@ typedef NS_ENUM(NSUInteger, AnEnum) { (nullable NSDictionary *)nullableMapWithAnnotations nullableMapWithObject:(nullable NSDictionary *)nullableMapWithObject aNullableEnum:(AnEnum)aNullableEnum - aNullableString:(nullable NSString *)aNullableString; + aNullableString:(nullable NSString *)aNullableString + aNullableObject:(id)aNullableObject; @property(nonatomic, strong, nullable) NSNumber *aNullableBool; @property(nonatomic, strong, nullable) NSNumber *aNullableInt; @property(nonatomic, strong, nullable) NSNumber *aNullableInt64; @@ -89,6 +92,7 @@ typedef NS_ENUM(NSUInteger, AnEnum) { @property(nonatomic, strong, nullable) NSDictionary *nullableMapWithObject; @property(nonatomic, assign) AnEnum aNullableEnum; @property(nonatomic, copy, nullable) NSString *aNullableString; +@property(nonatomic, strong) id aNullableObject; @end /// A class for testing nested class handling. diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/macos/Classes/CoreTests.gen.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/macos/Classes/CoreTests.gen.m index 510b9a8f96b..d3a35af1d2d 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/macos/Classes/CoreTests.gen.m +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/macos/Classes/CoreTests.gen.m @@ -66,7 +66,8 @@ + (instancetype)makeWithABool:(NSNumber *)aBool aList:(NSArray *)aList aMap:(NSDictionary *)aMap anEnum:(AnEnum)anEnum - aString:(NSString *)aString { + aString:(NSString *)aString + anObject:(id)anObject { AllTypes *pigeonResult = [[AllTypes alloc] init]; pigeonResult.aBool = aBool; pigeonResult.anInt = anInt; @@ -80,6 +81,7 @@ + (instancetype)makeWithABool:(NSNumber *)aBool pigeonResult.aMap = aMap; pigeonResult.anEnum = anEnum; pigeonResult.aString = aString; + pigeonResult.anObject = anObject; return pigeonResult; } + (AllTypes *)fromList:(NSArray *)list { @@ -107,6 +109,8 @@ + (AllTypes *)fromList:(NSArray *)list { pigeonResult.anEnum = [GetNullableObjectAtIndex(list, 10) integerValue]; pigeonResult.aString = GetNullableObjectAtIndex(list, 11); NSAssert(pigeonResult.aString != nil, @""); + pigeonResult.anObject = GetNullableObjectAtIndex(list, 12); + NSAssert(pigeonResult.anObject != nil, @""); return pigeonResult; } + (nullable AllTypes *)nullableFromList:(NSArray *)list { @@ -126,6 +130,7 @@ - (NSArray *)toList { (self.aMap ?: [NSNull null]), @(self.anEnum), (self.aString ?: [NSNull null]), + (self.anObject ?: [NSNull null]), ]; } @end @@ -146,7 +151,8 @@ + (instancetype)makeWithANullableBool:(nullable NSNumber *)aNullableBool (nullable NSDictionary *)nullableMapWithAnnotations nullableMapWithObject:(nullable NSDictionary *)nullableMapWithObject aNullableEnum:(AnEnum)aNullableEnum - aNullableString:(nullable NSString *)aNullableString { + aNullableString:(nullable NSString *)aNullableString + aNullableObject:(id)aNullableObject { AllNullableTypes *pigeonResult = [[AllNullableTypes alloc] init]; pigeonResult.aNullableBool = aNullableBool; pigeonResult.aNullableInt = aNullableInt; @@ -163,6 +169,7 @@ + (instancetype)makeWithANullableBool:(nullable NSNumber *)aNullableBool pigeonResult.nullableMapWithObject = nullableMapWithObject; pigeonResult.aNullableEnum = aNullableEnum; pigeonResult.aNullableString = aNullableString; + pigeonResult.aNullableObject = aNullableObject; return pigeonResult; } + (AllNullableTypes *)fromList:(NSArray *)list { @@ -182,6 +189,7 @@ + (AllNullableTypes *)fromList:(NSArray *)list { pigeonResult.nullableMapWithObject = GetNullableObjectAtIndex(list, 12); pigeonResult.aNullableEnum = [GetNullableObjectAtIndex(list, 13) integerValue]; pigeonResult.aNullableString = GetNullableObjectAtIndex(list, 14); + pigeonResult.aNullableObject = GetNullableObjectAtIndex(list, 15); return pigeonResult; } + (nullable AllNullableTypes *)nullableFromList:(NSArray *)list { @@ -204,6 +212,7 @@ - (NSArray *)toList { (self.nullableMapWithObject ?: [NSNull null]), @(self.aNullableEnum), (self.aNullableString ?: [NSNull null]), + (self.aNullableObject ?: [NSNull null]), ]; } @end diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart index a66b1c5cb91..f9add7c144b 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v10.1.1), do not edit directly. +// Autogenerated from Pigeon (v10.1.3), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import @@ -18,6 +18,7 @@ enum AnEnum { three, } +/// A class containing all supported types. class AllTypes { AllTypes({ required this.aBool, @@ -32,6 +33,7 @@ class AllTypes { required this.aMap, required this.anEnum, required this.aString, + required this.anObject, }); bool aBool; @@ -58,6 +60,8 @@ class AllTypes { String aString; + Object anObject; + Object encode() { return [ aBool, @@ -72,6 +76,7 @@ class AllTypes { aMap, anEnum.index, aString, + anObject, ]; } @@ -90,10 +95,12 @@ class AllTypes { aMap: result[9]! as Map, anEnum: AnEnum.values[result[10]! as int], aString: result[11]! as String, + anObject: result[12]!, ); } } +/// A class containing all supported nullable types. class AllNullableTypes { AllNullableTypes({ this.aNullableBool, @@ -111,6 +118,7 @@ class AllNullableTypes { this.nullableMapWithObject, this.aNullableEnum, this.aNullableString, + this.aNullableObject, }); bool? aNullableBool; @@ -143,6 +151,8 @@ class AllNullableTypes { String? aNullableString; + Object? aNullableObject; + Object encode() { return [ aNullableBool, @@ -160,6 +170,7 @@ class AllNullableTypes { nullableMapWithObject, aNullableEnum?.index, aNullableString, + aNullableObject, ]; } @@ -184,10 +195,16 @@ class AllNullableTypes { aNullableEnum: result[13] != null ? AnEnum.values[result[13]! as int] : null, aNullableString: result[14] as String?, + aNullableObject: result[15], ); } } +/// A class for testing nested class handling. +/// +/// This is needed to test nested nullable and non-nullable classes, +/// `AllNullableTypes` is non-nullable here as it is easier to instantiate +/// than `AllTypes` when testing doesn't require both (ie. testing null classes). class AllClassesWrapper { AllClassesWrapper({ required this.allNullableTypes, diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/flutter_unittests.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/flutter_unittests.gen.dart index fc3f96d8c50..6464c6566b3 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/flutter_unittests.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/flutter_unittests.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v10.1.1), do not edit directly. +// Autogenerated from Pigeon (v10.1.3), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart index 9790d321d4b..e0179a16fef 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v10.1.1), do not edit directly. +// Autogenerated from Pigeon (v10.1.3), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart index 8c344ea4649..b5132e9fe1c 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v10.1.1), do not edit directly. +// Autogenerated from Pigeon (v10.1.3), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart index 77a0e1e0c4c..4e100e3d43b 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v10.1.1), do not edit directly. +// Autogenerated from Pigeon (v10.1.3), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart index f001b42b1a8..aaa8f1d65fa 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v10.1.1), do not edit directly. +// Autogenerated from Pigeon (v10.1.3), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.gen.dart index 1590e7c575a..cca3f6cbd6d 100644 --- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.gen.dart +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.gen.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Autogenerated from Pigeon (v10.1.1), do not edit directly. +// Autogenerated from Pigeon (v10.1.3), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/integration_tests.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/integration_tests.dart index 0a22cbeb735..c69256c4f44 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 @@ -56,6 +56,7 @@ void runPigeonIntegrationTests(TargetGenerator targetGenerator) { expect(listEquals(allTypesOne.aList, allTypesTwo.aList), true); expect(mapEquals(allTypesOne.aMap, allTypesTwo.aMap), true); expect(allTypesOne.anEnum, allTypesTwo.anEnum); + expect(allTypesOne.anObject, allTypesTwo.anObject); } void compareAllNullableTypes(AllNullableTypes? allNullableTypesOne, @@ -105,6 +106,8 @@ void runPigeonIntegrationTests(TargetGenerator targetGenerator) { mapEquals(allNullableTypesOne.nullableMapWithObject, allNullableTypesTwo.nullableMapWithObject), true); + expect(allNullableTypesOne.aNullableObject, + allNullableTypesTwo.aNullableObject); // TODO(stuartmorgan): Fix and re-enable. // See https://github.com/flutter/flutter/issues/118733 if (targetGenerator != TargetGenerator.objc) { @@ -144,6 +147,7 @@ void runPigeonIntegrationTests(TargetGenerator targetGenerator) { 'e': null }, anEnum: AnEnum.two, + anObject: 0, ); final AllNullableTypes genericAllNullableTypes = AllNullableTypes( @@ -171,6 +175,7 @@ void runPigeonIntegrationTests(TargetGenerator targetGenerator) { nullableMapWithAnnotations: {}, nullableMapWithObject: {}, aNullableEnum: AnEnum.two, + aNullableObject: 0, ); group('Host sync API tests', () { diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart index 3920cb36096..d0d8c34060f 100644 --- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart +++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart @@ -33,6 +33,7 @@ class AllTypes { required this.aMap, required this.anEnum, required this.aString, + required this.anObject, }); bool aBool; @@ -59,6 +60,8 @@ class AllTypes { String aString; + Object anObject; + Object encode() { return [ aBool, @@ -73,6 +76,7 @@ class AllTypes { aMap, anEnum.index, aString, + anObject, ]; } @@ -91,6 +95,7 @@ class AllTypes { aMap: result[9]! as Map, anEnum: AnEnum.values[result[10]! as int], aString: result[11]! as String, + anObject: result[12]!, ); } } @@ -113,6 +118,7 @@ class AllNullableTypes { this.nullableMapWithObject, this.aNullableEnum, this.aNullableString, + this.aNullableObject, }); bool? aNullableBool; @@ -145,6 +151,8 @@ class AllNullableTypes { String? aNullableString; + Object? aNullableObject; + Object encode() { return [ aNullableBool, @@ -162,6 +170,7 @@ class AllNullableTypes { nullableMapWithObject, aNullableEnum?.index, aNullableString, + aNullableObject, ]; } @@ -186,6 +195,7 @@ class AllNullableTypes { aNullableEnum: result[13] != null ? AnEnum.values[result[13]! as int] : null, aNullableString: result[14] as String?, + aNullableObject: result[15], ); } } diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt index 0404656c16c..34a7cc8a289 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt @@ -76,7 +76,8 @@ data class AllTypes ( val aList: List, val aMap: Map, val anEnum: AnEnum, - val aString: String + val aString: String, + val anObject: Any ) { companion object { @@ -94,7 +95,8 @@ data class AllTypes ( val aMap = list[9] as Map val anEnum = AnEnum.ofRaw(list[10] as Int)!! val aString = list[11] as String - return AllTypes(aBool, anInt, anInt64, aDouble, aByteArray, a4ByteArray, a8ByteArray, aFloatArray, aList, aMap, anEnum, aString) + val anObject = list[12] as Any + return AllTypes(aBool, anInt, anInt64, aDouble, aByteArray, a4ByteArray, a8ByteArray, aFloatArray, aList, aMap, anEnum, aString, anObject) } } fun toList(): List { @@ -111,6 +113,7 @@ data class AllTypes ( aMap, anEnum.raw, aString, + anObject, ) } } @@ -135,7 +138,8 @@ data class AllNullableTypes ( val nullableMapWithAnnotations: Map? = null, val nullableMapWithObject: Map? = null, val aNullableEnum: AnEnum? = null, - val aNullableString: String? = null + val aNullableString: String? = null, + val aNullableObject: Any? = null ) { companion object { @@ -158,7 +162,8 @@ data class AllNullableTypes ( AnEnum.ofRaw(it) } val aNullableString = list[14] as String? - return AllNullableTypes(aNullableBool, aNullableInt, aNullableInt64, aNullableDouble, aNullableByteArray, aNullable4ByteArray, aNullable8ByteArray, aNullableFloatArray, aNullableList, aNullableMap, nullableNestedList, nullableMapWithAnnotations, nullableMapWithObject, aNullableEnum, aNullableString) + val aNullableObject = list[15] + return AllNullableTypes(aNullableBool, aNullableInt, aNullableInt64, aNullableDouble, aNullableByteArray, aNullable4ByteArray, aNullable8ByteArray, aNullableFloatArray, aNullableList, aNullableMap, nullableNestedList, nullableMapWithAnnotations, nullableMapWithObject, aNullableEnum, aNullableString, aNullableObject) } } fun toList(): List { @@ -178,6 +183,7 @@ data class AllNullableTypes ( nullableMapWithObject, aNullableEnum?.raw, aNullableString, + aNullableObject, ) } } diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/AllDatatypesTest.kt b/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/AllDatatypesTest.kt index 09cedf4a2e2..abfae652726 100644 --- a/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/AllDatatypesTest.kt +++ b/packages/pigeon/platform_tests/test_plugin/android/src/test/kotlin/com/example/test_plugin/AllDatatypesTest.kt @@ -31,6 +31,7 @@ internal class AllDatatypesTest: TestCase() { assertEquals(firstTypes.aList, secondTypes.aList) assertEquals(firstTypes.aMap, secondTypes.aMap) assertEquals(firstTypes.anEnum, secondTypes.anEnum) + assertEquals(firstTypes.anObject, secondTypes.anObject) } fun compareAllNullableTypes(firstTypes: AllNullableTypes?, secondTypes: AllNullableTypes?) { @@ -49,6 +50,7 @@ internal class AllDatatypesTest: TestCase() { assertEquals(firstTypes.aNullableList, secondTypes.aNullableList) assertEquals(firstTypes.aNullableMap, secondTypes.aNullableMap) assertEquals(firstTypes.nullableMapWithObject, secondTypes.nullableMapWithObject) + assertEquals(firstTypes.aNullableObject, secondTypes.aNullableObject) } @Test @@ -101,6 +103,7 @@ internal class AllDatatypesTest: TestCase() { aNullableList = listOf(1, 2, 3), aNullableMap = mapOf("hello" to 1234), nullableMapWithObject = mapOf("hello" to 1234), + aNullableObject = 0, ) val binaryMessenger = mockk() val api = FlutterIntegrationCoreApi(binaryMessenger) @@ -134,7 +137,7 @@ internal class AllDatatypesTest: TestCase() { assertNotNull(list[1]) assertTrue(list[1] == 123L) - val list2 = listOf(null, 123, null, null, null, null, null, null, null, null, null, null, null, null, null) + val list2 = listOf(null, 123, null, null, null, null, null, null, null, null, null, null, null, null, null, null) val everything2 = AllNullableTypes.fromList(list2) assertEquals(everything.aNullableInt, everything2.aNullableInt) 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 a2dd43f5bce..4e59d20b85b 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 @@ -60,6 +60,7 @@ struct AllTypes { var aMap: [AnyHashable: Any?] var anEnum: AnEnum var aString: String + var anObject: Any static func fromList(_ list: [Any?]) -> AllTypes? { let aBool = list[0] as! Bool @@ -74,6 +75,7 @@ struct AllTypes { let aMap = list[9] as! [AnyHashable: Any?] let anEnum = AnEnum(rawValue: list[10] as! Int)! let aString = list[11] as! String + let anObject = list[12]! return AllTypes( aBool: aBool, @@ -87,7 +89,8 @@ struct AllTypes { aList: aList, aMap: aMap, anEnum: anEnum, - aString: aString + aString: aString, + anObject: anObject ) } func toList() -> [Any?] { @@ -104,6 +107,7 @@ struct AllTypes { aMap, anEnum.rawValue, aString, + anObject, ] } } @@ -127,6 +131,7 @@ struct AllNullableTypes { var nullableMapWithObject: [String?: Any?]? = nil var aNullableEnum: AnEnum? = nil var aNullableString: String? = nil + var aNullableObject: Any? = nil static func fromList(_ list: [Any?]) -> AllNullableTypes? { let aNullableBool: Bool? = nilOrValue(list[0]) @@ -148,6 +153,7 @@ struct AllNullableTypes { aNullableEnum = AnEnum(rawValue: aNullableEnumRawValue)! } let aNullableString: String? = nilOrValue(list[14]) + let aNullableObject: Any? = list[15] return AllNullableTypes( aNullableBool: aNullableBool, @@ -164,7 +170,8 @@ struct AllNullableTypes { nullableMapWithAnnotations: nullableMapWithAnnotations, nullableMapWithObject: nullableMapWithObject, aNullableEnum: aNullableEnum, - aNullableString: aNullableString + aNullableString: aNullableString, + aNullableObject: aNullableObject ) } func toList() -> [Any?] { @@ -184,6 +191,7 @@ struct AllNullableTypes { nullableMapWithObject, aNullableEnum?.rawValue, aNullableString, + aNullableObject, ] } } 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 a2dd43f5bce..4e59d20b85b 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 @@ -60,6 +60,7 @@ struct AllTypes { var aMap: [AnyHashable: Any?] var anEnum: AnEnum var aString: String + var anObject: Any static func fromList(_ list: [Any?]) -> AllTypes? { let aBool = list[0] as! Bool @@ -74,6 +75,7 @@ struct AllTypes { let aMap = list[9] as! [AnyHashable: Any?] let anEnum = AnEnum(rawValue: list[10] as! Int)! let aString = list[11] as! String + let anObject = list[12]! return AllTypes( aBool: aBool, @@ -87,7 +89,8 @@ struct AllTypes { aList: aList, aMap: aMap, anEnum: anEnum, - aString: aString + aString: aString, + anObject: anObject ) } func toList() -> [Any?] { @@ -104,6 +107,7 @@ struct AllTypes { aMap, anEnum.rawValue, aString, + anObject, ] } } @@ -127,6 +131,7 @@ struct AllNullableTypes { var nullableMapWithObject: [String?: Any?]? = nil var aNullableEnum: AnEnum? = nil var aNullableString: String? = nil + var aNullableObject: Any? = nil static func fromList(_ list: [Any?]) -> AllNullableTypes? { let aNullableBool: Bool? = nilOrValue(list[0]) @@ -148,6 +153,7 @@ struct AllNullableTypes { aNullableEnum = AnEnum(rawValue: aNullableEnumRawValue)! } let aNullableString: String? = nilOrValue(list[14]) + let aNullableObject: Any? = list[15] return AllNullableTypes( aNullableBool: aNullableBool, @@ -164,7 +170,8 @@ struct AllNullableTypes { nullableMapWithAnnotations: nullableMapWithAnnotations, nullableMapWithObject: nullableMapWithObject, aNullableEnum: aNullableEnum, - aNullableString: aNullableString + aNullableString: aNullableString, + aNullableObject: aNullableObject ) } func toList() -> [Any?] { @@ -184,6 +191,7 @@ struct AllNullableTypes { nullableMapWithObject, aNullableEnum?.rawValue, aNullableString, + aNullableObject, ] } } diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp index af8e5a20c45..4967584f973 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp +++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp @@ -33,7 +33,8 @@ AllTypes::AllTypes(bool a_bool, int64_t an_int, int64_t an_int64, const std::vector& a8_byte_array, const std::vector& a_float_array, const EncodableList& a_list, const EncodableMap& a_map, - const AnEnum& an_enum, const std::string& a_string) + const AnEnum& an_enum, const std::string& a_string, + const EncodableValue& an_object) : a_bool_(a_bool), an_int_(an_int), an_int64_(an_int64), @@ -45,7 +46,8 @@ AllTypes::AllTypes(bool a_bool, int64_t an_int, int64_t an_int64, a_list_(a_list), a_map_(a_map), an_enum_(an_enum), - a_string_(a_string) {} + a_string_(a_string), + an_object_(an_object) {} bool AllTypes::a_bool() const { return a_bool_; } @@ -115,9 +117,15 @@ void AllTypes::set_a_string(std::string_view value_arg) { a_string_ = value_arg; } +const EncodableValue& AllTypes::an_object() const { return an_object_; } + +void AllTypes::set_an_object(const EncodableValue& value_arg) { + an_object_ = value_arg; +} + EncodableList AllTypes::ToEncodableList() const { EncodableList list; - list.reserve(12); + list.reserve(13); list.push_back(EncodableValue(a_bool_)); list.push_back(EncodableValue(an_int_)); list.push_back(EncodableValue(an_int64_)); @@ -130,6 +138,7 @@ EncodableList AllTypes::ToEncodableList() const { list.push_back(EncodableValue(a_map_)); list.push_back(EncodableValue((int)an_enum_)); list.push_back(EncodableValue(a_string_)); + list.push_back(an_object_); return list; } @@ -141,7 +150,7 @@ AllTypes AllTypes::FromEncodableList(const EncodableList& list) { std::get>(list[6]), std::get>(list[7]), std::get(list[8]), std::get(list[9]), (AnEnum)(std::get(list[10])), - std::get(list[11])); + std::get(list[11]), list[12]); return decoded; } @@ -160,7 +169,8 @@ AllNullableTypes::AllNullableTypes( const EncodableList* nullable_nested_list, const EncodableMap* nullable_map_with_annotations, const EncodableMap* nullable_map_with_object, const AnEnum* a_nullable_enum, - const std::string* a_nullable_string) + const std::string* a_nullable_string, + const EncodableValue* a_nullable_object) : a_nullable_bool_(a_nullable_bool ? std::optional(*a_nullable_bool) : std::nullopt), a_nullable_int_(a_nullable_int ? std::optional(*a_nullable_int) @@ -208,6 +218,9 @@ AllNullableTypes::AllNullableTypes( : std::nullopt), a_nullable_string_(a_nullable_string ? std::optional(*a_nullable_string) + : std::nullopt), + a_nullable_object_(a_nullable_object + ? std::optional(*a_nullable_object) : std::nullopt) {} const bool* AllNullableTypes::a_nullable_bool() const { @@ -423,9 +436,22 @@ void AllNullableTypes::set_a_nullable_string(std::string_view value_arg) { a_nullable_string_ = value_arg; } +const EncodableValue* AllNullableTypes::a_nullable_object() const { + return a_nullable_object_ ? &(*a_nullable_object_) : nullptr; +} + +void AllNullableTypes::set_a_nullable_object(const EncodableValue* value_arg) { + a_nullable_object_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void AllNullableTypes::set_a_nullable_object(const EncodableValue& value_arg) { + a_nullable_object_ = value_arg; +} + EncodableList AllNullableTypes::ToEncodableList() const { EncodableList list; - list.reserve(15); + list.reserve(16); list.push_back(a_nullable_bool_ ? EncodableValue(*a_nullable_bool_) : EncodableValue()); list.push_back(a_nullable_int_ ? EncodableValue(*a_nullable_int_) @@ -462,6 +488,7 @@ EncodableList AllNullableTypes::ToEncodableList() const { : EncodableValue()); list.push_back(a_nullable_string_ ? EncodableValue(*a_nullable_string_) : EncodableValue()); + list.push_back(a_nullable_object_ ? *a_nullable_object_ : EncodableValue()); return list; } @@ -540,6 +567,10 @@ AllNullableTypes AllNullableTypes::FromEncodableList( decoded.set_a_nullable_string( std::get(encodable_a_nullable_string)); } + auto& encodable_a_nullable_object = list[15]; + if (!encodable_a_nullable_object.IsNull()) { + decoded.set_a_nullable_object(encodable_a_nullable_object); + } return decoded; } diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h index 67b0302938b..0a7b9f204c8 100644 --- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h +++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h @@ -80,7 +80,8 @@ class AllTypes { const std::vector& a_float_array, const flutter::EncodableList& a_list, const flutter::EncodableMap& a_map, const AnEnum& an_enum, - const std::string& a_string); + const std::string& a_string, + const flutter::EncodableValue& an_object); bool a_bool() const; void set_a_bool(bool value_arg); @@ -118,6 +119,9 @@ class AllTypes { const std::string& a_string() const; void set_a_string(std::string_view value_arg); + const flutter::EncodableValue& an_object() const; + void set_an_object(const flutter::EncodableValue& value_arg); + private: static AllTypes FromEncodableList(const flutter::EncodableList& list); flutter::EncodableList ToEncodableList() const; @@ -145,6 +149,7 @@ class AllTypes { flutter::EncodableMap a_map_; AnEnum an_enum_; std::string a_string_; + flutter::EncodableValue an_object_; }; // A class containing all supported nullable types. @@ -168,7 +173,8 @@ class AllNullableTypes { const flutter::EncodableList* nullable_nested_list, const flutter::EncodableMap* nullable_map_with_annotations, const flutter::EncodableMap* nullable_map_with_object, - const AnEnum* a_nullable_enum, const std::string* a_nullable_string); + const AnEnum* a_nullable_enum, const std::string* a_nullable_string, + const flutter::EncodableValue* a_nullable_object); const bool* a_nullable_bool() const; void set_a_nullable_bool(const bool* value_arg); @@ -232,6 +238,10 @@ class AllNullableTypes { void set_a_nullable_string(const std::string_view* value_arg); void set_a_nullable_string(std::string_view value_arg); + const flutter::EncodableValue* a_nullable_object() const; + void set_a_nullable_object(const flutter::EncodableValue* value_arg); + void set_a_nullable_object(const flutter::EncodableValue& value_arg); + private: static AllNullableTypes FromEncodableList(const flutter::EncodableList& list); flutter::EncodableList ToEncodableList() const; @@ -262,6 +272,7 @@ class AllNullableTypes { std::optional nullable_map_with_object_; std::optional a_nullable_enum_; std::optional a_nullable_string_; + std::optional a_nullable_object_; }; // A class for testing nested class handling. diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index 3d2d6a658cf..b354fa2d357 100644 --- a/packages/pigeon/pubspec.yaml +++ b/packages/pigeon/pubspec.yaml @@ -2,7 +2,7 @@ name: pigeon description: Code generator tool to make communication between Flutter and the host platform type-safe and easier. repository: https://github.com/flutter/packages/tree/main/packages/pigeon issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3Apigeon -version: 10.1.2 # This must match the version in lib/generator_tools.dart +version: 10.1.3 # This must match the version in lib/generator_tools.dart environment: sdk: ">=2.19.0 <4.0.0"